2016-06-20 9 views
0

Ich muss mein benutzerdefiniertes Attribut verwenden, um ein Ereignis auszulösen, in diesem Fall brauche ich usrTextileItem == true, um das Feld usrTextileItemType auf visible = true zu triggern.Wie kann ich benutzerdefinierte acumatica-Attribut in Event Handler verwenden?

hier ist meine Erklärung in Verlängerung für Textile Artikel

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

hier ist meine Erklärung in Verlängerung für Textil Medienart

[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" 
})] 

und dies ist meine aktuelle 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); 
} 

} 

und ich kann den Wert der Erweiterungen nicht erhalten, und ich habe 3 Fehler, der sagt: Erster Fehler:

'PX.Data.PXCache' does not contain a definition for 'GetExtension' and the best extension method overload 'PX.Data.PXCacheEx.GetExtension(PX.Data.IBqlTable)' has some invalid arguments in file: Code#InventoryItemMaint(37)

Instance argument: cannot convert from 'PX.Data.PXCache' to 'PX.Data.IBqlTable' in file: Code#InventoryItemMaint(37)

'usrTextileItem': cannot reference a type through an expression; try 'PX.Objects.IN.InventoryItemExt.usrTextileItem' instead in file: Code#InventoryItemMaint(39)

Antwort

1

Der Code kompiliert nicht, aber selbst wenn es so wäre, würde es nicht funktionieren. SetVisible, SetEnabled oder ein anderer Anruf, der die Benutzeroberfläche beeinflusst, sollte nicht vom FieldUpdated-Ereignis aus erfolgen. Sie sollten es stattdessen von RowSelected tun. Dies wird während des Trainingsmaterials für Entwickler behandelt. Ich schlage vor, dass Sie überprüfen, wie Ereignisse funktionieren und in welcher Reihenfolge sie verarbeitet werden, wenn Sie den Wert ändern und einen Rückruf durchführen.

P.S. cache.GetExtension<T>(); erwartet einen Parameter - ersetzen Sie ihn durch cache.GetExtension<InventoryItemExt>(row);