Почему я получаю исключение PX.Data.PXLockViolationException при попытке создать элемент программным способом? - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть кнопка действия, которая берет строку товара и создает новый товар на основе этой информации. Вот код:

public PXAction<CFBSCatalogHeader> ConvertToItem;
[PXButton()]
[PXUIField(DisplayName = "Convert to Item")]
protected void convertToItem()
{
    CFBSCatalogDetail row = Details.Current;
    if (row == null)
        return;

    InventoryItemMaint graph = PXGraph.CreateInstance<InventoryItemMaint>();
    graph.Item.Current = graph.Item.Insert();
    graph.Item.Current.InventoryCD = row.VendorPartID;
    graph.Item.Current.Descr = row.Descr;
    graph.Item.Current.ItemClassID = 526;
    graph.Item.Current.ItemType = "M";
    graph.Item.Current.ValMethod = "F";
    graph.Item.Current.TaxCategoryID = "TAXDEFAULT";
    graph.Item.Current.PostClassID = "INVDEFAULT";
    graph.Item.Current.LotSerClassID = "LOTSNDEFAU";
    graph.Item.Current.BaseUnit = "EA";
    graph.Item.Current.SalesUnit = "EA";
    graph.Item.Current.PurchaseUnit = "EA";

    graph.Item.Update(graph.Item.Current);

    graph.Actions.PressSave();
}

Я получаю эту ошибку:

enter image description here

Несмотря на ошибку, предмет все еще сохраняется. Я предполагаю, что запись пытается сохранить более одного раза, но я не уверен, почему.

EDIT:

Вот след для ошибки:

11/7/2018 8:21:48 Ошибка: Ошибка: другой процесс добавил запись «InventoryItem». Ваши изменения будут >> потеряны.

в PX.Data.PXCache`1.PersistInserted (строка объекта) в PX.Data.PXCache`1.Persist (операция PXDBOperation) в PX.Data.PXGraph.Persist (Тип cacheType, операция PXDBOperation) в PX.Data.PXGraph.Persist () в PX.Objects.IN.InventoryItemMaint.Persist () в F: \ Bld \ AC-FULL2018R112-JOB1 \ sources \ WebSites \ Pure \ PX.Objects \ IN \ NonStockItemMaint.cs: строка 2421 в JAMS.AEF.InventoryItemMaintAMExtension.Persist (Action del) в CFBSModificationTSC.VendorCatalog.convertToItem () в d: \ Program Files \ Acumatica ERP \ TexasScenic \ App_RuntimeCode \ VendorCatalog.cs: строка 70 в PX.Data.PXAction`1. <> c__DisplayClass3_0. <. ctor> b__0 (адаптер PXAdapter) в PX.Data.PXAction`1.a (PXAdapter A_0) в PX.Data.PXAction`1.d__31.MoveNext () в PX.Data.PXAction`1.d__31.MoveNext () в PX.Web.UI.PXBaseDataSource.tryExecutePendingCommand (String viewName, String [] sortcolumns, логические [] нисходящие, поиски Object [], параметры Object [], аргументы PXFilterRow [], аргументы DataSourceSelectArguments, логические и адаптеры closeWindowReowStartTowToRTRALTOWTTROTTALTORTTALTRENTEALTORTINGTREINT, Int32 ) в PX.Web.UI.PXBaseDataSource.ExecuteSelect (аргументы String viewName, DataSourceSelectArguments, PXDSSelectArguments pxarguments)

1 Ответ

0 голосов
/ 07 ноября 2018

Вам нужно установить значение CD на вставке ...

graph.Item.Current = graph.Item.Insert(new InventoryItem { InventoryCD = row.VendorPartID });

Затем установите остальные поля в обновлении, как в примере.

...