Добавление новой строки SalesLine в существующий SalesOrder — MS Dynamics AX 2012 — AIF (C#)

Мне нужно добавить SalesLine к существующему SalesOrder. SalesOrder пока нет SalesLine. Я использую AIF в CSharp (C#). Я использую следующий код, но получаю следующие исключения (проверено в окне исключений Dynamics AX).

  1. Обнаружена ошибка при проверке записи.
  2. Обновление отменено.

Вот мой код.

protected void Page_Load(object sender, EventArgs e)
{
    try
    {
        SalesOrderCreateReadFindUpdateDelete.KeyField keyField = new SalesOrderCreateReadFindUpdateDelete.KeyField() { Field = "SalesId", Value = "SO-015749" };
        SalesOrderCreateReadFindUpdateDelete.EntityKey entityKey = new SalesOrderCreateReadFindUpdateDelete.EntityKey();
        entityKey.KeyData = new SalesOrderCreateReadFindUpdateDelete.KeyField[1] { keyField };
        SalesOrderCreateReadFindUpdateDelete.EntityKey[] entityKeys = new SalesOrderCreateReadFindUpdateDelete.EntityKey[1] { entityKey };
        SalesOrderCreateReadFindUpdateDelete.SalesOrderServiceClient _Client;
        using (_Client = new SalesOrderCreateReadFindUpdateDelete.SalesOrderServiceClient())
        {
            SalesOrderCreateReadFindUpdateDelete.CallContext _callContext = new SalesOrderCreateReadFindUpdateDelete.CallContext();
            _callContext.Company = "ART";
            SalesOrderCreateReadFindUpdateDelete.AxdSalesOrder _SalesOrderList = _Client.read(_callContext, entityKeys);
            SalesOrderCreateReadFindUpdateDelete.AxdEntity_SalesTable _SalesOrderTable = _SalesOrderList.SalesTable.First();
            SalesOrderCreateReadFindUpdateDelete.AxdEntity_SalesLine salesLine = new SalesOrderCreateReadFindUpdateDelete.AxdEntity_SalesLine();

            salesLine.ItemId = "PF507028";
            salesLine.SalesQty = 1;
            salesLine.SalesUnit = "ea";
            salesLine.SalesId = "SO-015749";
            salesLine.RecId = _SalesOrderTable.RecId;
            salesLine.RecVersion = _SalesOrderTable.RecVersion;

            SalesOrderCreateReadFindUpdateDelete.AxdEntity_InventDim inventDim = new SalesOrderCreateReadFindUpdateDelete.AxdEntity_InventDim();
            inventDim.InventSiteId = "1";
            inventDim.InventLocationId = "13";

            salesLine.InventDim = new SalesOrderCreateReadFindUpdateDelete.AxdEntity_InventDim[1] { inventDim };
            _SalesOrderTable.SalesLine = new SalesOrderCreateReadFindUpdateDelete.AxdEntity_SalesLine[1] { salesLine };

            _Client.update(_callContext, entityKeys, _SalesOrderList);
            lblOutput.Text += "<br />Success";
        }
    }
    catch (Exception ex)
    {
        lblOutput.Text += "<br />Exception: " + ex.Message;
    }
}

Я что-то упускаю или делаю что-то не так? Если мне нужно предоставить больше полей, то где можно проверить эти обязательные поля в MS Dynamics. Я новичок в MS Dynamics.

Пожалуйста помоги! Спасибо.


person Gulfam    schedule 18.09.2017    source источник
comment
Это поможет. В вашем случае вы обновляете заголовок и вставляете строки, т.е. частичное обновление. stackoverflow.com/questions/20049220/ сообщество .dynamics.com/ax/b/goshoom/archive/2014/01/21/   -  person Pradeep Muttikulangara Vasu    schedule 18.09.2017
comment
Я уже прошел по этим ссылкам. На самом деле мой код основан на этих ссылках, но он не работает и выдает Обновление было отменено.   -  person Gulfam    schedule 18.09.2017
comment
Удалите ниже две строки, так как я думаю, что это не требуется. SalesLine.RecId = _SalesOrderTable.RecId; SalesLine.RecVersion = _SalesOrderTable.RecVersion; Измените строку ниже, чтобы убедиться, что тот же заказ на продажу обновляется. SalesLine.SalesId = _SalesOrderTable.SalesId; Добавьте ниже четыре строки для частичного обновления. _SalesOrderTable.action = AxdEnum_AxdEntityAction.update; _SalesOrderTable.actionSpecified = истина; salesLine.action = AxdEnum_AxdEntityAction.create; salesLine.actionSpecified = истина;   -  person Pradeep Muttikulangara Vasu    schedule 18.09.2017
comment
Я сделал то, что вы написали выше. Теперь я получаю измененное исключение, которое является Недопустимым действием сущности.   -  person Gulfam    schedule 18.09.2017
comment
Настройте параметры устранения неполадок для портов интеграции technet.microsoft.com/en-us/library/ hh202045.aspx Затем проверьте журнал документов и журнал исключений technet.microsoft .com/en-us/library/aa834439.aspx technet. microsoft.com/en-us/library/aa834351.aspx Для отладки blogs.msdn.microsoft.com/axsupport/2012/06/04/   -  person Pradeep Muttikulangara Vasu    schedule 19.09.2017
comment
@PradeepMuttikulangaraVasu Рассмотрите возможность создания ответа со всеми подсказками, которые вы дали в комментариях.   -  person FH-Inway    schedule 19.09.2017


Ответы (1)


В вашем случае вы обновляете заголовок и вставляете строки, т.е. частичное обновление. См. ссылки ниже для примеров кода. Обновление заказа на продажу с помощью AIF https://community.dynamics.com/ax/b/goshoom/archive/2014/01/21/creating-sales-orders-via-aif-in-ax2012

В вашем коде я предлагаю удалить ниже две строки, так как я думаю, что это не требуется.

salesLine.RecId = _SalesOrderTable.RecId; 
salesLine.RecVersion = _SalesOrderTable.RecVersion; 

Затем измените строку ниже, чтобы убедиться, что тот же заказ на продажу обновляется.

salesLine.SalesId = _SalesOrderTable.SalesId;

Добавьте ниже четыре строки для частичного обновления (обновление заголовка и создание строки).

_SalesOrderTable.action = AxdEnum_AxdEntityAction.update;
_SalesOrderTable.actionSpecified = true; 
salesLine.action = AxdEnum_AxdEntityAction.create; 
salesLine.actionSpecified = true;

Настройте параметры устранения неполадок для портов интеграции, чтобы вы могли проверять журналы. https://technet.microsoft.com/en-us/library/hh202045.aspx

Проверьте журнал документов и журнал исключений, чтобы увидеть значения, переданные в Ax. https://technet.microsoft.com/en-us/library/aa834439.aspx https://technet.microsoft.com/en-us/library/aa834351.aspx

Для отладки AIF обратитесь к блогу msdn. https://blogs.msdn.microsoft.com/axsupport/2012/06/04/debugging-services-in-ax-2012/

person Pradeep Muttikulangara Vasu    schedule 20.09.2017