Как я могу использовать настраиваемый атрибут acumatica в обработчике событий?

Мне нужно использовать свой настраиваемый атрибут для запуска события, в этом случае мне нужно, чтобы usrTextileItem==true активировал поле usrTextileItemType для visible=true.

вот моя декларация в расширении для текстиля

[PXBool]
[PXUIField(DisplayName="Textile Item")]

вот моя декларация в расширении для типа текстильного изделия

[PXDBString(1)]
[PXUIField(DisplayName="Textile Item Type", Visible=false)]
[PXDefault("C")]
[PXStringList(
new string[]{
"C","Y","B","F"   
},
new string[]{
"Cotton", "Yarn","Beam","Finish Goods"
})]

а это мой нынешний InventroyMaint__Extension

protected void InventoryItem_UsrTextileItem_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e)
{

  InventoryItem row = (InventoryItem)e.Row;
  InventoryItemExt ext = cache.GetExtension<InventoryItemExt>();

 if(ext.usrTextileItem==true){ 
    PXUIFieldAttribute.SetVisible<InventoryItemExt.usrTextileItemType>(cache, row, true);
 }

}

и я не могу получить значение расширения, и у меня есть 3 ошибки, в которых говорится: Первая ошибка:

«PX.Data.PXCache» не содержит определения для «GetExtension», а лучшая перегрузка метода расширения «PX.Data.PXCacheEx.GetExtension(PX.Data.IBqlTable)» содержит некоторые недопустимые аргументы в файле: Code#InventoryItemMaint(37 )

Аргумент экземпляра: невозможно преобразовать из «PX.Data.PXCache» в «PX.Data.IBqlTable» в файле: Code#InventoryItemMaint(37)

'usrTextileItem': нельзя ссылаться на тип через выражение; попробуйте «PX.Objects.IN.InventoryItemExt.usrTextileItem» вместо этого в файле: Code#InventoryItemMaint(39)


person Rian Putra Mantovani    schedule 20.06.2016    source источник


Ответы (1)


Код не компилируется, но даже если бы и компилировался, то не работал бы. SetVisible, SetEnabled или любой другой вызов, влияющий на пользовательский интерфейс, не должен выполняться из события FieldUpdated. Вместо этого вы должны сделать это с RowSelected. Это рассматривается в учебных материалах для разработчиков; Я предлагаю вам просмотреть, как работают события и в каком порядке они обрабатываются, когда вы меняете значение и выполняете обратный вызов.

P.S. cache.GetExtension<T>(); ожидает параметр - замените его на cache.GetExtension<InventoryItemExt>(row);

person Gabriel    schedule 20.06.2016