2017-09-18 15 views
0

SalesOrderSalesLineを追加する必要があります。 SalesOrderにはまだSalesLineがありません。 CSharp(C#)でAIFを使用しています。私は次のコードを使用していますが、次の例外が発生しています(Dynamics AX例外ウィンドウでチェックされています)。既存のSalesOrderに新しいSalesLineを追加する - MS Dynamics AX 2012 - AIF(C#)

  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が初めてです。

助けてください!ありがとうございました。

+0

これは役に立ちます。あなたの場合、ヘッダーを更新し、行を挿入します。つまり部分的な更新です。 https://stackoverflow.com/questions/20049220/updating-a-salesorder-using-aif https://community.dynamics.com/ax/b/goshoom/archive/2014/01/21/creating-sales-orders -via-aif-in-ax2012 –

+0

私はすでにこれらのリンクを行っています。実際に私のコードはこれらのリンクに基づいていますが、動作していない**アップデートがキャンセルされました。** –

+0

これは必須ではないと思われるので、2行以下を削除してください。 salesLine.RecId = _SalesOrderTable.RecId; salesLine.RecVersion = _SalesOrderTable.RecVersion; 以下の行を変更して、同じ受注が更新されていることを確認してください。 salesLine.SalesId = _SalesOrderTable.SalesId; 部分的な更新のために、以下の4行を追加してください。 _SalesOrderTable.action = AxdEnum_AxdEntityAction.update; _SalesOrderTable。actionSpecified = true; salesLine.action = AxdEnum_AxdEntityAction.create; salesLine.actionSpecified = true; –

答えて

0

あなたの場合、ヘッダーと挿入行、つまり部分的な更新を更新しています。コードサンプルについては、以下のリンクを参照してください。あなたのコードで Updating a salesorder using AIF https://community.dynamics.com/ax/b/goshoom/archive/2014/01/21/creating-sales-orders-via-aif-in-ax2012

は、私はこれは必須ではないと思うように2つのラインの下に削除するsuggets。

次に、以下の行を修正して、同じ受注が更新されていることを確認してください。

salesLine.SalesId = _SalesOrderTable.SalesId; 

以下の4行を部分的な更新(ヘッダーの更新と行の作成)に追加します。

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

ログを確認できるように統合ポートのトラブルシューティングオプションを構成します。 https://technet.microsoft.com/en-us/library/hh202045.aspx

ドキュメントログと例外ログを確認して、Axに渡された値を確認してください。 https://technet.microsoft.com/en-us/library/aa834439.aspx https://technet.microsoft.com/en-us/library/aa834351.aspx

AIFをデバッグするには、msdnのブログを参照してください。 https://blogs.msdn.microsoft.com/axsupport/2012/06/04/debugging-services-in-ax-2012/

関連する問題