Эффективное использование экрана обработки заказа на поставку с пользовательским требованием пополнения - PullRequest
0 голосов
/ 16 ноября 2018

Я добавляю новый ЦАП / График, который будет управлять покупками, и я хочу провести маршрут через экран обработки заказа на поставку, чтобы он соответствовал Acumatica ERP.Я использую INRepleninessMaint для создания записи INItemPlan, но мне нужен usrField для захвата моего ссылочного номера источника (аналогично SO Order #).

После сохранения записи INItemPlan я обновляю INItemPlanExt.usrField длязахватить мою исходную запись с помощью:

planExt.UsrField = myData.myKeyField;
graphRepl.Caches[typeof(INItemPlanExt)].Update(planExt);
graphRepl.Caches[typeof(INItemPlanExt)].Persist(PXDBOperation.Update);

Однако, если я еще не создал заказ на покупку, я не могу обновить myData со ссылкой на PO.Поэтому мне нужно обновить существующую запись INItemPlan, если она существует, когда я нажимаю кнопку «Создать PO» на моем пользовательском графике, но продолжаю создавать новую запись INItemPlan.

Моя дилемма заключается в том, что соединение с myData находится вINItemPlanExt, который я могу искать из моей строки INItemPlan, но мне нужно искать в обратном порядке ... то есть мне нужно найти свой INItemPlan из значения, хранящегося в моем usrField в Ext DAC.

Как сделатьВернусь ли я к базовому ЦАП из Ext DAC?Или я просто ошибаюсь?(Если это так, пожалуйста, скажите мне, как мне следует обрабатывать строки (и) myData в PO, чтобы соответствовать Acumatica ERP.) Я использую 2018R1.

1 Ответ

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

Довольно простое решение ... Я создал собственный класс, который наследуется от INItemPlan, и добавил туда свое поле. Это позволило мне получить доступ к полю при поиске в таблице INItemPlan моей пользовательской ссылки.

[Serializable()]
public partial class ZZINItemPlan : INItemPlan, IBqlTable
{
    #region UsrTagNbr
    [PXDBString(15)]
    [PXUIField(DisplayName ="Tag Nbr.")]
    public virtual string UsrTagNbr { get; set; }
    public abstract class usrTagNbr : PX.Data.IBqlField { }
    #endregion
}

Далее найдите строку из "usrTagNbr" ...

ZZINItemPlan plan =
    PXSelect<ZZINItemPlan, Where<ZZINItemPlan.usrTagNbr, Equal<Required<ZZINItemPlan.usrTagNbr>>>>
    .Select(this, myData.TagNbr);

Если не найден TagNbr для применения обновлений, создайте новую строку ...

if (plan == null) plan = new ZZINItemPlan();
[set values here]

Давайте выполним нормальный граф для обновления (который будет вставлен, если не найден) в базу данных, чтобы вся нормальная бизнес-логика была проверена для проверки. (Мы должны привести данные ZZINItemPlan к INItemPlan для графика.)

INReplenishmentMaint graphRepl = PXGraph.CreateInstance<INReplenishmentMaint>();
INItemPlan iplan = graphRepl.Plans.Update((INItemPlan) plan);

Поскольку поле usrTagNbr было потеряно при преобразовании в INItemPlan, нам необходимо поместить данные TagNbr в расширение DAC.

INItemPlanExt planExt = PXCache<INItemPlan>.GetExtension<INItemPlanExt>(iplan);

planExt.UsrTagNbr = ncmTag.TagNbr;
graphRepl.Caches[typeof(INItemPlanExt)].Update(planExt);
graphRepl.Caches[typeof(INItemPlanExt)].Persist(PXDBOperation.Update);
...