首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用AIF更新销售订单

使用AIF更新销售订单
EN

Stack Overflow用户
提问于 2013-11-18 21:39:03
回答 2查看 4.4K关注 0票数 0

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

我有以下代码:

代码语言:javascript
复制
    /// <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对象以传递给服务。

我一直收到以下异常:

代码语言:javascript
复制
The key field SalesId cannot be updated.

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

提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2013-11-20 18:12:14

首先,我建议您阅读(以防您没有读过) ->如何通过AIF "Updating Data With AIF [AX 2012]"更新AX中的记录

根据您的代码,我假设您正在进行“部分更新”,但您没有指定以下内容

代码语言:javascript
复制
//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中,这将如下所示:

代码语言:javascript
复制
<SalesLine class="entity" action="update">

最有可能的情况是,您必须指定"ClearNilFieldsOnUpdate“。

票数 1
EN

Stack Overflow用户

发布于 2014-02-21 20:33:12

您需要为行和标题指定操作以进行部分更新。Like for header

代码语言:javascript
复制
salesTable.action = AxdEnum_AxdEntityAction.update; 
salesTable.actionSpecified = true; 

和for Line

代码语言:javascript
复制
salesLine.action = AxdEnum_AxdEntityAction.create; 
salesLine.actionSpecified = true;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20049220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档