簡體   English   中英

將新的SalesLine添加到現有SalesOrder-MS Dynamics AX 2012-AIF(C#)

[英]Add new SalesLine to existing SalesOrder - MS Dynamics AX 2012 - AIF (C#)

我需要將SalesLine添加到現有的SalesOrder SalesOrder尚無任何SalesLine 我在CSharp(C#)中使用AIF 我正在使用以下代碼,但正在獲取以下異常(通過Dynamics AX Exceptions窗口檢查)。

  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的新手。

請幫忙! 謝謝。

在您的情況下,您正在更新標頭並插入行,即部分更新。 請參閱下面的鏈接以獲取代碼示例。 使用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/zh-CN/library/hh202045.aspx

請驗證文檔日志和異常日志以查看傳遞給Ax的值。 https://technet.microsoft.com/zh-CN/library/aa834439.aspx https://technet.microsoft.com/zh-CN/library/aa834351.aspx

要調試AIF,請參考msdn博客。 https://blogs.msdn.microsoft.com/axsupport/2012/06/04/debugging-services-in-ax-2012/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM