簡體   English   中英

我的AIF Web服務中的SalesAgreementHeader [AX 2012]更新失敗

[英]The update from my AIF Webservice for SalesAgreementHeader [AX 2012] fails

您好,我創建了一個僅將SalesAgreementHeader作為表的查詢。 然后,我使用向導創建了一個Web服務文檔。 Web服務可以正常運行,但是更新始終報告“ Invalid xml document. ”錯誤。 該錯誤由類AxdBaseCreate moveToNextElement方法AxdBaseCreate

出現異常的原因是,

reader.fieldName() = AgreementClassification 

_expectedElementName = AgreementRelationType.

我怎樣才能解決這個問題? 還是有什么好的方法可以調試?

在僅使用SalesAgreementHeader創建查詢之前,我有一個更復雜的查詢,並且有相同的錯誤。 然后,我創建了一個新的,並將其簡化為SalesAgreementHeader

更新:一個尚未解決的問題,但我認為問題可能是因為SalesAgreementHeader擴展了AgreementHeader並且字段RelationType在AOS中不可見,但是如果您直接在數據庫中查看。

更新2:這是調用堆棧:

[s] \\ Classes \\ AxdBaseCreate \\ moveToNextElement 9

[s] \\ Classes \\ AxdBaseCreate \\ readSurrogateForeignKeyValue 37

[s] \\ Classes \\ AxdBaseCreate \\ readProperty 14

[s] \\ Classes \\ AxdBaseCreate \\ readProperties 122

[s] \\ Classes \\ AxdBaseUpdate \\ deserializeTopEntity 25

[s] \\ Classes \\ AxdBaseUpdate \\ deserializeDocument 131

[s] \\ Classes \\ AxdBaseUpdate \\ updateDocumentList 42

[s] \\ Classes \\ AxdBase \\ updateList 64

[s] \\ Classes \\ AifDocumentService \\ updateList 34

[s] \\ Classes \\ SalesAgreementService \\ update 4

您能否提供您正在使用的代碼?

我有一個假設(基於AgreementRelationType的名稱,看起來像是Enim),您正在嘗試基於枚舉更新字段。 如果是這樣,那么我希望可以為您提供幫助。

當您需要更新枚舉時,請使用以下方法:

//here is an example how to change Status on SalesTable
//as you may see when you change the value of enum you have to set boolean autogenerated field to "true". 
//Name of such fields ends with suffix "Specified"
salesTable.SalesStatus = AxdEnum_SalesStatus.Invoiced;
salesTable.SalesStatusSpecified = true;

在此,我想建議您(如果您沒有這樣做)使用以下try..catch塊。 這將使您的生活更輕松。

try
{
    //your code here
}
catch (System.ServiceModel.FaultException<SalesOrderDelete.SalesOrderDeleteTcpNet.AifFault> aifFaults) // This code catches error messages even when "Logging mode = Logging is disabled" on Inbound port
{
    SalesOrderDelete.SalesOrderDeleteTcpNet.InfologMessage[] infologMessageList = aifFaults.Detail.InfologMessageList;

    foreach (SalesOrderDelete.SalesOrderDeleteTcpNet.InfologMessage infologMessage in infologMessageList)
    {

        Console.WriteLine("Exception: " + infologMessage.Message + "\n");
    }

    Console.WriteLine("\nPress any key to quit.\n");
    Console.ReadKey();
    cl.Abort();
}

暫無
暫無

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

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