Получение нового идентификатора покупки через.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");
Другие вопросы по тегам