Итак, у меня есть полный x ++ скрипт, который предназначен для обновления записей на основе извлеченного результирующего набора , созданного с помощью запроса select с несколькими объединениями и с использованием кросс-компании
Как мне сказали, этоНе стоит обновлять записи, когда есть кросс-компания.Можете ли вы дать совет эксперта о том, как сделать это наилучшим способом, учитывая мой текущий сценарий.
вот сценарий
static void UpdateSample(Args _args)
{
InventTable a;
InventTableModule b;
EcoResProduct c;
EcoResProductCategory d;
EcoResCategory e;
EcoResCategoryHierarchy f;
int i = 0;
while select crossCompany a
exists join b where a.ItemId == b.ItemId
exists join c where a.Product == c.RecId
exists join d where c.RecId == d.Product
exists join e where d.Category == e.RecId
exists join f where d.CategoryHierarchy == f.RecId
&& a.dataAreaId == 'DAT' && b.ModuleType == 2
&& b.LineDisc == ''
&& f.name == 'EXAMPLE'
&&(e.name == 'sample1' || e.name == 'sample2' || e.name == 'sample3')
{
if (a)
{
i = i + 1;
ttsBegin;
b.LineDisc= 'something';
b.update();
ttscommit;
}
}
info(strfmt("total record/s updated : %1",i));
}
Когда я запускаю выше, у меня появляется эта ошибка
"Невозможно редактировать запись в параметрах модуля Inventory (InventTableModule). Запись никогда не была выбрана."
Как решение, основанное на этой ссылке Как обновить / вставить / удалить CrossCompany , я попытался повторить то же самое, это модифицированный скрипт
static void UpdateSample(Args _args)
{
InventTable a;
InventTableModule b;
EcoResProduct c;
EcoResProductCategory d;
EcoResCategory e;
EcoResCategoryHierarchy f;
int i = 0;
while select crossCompany a
exists join b where a.ItemId == b.ItemId
exists join c where a.Product == c.RecId
exists join d where c.RecId == d.Product
exists join e where d.Category == e.RecId
exists join f where d.CategoryHierarchy == f.RecId
&& a.dataAreaId == 'DAT' && b.ModuleType == 2
&& b.LineDisc == ''
&& f.name == 'EXAMPLE'
&&(e.name == 'sample1' || e.name == 'sample2' || e.name == 'sample3')
{
if (a)
{
i = i + 1;
b.LineDisc= 'something';
b.selectForUpdate(true);
ttsBegin;
b.update();
ttsCommit;
}
}
info(strfmt("total record/s updated : %1",i));
}
Но у меня в этой строке SYNTAX ERROR
b.selectForUpdate(true);
Я новичок в x ++, надеюсь, я смогу получить совет специалиста о наилучшей практике в этом.
Заранее спасибо.