# FactoryNew is not working for custom asset type

**URL:** <https://forums.unrealengine.com/t/factorynew-is-not-working-for-custom-asset-type/786834>\
**Category:** Programming & Scripting\
**Tags:** classes, unreal-engine, c, question\
**Created:** [March 9, 2023, 3:34am UTC](https://forums.unrealengine.com/t/factorynew-is-not-working-for-custom-asset-type/786834 "2023-03-09T03:34:54Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Beyond\_edge](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Beyond\_edge](https://forums.unrealengine.com/u/Beyond_edge)\
**Post date:** [March 9, 2023, 3:34am UTC](https://forums.unrealengine.com/t/factorynew-is-not-working-for-custom-asset-type/786834/1 "2023-03-09T03:34:54Z")

</div>

Hi I’ve been trying to create a custom asset type but no matter what I do I can’t get the custom asset to appear in misc category. I tried looking it up but none of the resources seem to work my code will be below. Any help would be appreciated.

I’m using UE4 version 4.27.2

JTable.h

```auto
UCLASS(BlueprintType)
class MYTABLELOADER_API UJTable : public UObject
{
	GENERATED_BODY()

public:
	//Get a entire row 
	/*UFUNCTION(BlueprintCallable)
	FJTableRow& GetRow(FString RowName) { return Rows[RowName]; };

	//Get a row's column as a FJTableValue
	UFUNCTION(BlueprintCallable)
	FJTableValue& GetRowColumn(FString RowName, FString ColumnName);

	//Get a row's coulumn as a bool
	UFUNCTION(BlueprintCallable)
	bool GetBoolRowColumn(FString RowName, FString ColumnName);

	UFUNCTION(BlueprintCallable)
	int32 GetInt32RowColumn(FString RowName, FString ColumnName);

	UFUNCTION(BlueprintCallable)
	int64 GetInt64RowColumn(FString RowName, FString ColumnName);

	UFUNCTION(BlueprintCallable)
	float GetFloatRowColumn(FString RowName, FString ColumnName);

	UFUNCTION(BlueprintCallable)
	FString GetStringRowColumn(FString RowName, FString ColumnName);

	UFUNCTION(BlueprintCallable)
	TArray<FJTableValue&> GetArrayRowColumn(FString RowName, FString ColumnName);

	UFUNCTION(BlueprintCallable)
	TMap<FString, FJTableValue&> GetMapRowColumn(FString RowName, FString ColumnName);

	//Add row
	UFUNCTION(BlueprintCallable)
	void AddRow(FString RowName, FJTableRow& RowValue) {};

	//Fill row by array
	UFUNCTION(BlueprintCallable)
	void FillRowByArray(FString RowName, TArray<FJTableValue&> RowValue) {};

	//Fill row by map
	UFUNCTION(BlueprintCallable)
	void FillRowByMap(FString RowName, TMap<FString, FJTableValue&> RowValue) {};*/

	
	//bool GetValueAsDouble();

	//C++ Only functions
	//--Get functions
	bool TryGetRowAs(FString RowName, FString ColumnName, int32& Val, int32 Dex = 0);

	bool TryGetRowAs(FString RowName, FString ColumnName, int64& Val, int32 Dex = 0);

	bool TryGetRowAs(FString RowName, FString ColumnName, float& Val, int32 Dex = 0);

	bool TryGetRowAs(FString RowName, FString ColumnName, double& Val, int32 Dex = 0);

	bool TryGetRowAs(FString RowName, FString ColumnName, bool& Val, int32 Dex = 0);

	bool TryGetRowAs(FString RowName, FString ColumnName, FString& Val, int32 Dex = 0);

	bool TryGetRowAs(FString RowName, FString ColumnName, int32& Val, FString Dex);

	bool TryGetRowAs(FString RowName, FString ColumnName, int64& Val, FString Dex);

	bool TryGetRowAs(FString RowName, FString ColumnName, float& Val, FString Dex);

	bool TryGetRowAs(FString RowName, FString ColumnName, double& Val, FString Dex);

	bool TryGetRowAs(FString RowName, FString ColumnName, bool& Val, FString Dex);

	bool TryGetRowAs(FString RowName, FString ColumnName, FString& Val, FString Dex);

	bool TryGetRowAs(FString RowName, FString ColumnName, TArray<int32>& Val);

	bool TryGetRowAs(FString RowName, FString ColumnName, TArray<int64>& Val);

	bool TryGetRowAs(FString RowName, FString ColumnName, TArray<float>& Val);

	bool TryGetRowAs(FString RowName, FString ColumnName, TArray<double>& Val);

	bool TryGetRowAs(FString RowName, FString ColumnName, TArray<bool>& Val);

	bool TryGetRowAs(FString RowName, FString ColumnName, TArray<FString>& Val);

	bool TryGetRowAs(FString RowName, FString ColumnName, TMap<FString, int32>& Val);

	bool TryGetRowAs(FString RowName, FString ColumnName, TMap<FString, int64>& Val);

	bool TryGetRowAs(FString RowName, FString ColumnName, TMap<FString, float>& Val);

	bool TryGetRowAs(FString RowName, FString ColumnName, TMap<FString, double>& Val);

	bool TryGetRowAs(FString RowName, FString ColumnName, TMap<FString, bool>& Val);

	bool TryGetRowAs(FString RowName, FString ColumnName, TMap<FString, FString>& Val);

	//--Set functions
	bool TrySetRowAs(FString RowName, FString ColumnName, int32& Val, int32 Dex = 0);

	bool TrySetRowAs(FString RowName, FString ColumnName, int64& Val, int32 Dex = 0);

	bool TrySetRowAs(FString RowName, FString ColumnName, float& Val, int32 Dex = 0);

	bool TrySetRowAs(FString RowName, FString ColumnName, double& Val, int32 Dex = 0);

	bool TrySetRowAs(FString RowName, FString ColumnName, bool& Val, int32 Dex = 0);

	bool TrySetRowAs(FString RowName, FString ColumnName, FString& Val, int32 Dex = 0);

	bool TrySetRowAs(FString RowName, FString ColumnName, int32& Val, FString Dex);

	bool TrySetRowAs(FString RowName, FString ColumnName, int64& Val, FString Dex);

	bool TrySetRowAs(FString RowName, FString ColumnName, float& Val, FString Dex);

	bool TrySetRowAs(FString RowName, FString ColumnName, double& Val, FString Dex);

	bool TrySetRowAs(FString RowName, FString ColumnName, bool& Val, FString Dex);

	bool TrySetRowAs(FString RowName, FString ColumnName, FString& Val, FString Dex);

	bool TrySetRowAs(FString RowName, FString ColumnName, TArray<int32>& Val);

	bool TrySetRowAs(FString RowName, FString ColumnName, TArray<int64>& Val);

	bool TrySetRowAs(FString RowName, FString ColumnName, TArray<float>& Val);

	bool TrySetRowAs(FString RowName, FString ColumnName, TArray<double>& Val);

	bool TrySetRowAs(FString RowName, FString ColumnName, TArray<bool>& Val);

	bool TrySetRowAs(FString RowName, FString ColumnName, TArray<FString>& Val);

	bool TrySetRowAs(FString RowName, FString ColumnName, TMap<FString, int32>& Val);

	bool TrySetRowAs(FString RowName, FString ColumnName, TMap<FString, int64>& Val);

	bool TrySetRowAs(FString RowName, FString ColumnName, TMap<FString, float>& Val);

	bool TrySetRowAs(FString RowName, FString ColumnName, TMap<FString, double>& Val);

	bool TrySetRowAs(FString RowName, FString ColumnName, TMap<FString, bool>& Val);

	bool TrySetRowAs(FString RowName, FString ColumnName, TMap<FString, FString>& Val);

	//--Special get functions
	FJTableColumn* GetTableColumn(FString ColumnName);

	void GetTableRow(FString RowName) {};

	//--Misc function
	void EmptyColumn(FString ColumnName);

	void RemoveColumn(FString ColumnName);

	//To work on
	void RemoveRow(FString ColumnName) {};

	//Blueprints Functions
	UFUNCTION()
	bool GetRowAsInt(FString RowName, FString ColumnName, int32& Val);

	UFUNCTION()
	bool GetRowAsfloat(FString RowName, FString ColumnName, float& Val);

	UFUNCTION()
	bool GetRowAsInt64(FString RowName, FString ColumnName, int64& Val);

	UFUNCTION()
	bool GetRowAsBool(FString RowName, FString ColumnName, bool& Val);

	UFUNCTION()
	bool GetRowAsString(FString RowName, FString ColumnName, FString& Val);

	UFUNCTION()
	bool GetRowAsIntArray(FString RowName, FString ColumnName, TArray<int32>& Val);

	UFUNCTION()
	bool GetRowAsInt64Array(FString RowName, FString ColumnName, TArray<int64>& Val);

	UFUNCTION()
	bool GetRowAsfloatArray(FString RowName, FString ColumnName, TArray<float>& Val);

	UFUNCTION()
	bool GetRowAsBoolArray(FString RowName, FString ColumnName, TArray<bool>& Val);

	UFUNCTION()
	bool GetRowAsStringArray(FString RowName, FString ColumnName, TArray<FString>& Val);

	UFUNCTION()
	bool IndexArrayAsInt(FString RowName, FString ColumnName, int32& Val, int32 Dex = 0);

	UFUNCTION()
	bool IndexArrayAsInt64(FString RowName, FString ColumnName, int64& Val, int32 Dex = 0);

	UFUNCTION()
	bool IndexArrayAsfloat(FString RowName, FString ColumnName, float& Val, int32 Dex = 0);

	UFUNCTION()
	bool IndexArrayAsBool(FString RowName, FString ColumnName, bool& Val, int32 Dex = 0);

	UFUNCTION()
	bool IndexArrayAsString(FString RowName, FString ColumnName, FString& Val, int32 Dex = 0);

	UFUNCTION()
	bool GetRowAsIntMap(FString RowName, FString ColumnName, TMap<FString, int32>& Val);

	UFUNCTION()
	bool GetRowAsInt64Map(FString RowName, FString ColumnName, TMap<FString, int64>& Val);

	UFUNCTION()
	bool GetRowAsfloatMap(FString RowName, FString ColumnName, TMap<FString, float>& Val);

	UFUNCTION()
	bool GetRowAsBoolMap(FString RowName, FString ColumnName, TMap<FString, bool>& Val);

	UFUNCTION()
	bool GetRowAsStringMap(FString RowName, FString ColumnName, TMap<FString, FString>& Val);

	UFUNCTION()
	bool IndexMapAsInt(FString RowName, FString ColumnName, int32& Val, FString Dex);

	UFUNCTION()
	bool IndexMapAsInt64(FString RowName, FString ColumnName, int64& Val, FString Dex);

	UFUNCTION()
	bool IndexMapAsfloat(FString RowName, FString ColumnName, float& Val, FString Dex);

	UFUNCTION()
	bool IndexMapAsBool(FString RowName, FString ColumnName, bool& Val, FString Dex);

	UFUNCTION()
	bool IndexMapAsString(FString RowName, FString ColumnName, FString& Val, FString Dex);

	UFUNCTION()
	bool SetRowAsInt(FString RowName, FString ColumnName, int32 Val);

	UFUNCTION()
	bool SetRowAsfloat(FString RowName, FString ColumnName, float Val);

	UFUNCTION()
	bool SetRowAsInt64(FString RowName, FString ColumnName, int64 Val);

	UFUNCTION()
	bool SetRowAsBool(FString RowName, FString ColumnName, bool Val);

	UFUNCTION()
	bool SetRowAsString(FString RowName, FString ColumnName, FString Val);

	UFUNCTION()
	bool SetRowAsIntArray(FString RowName, FString ColumnName, TArray<int32>Val);

	UFUNCTION()
	bool SetRowAsInt64Array(FString RowName, FString ColumnName, TArray<int64>Val);

	UFUNCTION()
	bool SetRowAsfloatArray(FString RowName, FString ColumnName, TArray<float>Val);

	UFUNCTION()
	bool SetRowAsBoolArray(FString RowName, FString ColumnName, TArray<bool>Val);

	UFUNCTION()
	bool SetRowAsStringArray(FString RowName, FString ColumnName, TArray<FString>Val);

	UFUNCTION()
	bool SetArrayAsInt(FString RowName, FString ColumnName, int32 Val, int32 Dex = 0);

	UFUNCTION()
	bool SetArrayAsInt64(FString RowName, FString ColumnName, int64 Val, int32 Dex = 0);

	UFUNCTION()
	bool SetArrayAsfloat(FString RowName, FString ColumnName, float Val, int32 Dex = 0);

	UFUNCTION()
	bool SetArrayAsBool(FString RowName, FString ColumnName, bool Val, int32 Dex = 0);

	UFUNCTION()
	bool SetArrayAsString(FString RowName, FString ColumnName, FString Val, int32 Dex = 0);

	UFUNCTION()
	bool SetRowAsIntMap(FString RowName, FString ColumnName, TMap<FString, int32>Val);

	UFUNCTION()
	bool SetRowAsInt64Map(FString RowName, FString ColumnName, TMap<FString, int64>Val);

	UFUNCTION()
	bool SetRowAsfloatMap(FString RowName, FString ColumnName, TMap<FString, float>Val);

	UFUNCTION()
	bool SetRowAsBoolMap(FString RowName, FString ColumnName, TMap<FString, bool>Val);

	UFUNCTION()
	bool SetRowAsStringMap(FString RowName, FString ColumnName, TMap<FString, FString>Val);

	UFUNCTION()
	bool SetMapAsInt(FString RowName, FString ColumnName, int32 Val, FString Dex);

	UFUNCTION()
	bool SetMapAsInt64(FString RowName, FString ColumnName, int32 Val, FString Dex);

	UFUNCTION()
	bool SetMapAsfloat(FString RowName, FString ColumnName, int32 Val, FString Dex);

	UFUNCTION()
	bool SetMapAsBool(FString RowName, FString ColumnName, int32 Val, FString Dex);

	UFUNCTION()
	bool SetMapAsString(FString RowName, FString ColumnName, int32 Val, FString Dex);

private:
	//Hold the member data tables
	UPROPERTY()
	TArray<UDataTable*> TableMembers;

	UPROPERTY(EditAnywhere, Category = "Notes")
	FString TableNote;

	UPROPERTY(EditAnywhere, Category = "Misc options")
	bool IgnoreBlank = true;
	//
	//UPROPERTY()
	//FJTableRow RowStruct;
	TMap<FString, FJTableColumn*> Columns;

	//Holds all the rows of the table
	//TMap<FString, FJTableRow&> Rows;

	//Hold only the imported rows
	//TMap<FString, FJTableRow&> DefaultRows;

};

```

JTableFactoryNew.h

```auto
UCLASS()
class MYTABLELOADER_API UJTableFactoryNew : public UFactory
{
	GENERATED_BODY()

public:
	UJTableFactoryNew() {
		SupportedClass = UJTable::StaticClass();
		bCreateNew = true;
		bEditAfterNew = true;
	};/**/

	

	//UJTableFactoryNew(const FObjectInitializer& ObjectInitializer);

	virtual UObject* FactoryCreateNew(UClass* InClass, UObject* InParent, FName InName, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn);

	virtual bool ShouldShowInNewMenu() const override;
	//ShouldShowInNewMenu();
	//virtual bool ShouldShowInNewMenu() const override;
};

class FJTableTypeActions : public FAssetTypeActions_Base {
public:
	UClass* GetSupportedClass() const override;

	FText GetName() const override;

	FColor GetTypeColor() const override;

	uint32 GetCategories() override;
};

```

JTableFactoryNew.cpp

```auto
UObject* UJTableFactoryNew::FactoryCreateNew(UClass* InClass, UObject* InParent, FName InName, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn)
{
	//return NewObject<UJTable>(InParent, Class, Name, Flags, Context);

	check(InClass->IsChildOf(UJTable::StaticClass()));
	return NewObject<UJTable>(InParent, InClass, InName, Flags);
}

bool UJTableFactoryNew::ShouldShowInNewMenu() const
{
	return true;
}

UClass* FJTableTypeActions::GetSupportedClass() const
{
	return UJTable::StaticClass();
}

FText FJTableTypeActions::GetName() const
{
	return INVTEXT("J Table");
	//return NSLOCTEXT("AssetTypeActions", "AssetTypeActions_TextAsset", "Text Asset");
}

FColor FJTableTypeActions::GetTypeColor() const
{
	return FColor::Cyan;
}

uint32 FJTableTypeActions::GetCategories()
{
	return EAssetTypeCategories::Misc;
}

```
