您好我已经创建了一个只有SalesAgreementHeader
作为表的查询。然后我使用向导创建aif webservice文档。
Web服务工作正常,但更新始终报告“Invalid xml document.
”错误。
类moveToNextElement
中的方法AxdBaseCreate
抛出此错误。
例外的原因是,
reader.fieldName() = AgreementClassification
和
_expectedElementName = AgreementRelationType.
我该如何解决这个问题?或者有什么好方法可以调试它吗?
在我仅使用SalesAgreementHeader
创建查询之前,我有一个更复杂的查询并且具有相同的错误。然后我创建了一个新的并将其缩小为SalesAgreementHeader
。
更新
A尚未解决问题,但我认为问题可能是因为SalesAgreementHeader
扩展了AgreementHeader
而且字段RelationType
在AOS中不可见,但如果您直接查看DB。
更新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
答案 0 :(得分:1)
您能否提供您正在使用的代码?
我有一个假设(基于CoordinRelationType的名称,看起来这是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();
}