1

您好,我创建了一个只有SalesAgreementHeaderas 表的查询。然后我使用向导创建了一个文档 aif webservice。网络服务工作正常,但更新总是报告“ Invalid xml document.”错误。moveToNextElement该错误是由类中的方法引发的AxdBaseCreate

例外的原因是,

reader.fieldName() = AgreementClassification 

_expectedElementName = AgreementRelationType.

我怎样才能解决这个问题?或者有什么好的方法来调试这个?

在我创建查询之前,SalesAgreementHeader我有一个更复杂的查询并且有同样的错误。然后我创建了一个新的并将其缩减为仅SalesAgreementHeader.

更新: A 还没有解决问题,但我认为问题可能是因为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

4

1 回答 1

1

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

我有一个假设(基于 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();
}
于 2013-11-20T09:46:56.317 回答