Актуализиране на поръчка за продажба с помощта на AIF

Блъскам главата си в стената тук, опитвайки се да актуализирам поръчка за продажба в C# чрез AIF (уеб услуги на Dynamics AX)

Имам следния код:

    /// <summary>
    /// Updates an order in AX
    /// </summary>
    /// <param name="order">Order to update</param>
    public void UpdateOrder(SalesOrder order)
    {
        try
        {
            var client = new write.SalesOrderServiceClient();
            var callContext = new write.CallContext() { Company = "mcompany" };
            var entityKeyList = new write.EntityKey[1];
            var entityKey = new write.EntityKey();
            var keyField = new write.KeyField();
            keyField.Field = "SalesId";
            keyField.Value = order.orderCaseId;                
            entityKey.KeyData = new write.KeyField[1] { keyField };
            entityKeyList = new write.EntityKey[1] { entityKey };

            var salesOrder = new write.AxdSalesOrder
            {
                DocPurpose = write.AxdEnum_XMLDocPurpose.Original,
                SalesTable = new write.AxdEntity_SalesTable[1],
            };


            salesOrder.SalesTable[0] = new write.AxdEntity_SalesTable
            {
                PurchOrderFormNum = order.purchaseOrderFormNumber,
                ReceiptDateRequested = order.receiptDateRequested,
                SalesLine =
                    new write.AxdEntity_SalesLine[order.salesOrderLines.Count()],
                _DocumentHash = order.documentHash
            };

            var orderLinesArray = order.salesOrderLines.ToArray();
            for (int i = 0; i < order.salesOrderLines.Count(); i++)
            {
                salesOrder.SalesTable[0].SalesLine[i] = new write.AxdEntity_SalesLine()
                {
                    SalesQty = orderLinesArray[i].quantity,
                    SalesUnit = orderLinesArray[i].unit,
                };
            }

            client.update(callContext, entityKeyList, salesOrder);
        }
        catch (Exception e)
        {
            Logging.AddLogEntry(e.Message);
        }
    }

Данните за AX поръчката, която трябва да бъде актуализирана, идват от моя модел обект SalesOrder, който се опитвам да насоча към обект AxdSalesOrder, за да предам на услугата.

Продължавам да получавам следното изключение:

The key field SalesId cannot be updated.

Някой знае ли какво правя грешно тук? :-)

Благодаря предварително!


person bomortensen    schedule 18.11.2013    source източник


Отговори (2)


Първо ви предлагам да прочетете (в случай, че не сте го чели) -> как да актуализирате записи в AX чрез AIF "Актуализиране на данни с AIF [AX 2012]"

Въз основа на вашия код предполагам, че правите „частична актуализация“, но не сте посочили следното

//here you need to specify for EACH record what you need, i.e. "create/update/delete"
salesLine.action = AxdEnum_AxdEntityAction.update; 
salesLine.actionSpecified = true;

Същият подход, показан по-горе, се прилага за всеки запис, който трябва да бъде частично актуализиран. В XML това ще изглежда така:

<SalesLine class="entity" action="update">

И най-вероятно ще трябва да посочите "ClearNilFieldsOnUpdate".

въведете описание на изображението тук

person Yuriy    schedule 20.11.2013
comment
Здравейте Юрий, благодаря много за отговора и съжалявам за забавянето на този отговор. AX частта на системата е задържана от доста време. Опитах се да посоча действието на всеки ред, но все още получавам грешката Ключовото поле SalesId не може да се актуализира :-( - person bomortensen; 27.11.2013

трябва да посочите действие както за ред, така и за заглавка за частично актуализиране. Като за заглавка

salesTable.action = AxdEnum_AxdEntityAction.update; 
salesTable.actionSpecified = true; 

и за Линия

salesLine.action = AxdEnum_AxdEntityAction.create; 
salesLine.actionSpecified = true;
person user2346945    schedule 21.02.2014