使用AIF更新销售订单 [英] Updating a salesorder using AIF

查看:81
本文介绍了使用AIF更新销售订单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在这里碰壁,试图通过AIF(Dynamics AX网络服务)更新C#中的销售订单

I'm running my head against the wall here trying to update a salesorder in C# through AIF (Dynamics AX webservices)

我有以下代码:

    /// <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 data for the AX order to be updated comes from my model object SalesOrder which I try to map to an AxdSalesOrder object to pass to the service.

我不断收到以下异常:

The key field SalesId cannot be updated.

有人知道我在做什么错吗? :-)

Does anyone know what I'm doing wrong here? :-)

提前谢谢!

推荐答案

首先,我建议您阅读(以防万一您没读过)->如何通过AIF更新AX中的记录使用AIF [AX 2012]更新数据"

First of all I suggest you to read (just in case you didn't read it) -> how to update records in AX via AIF "Updating Data With AIF [AX 2012]"

根据您的代码,我认为您正在执行部分更新",但是您未指定以下内容

Based on your code I assume that you're doing "partial update", but you didn't specified following

//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中,它看起来像这样:

The same approach shown above applied to any record, which is to be partially updated. In XML this will look like this:

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

很可能您必须指定"ClearNilFieldsOnUpdate".

And most likely you would have to specify "ClearNilFieldsOnUpdate".

这篇关于使用AIF更新销售订单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆