Могу ли я динамически устанавливать параметр PXDataFieldAssign объекта PXDataFieldParam?

#acumatica

#acumatica

Вопрос:

У меня есть код, который устанавливает значение PXDataFieldAssign следующим образом:

 pf = new PXDataFieldAssign<xTACProjectTask.dueDate>(someValue);
 

У меня также есть таблица, содержащая имена полей DAC, такие как «xTACProjectTask.DueDate». В этой таблице также есть поле флажка, чтобы определить, следует ли использовать это поле DAC в качестве параметра.

Есть ли способ не иметь жестко запрограммированного имени поля DAC, а вместо этого (возможно, с помощью вызова ‘typeof’?) Использовать результаты запроса таблицы для задания этого имени поля — например, следующим образом?

 pf = new PXDataFieldAssign<typeof("xTACProjectTask.dueDate")>(someValue);
 

или, используя результат моего запроса:

 pf = new PXDataFieldAssign<typeof(query.value)>(someValue); 
 

при этом query.value является значением в таблице, содержащей имя поля DAC?

Ответ №1:

Вы можете создать его с помощью Type.GetType и Activator.CreateInstance . Пожалуйста, посмотрите пример ниже:

 string typeName = "PX.Objects.IN.InventoryItem descr,PX.Objects";
Type typeArgument = Type.GetType(typeName);
Type genericClass = typeof(PXDataFieldAssign<>);
Type constructedClass = genericClass.MakeGenericType(typeArgument);
object created = Activator.CreateInstance(constructedClass,new object[] { "Test Description" });
 

Вы получите приведенное ниже завернутое object в created

введите описание изображения здесь