Как получить расширение графика acumatica - PullRequest
0 голосов
/ 30 сентября 2019

Привет, я пытаюсь получить расширение, я знаю, как получить расширение, подобное этому

 InventoryItem itemsx = (InventoryItem)Base.ItemSettings.Current;
 var ItemExt = PXCache<InventoryItem>.GetExtension<InventoryItemExt>(itemsx);

Но что, если я хочу получить расширение для создания графа, я могу получить ссылку на граф, но не могу получить его расширение? .

SOOrderEntry graph = PXGraph.CreateInstance<SOOrderEntry>();

 var extgraph = graph.GetExtension<SOOrderEntry>();

правильно ли я делаю это? Я не могу получить SOOrderEntryExt для своего кода, я не знаю, почему кто-то может мне помочь, благодаря advace

1 Ответ

0 голосов
/ 30 сентября 2019

Для доступа к экземпляру расширения BLC необходимо либо вызвать метод GetExtension<T>(object) в существующем экземпляре базового класса, либо сначала создать новый экземпляр базового BLC, а затем вызвать метод GetExtension<T>(object) в экземпляре.

public class SOOrderEntryExt : PXGraphExtension<SOOrderEntry>
{
    public PXAction<SOOrder> UpdateDoc;
    [PXButton(CommitChanges = true)]
    [PXUIField(DisplayName = "Recalculate Price")]
    public virtual IEnumerable updateDoc(PXAdapter adapter)
    {
        if (this.Base.Document.Current != null)
        {
            InventoryItemMaint itemMaint = PXGraph.CreateInstance<InventoryItemMaint>();
            /*you can access an instance of a BLC extension through the base BLC 
             * object by using the GetExtension< T > (object)generic method of the PXGraph class*/
            var itemMaintExt = itemMaint.GetExtension<InventoryItemMaintExt>();
            foreach (SOLine line in this.Base.Transactions.Select())
            {
                InventoryItem inventory = PXSelectorAttribute.Select<SOLine.inventoryID>(this.Base.Transactions.Cache, line, line.InventoryID) as InventoryItem;
                if (inventory != null)
                {
                    InventoryItem inventoryNew = itemMaintExt.UpdatePrice(itemMaint, inventory);
                    line.CuryUnitPrice = inventoryNew.BasePrice;
                    this.Base.Transactions.Update(this.Base.Transactions.Current);
                }
            }
            this.Base.Save.PressButton();
        }
        return adapter.Get();
    }
}
public class InventoryItemMaintExt : PXGraphExtension<InventoryItemMaint>
{
    public virtual InventoryItem UpdatePrice(InventoryItemMaint itemMaint,InventoryItem item)
    {
        if (item != null)
        {
            itemMaint.Item.Current = item;
            item.BasePrice = 500M;
            itemMaint.Item.Update(item);
            itemMaint.Save.PressButton();
        }
        return item;
    }
}
...