Получение нового идентификатора покупки через.NET BusinessConnector
Я пытаюсь найти эквивалентный вызов.NET BusinessConnector для следующей строки:
PurchId = NumberSeq::newGetNum(SalesParameters::numRefSalesId()).num();
Я вручную ввожу информацию о заказе на покупку в таблицу заказов на покупку, и это нормально, но проблема заключается в том, что именно идентификатор покупки связывает таблицу покупки (PURCHTABLE), а отдельные строки заказа на покупку (PURCHLINE) - это поле PURCHID, который не заполняется автоматически при сохранении заказа на покупку.
В настоящее время я:
ax.TTSBegin();
axRecord.set_Field("ORDERACCOUNT", purchaseOrder.OrderAccount);
(так далее)
axRecord.Insert();
Однако, несмотря на то, что это вставит запись в базу данных, она не имеет идентификатор покупки, который должен быть сгенерирован. Для связывания позиций покупки необходим идентификатор покупки. Я нашел вышеуказанный код (вторая строка) для X++, но кто-нибудь знает о вызове.NET BusinessConnector, который можно использовать вместо него?
Будем очень благодарны любой помощи.
С уважением, Стив
2 ответа
Я бы пошел на изменение в insert()
метод PurchTable
Таблица:
if (!purchTable.PurchId)
purchTable.PurchId = NumberSeq::newGetNum(purchParameters::numRefPurchId()).num();
Размещено после ttsbegin
,
Это позволяет избежать сложного кода на C#. Вы, вероятно, могли бы сделать это только в коде C#, используя CallStaticClassMethod
и двоюродные братья, но лучше сделать бизнес-логику на стороне X++.
См. Как: вызывать бизнес-логику с помощью.NET Business Connector.
Не забудьте выполнить внутри TTSBegin
/ TTSCommit
блок, в противном случае вы получите сообщения об ошибках, как этот.
// ax is a reference to an "Axapta" business connector object
var numRef = ax.CallStaticRecordMethod("SalesParameters", "numRefSalesId");
var numSeq = (AxaptaObject)ax.CallStaticClassMethod("NumberSeq", "newGetNum", numRef);
var purchId = numSeq.Call("num");