После использования пользовательской таблицы «Tag» для создания Заказа на продажу, предназначенного для выполнения через PO, мне нужно прикрепить свой собственный «Tag ID» к записи INItemPlan для будущего использования в процессе покупки. Несмотря на то, что я смог сделать это успешно в других местах, повторение той же методологии сейчас не работает.
В коде объект INItemPlanExt извлекается для объекта INItemPlan. Значение присваивается полю UsrTagID, и данные могут быть получены из кэша после Persist.
Приведенный ниже код показывает поиск из SOLine в SOLineSplit (s) в запись INItemPlan, которая предназначена для обработки покупки через график PO Create позже. В целях тестирования он устанавливает значение, сохраняет данные и затем извлекает их снова. Трассировка показывает, что значение представляется записанным и извлекаемым, но в базе данных не отображается значение в поле UsrTagID при просмотре непосредственно в SQL после факта. Я не вижу, где код может сбросить запись в базе данных, поскольку этот код выполняется как последний вызов в действии «Создать SO», которое было добавлено в меню.
(A) Есть ли ошибка в первом разделе, показанная при получении и установке / сохранении поля UsrTagID?
(B) Есть ли лучший способ сохранить идентификатор тега в записи INItemPlan (таблица базы данных)?
(C) Что-то, что я должен искать, может сбрасывать данные в другом месте? (Хотя я, возможно, что-то пропустил, я не нашел ничего неожиданного в обработчиках событий.)
Версия: Acumatica 2018R1 Build 18.114.0018
public static void StoreSoTagID(SOOrderEntry graph, int? tagID, string orderType, string orderNbr, int? lineNbr)
{
PXResultset<SOLine> Results = PXSelectJoin<SOLine,
InnerJoin<SOOrder, On<SOOrder.orderNbr, Equal<SOLine.orderNbr>,
And<SOOrder.orderType, Equal<SOLine.orderType>>>,
InnerJoin<SOLineSplit, On<SOLineSplit.orderType, Equal<SOLine.orderType>,
And<SOLineSplit.orderNbr, Equal<SOLine.orderNbr>,
And<SOLineSplit.lineNbr, Equal<SOLine.lineNbr>>>>,
InnerJoin<INItemPlan, On<INItemPlan.planID, Equal<SOLineSplit.planID>>
>>>,
Where<SOLine.orderType, Equal<Required<SOLine.orderType>>,
And<SOLine.orderNbr, Equal<Required<SOLine.orderNbr>>,
And<SOLine.lineNbr, Equal<Required<SOLine.lineNbr>>>>>>
.Select(graph, orderType, orderNbr, lineNbr);
foreach (PXResult<SOLine, SOOrder, SOLineSplit, INItemPlan> result in Results)
{
INItemPlan plan = result;
INItemPlanExt planExt = PXCache<INItemPlan>.GetExtension<INItemPlanExt>(plan);
planExt.UsrTagID = tagID;
graph.Caches[typeof(INItemPlanExt)].Update(planExt);
graph.Caches[typeof(INItemPlanExt)].Persist(PXDBOperation.Update);
PXTrace.WriteInformation("Setting: {0} {1}", plan.PlanID, planExt.UsrTagID);
}
Results = PXSelectJoin<SOLine,
InnerJoin<SOOrder, On<SOOrder.orderNbr, Equal<SOLine.orderNbr>,
And<SOOrder.orderType, Equal<SOLine.orderType>>>,
InnerJoin<SOLineSplit, On<SOLineSplit.orderType, Equal<SOLine.orderType>,
And<SOLineSplit.orderNbr, Equal<SOLine.orderNbr>,
And<SOLineSplit.lineNbr, Equal<SOLine.lineNbr>>>>,
InnerJoin<INItemPlan, On<INItemPlan.planID, Equal<SOLineSplit.planID>>
>>>,
Where<SOLine.orderType, Equal<Required<SOLine.orderType>>,
And<SOLine.orderNbr, Equal<Required<SOLine.orderNbr>>,
And<SOLine.lineNbr, Equal<Required<SOLine.lineNbr>>>>>>
.Select(graph, orderType, orderNbr, lineNbr);
foreach (PXResult<SOLine, SOOrder, SOLineSplit, INItemPlan> result in Results)
{
INItemPlan plan = result;
INItemPlanExt planExt = PXCache<INItemPlan>.GetExtension<INItemPlanExt>(plan);
PXTrace.WriteInformation("Poll DB: {0} {1}", plan.PlanID, planExt.UsrTagID);
}
}
Хотя в прошлом у меня была проблема, когда я определял DAC PXString вместо PXDBString, я проверял DAC, чтобы на этот раз не повторить ошибку.