我在这里碰壁,试图通过AIF (Dynamics AX webservices)更新C#中的销售订单。
我有以下代码:
/// <summary>
/// Updates an order in AX
/// </summary>
/// <param name="order">Order to update</param>
public void UpdateOrder(SalesOrder order)
{
try
{
var client = new write.SalesOrderServiceClient();
var callContext = new write.CallContext() { Company = "mcompany" };
var entityKeyList = new write.EntityKey[1];
var entityKey = new write.EntityKey();
var keyField = new write.KeyField();
keyField.Field = "SalesId";
keyField.Value = order.orderCaseId;
entityKey.KeyData = new write.KeyField[1] { keyField };
entityKeyList = new write.EntityKey[1] { entityKey };
var salesOrder = new write.AxdSalesOrder
{
DocPurpose = write.AxdEnum_XMLDocPurpose.Original,
SalesTable = new write.AxdEntity_SalesTable[1],
};
salesOrder.SalesTable[0] = new write.AxdEntity_SalesTable
{
PurchOrderFormNum = order.purchaseOrderFormNumber,
ReceiptDateRequested = order.receiptDateRequested,
SalesLine =
new write.AxdEntity_SalesLine[order.salesOrderLines.Count()],
_DocumentHash = order.documentHash
};
var orderLinesArray = order.salesOrderLines.ToArray();
for (int i = 0; i < order.salesOrderLines.Count(); i++)
{
salesOrder.SalesTable[0].SalesLine[i] = new write.AxdEntity_SalesLine()
{
SalesQty = orderLinesArray[i].quantity,
SalesUnit = orderLinesArray[i].unit,
};
}
client.update(callContext, entityKeyList, salesOrder);
}
catch (Exception e)
{
Logging.AddLogEntry(e.Message);
}
}要更新的AX订单的数据来自我的模型对象SalesOrder,我尝试将其映射到一个AxdSalesOrder对象以传递给服务。
我一直收到以下异常:
The key field SalesId cannot be updated.有人知道我做错了什么吗?:-)
提前感谢!
发布于 2013-11-20 18:12:14
首先,我建议您阅读(以防您没有读过) ->如何通过AIF "Updating Data With AIF [AX 2012]"更新AX中的记录
根据您的代码,我假设您正在进行“部分更新”,但您没有指定以下内容
//here you need to specify for EACH record what you need, i.e. "create/update/delete"
salesLine.action = AxdEnum_AxdEntityAction.update;
salesLine.actionSpecified = true;上面显示的相同方法适用于任何要部分更新的记录。在XML中,这将如下所示:
<SalesLine class="entity" action="update">最有可能的情况是,您必须指定"ClearNilFieldsOnUpdate“。

发布于 2014-02-21 20:33:12
您需要为行和标题指定操作以进行部分更新。Like for header
salesTable.action = AxdEnum_AxdEntityAction.update;
salesTable.actionSpecified = true; 和for Line
salesLine.action = AxdEnum_AxdEntityAction.create;
salesLine.actionSpecified = true;https://stackoverflow.com/questions/20049220
复制相似问题