简体   繁体   English

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

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

I need to add SalesLine to an existing SalesOrder . 我需要将SalesLine添加到现有的SalesOrder SalesOrder do not have any SalesLine yet. SalesOrder尚无任何SalesLine I am using AIF in CSharp (C#). 我在CSharp(C#)中使用AIF I am using following code but I am getting following exceptions (checked through Dynamics AX Exceptions window) . 我正在使用以下代码,但正在获取以下异常(通过Dynamics AX Exceptions窗口检查)。

  1. Error found when validating record. 验证记录时发现错误。
  2. Update has been canceled. 更新已被取消。

Here is my code. 这是我的代码。

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;
    }
}

Am I missing something or doing something wrong? 我是否缺少某些东西或做错了什么? If I have to provide more fields then where can check these required fields in MS Dynamics. 如果必须提供更多字段,则可以在哪里查看MS Dynamics中的这些必填字段。 I am new to MS Dynamics. 我是MS Dynamics的新手。

Please Help! 请帮忙! Thank you. 谢谢。

In your case you are updating header and inserting lines ie partial update. 在您的情况下,您正在更新标头并插入行,即部分更新。 Refer below links for code samples. 请参阅下面的链接以获取代码示例。 Updating a salesorder using AIF https://community.dynamics.com/ax/b/goshoom/archive/2014/01/21/creating-sales-orders-via-aif-in-ax2012 使用AIF更新销售订单 https://community.dynamics.com/ax/b/goshoom/archive/2014/01/21/creating-sales-orders-via-aif-in-ax2012

In your code I suggets to remove below two lines as I think this is not required. 在您的代码中,我建议删除以下两行,因为我认为这不是必需的。

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

Then modify below line to make sure same sales order is getting updated. 然后修改下面的行以确保更新相同的销售订单。

salesLine.SalesId = _SalesOrderTable.SalesId;

Add below four lines for partial update (Header update and line creation). 在下面的四行中添加部分更新(标题更新和行创建)。

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

Configure troubleshooting options for integration ports so that you can verify the logs. 配置集成端口的故障排除选项,以便您可以验证日志。 https://technet.microsoft.com/en-us/library/hh202045.aspx https://technet.microsoft.com/zh-CN/library/hh202045.aspx

Please verify document log and exception log to see the values passed to Ax. 请验证文档日志和异常日志以查看传递给Ax的值。 https://technet.microsoft.com/en-us/library/aa834439.aspx https://technet.microsoft.com/en-us/library/aa834351.aspx https://technet.microsoft.com/zh-CN/library/aa834439.aspx https://technet.microsoft.com/zh-CN/library/aa834351.aspx

To debug AIF refer msdn blog. 要调试AIF,请参考msdn博客。 https://blogs.msdn.microsoft.com/axsupport/2012/06/04/debugging-services-in-ax-2012/ 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