我正在编写一个程序,使用eConnect修改GP10中的某些发票。一些发票要求重置分配,因为由于各种其他(对于此问题不重要)过程,总计不能正确加起来;这是通过这个程序完成的。此外,大多数发票将被移动到另一个批次(如果您不熟悉GP,请考虑存储桶),也使用此程序。
这两项任务都是通过eConnect处理相同类型的文件来完成的。这是处理该文件的方法:
public bool PersistAllChangesInDynamics()
{
//instantiate the proper eConnect object for updating the invoice.
eConnectType eConnect = new eConnectType();
SOPTransactionType transType = new SOPTransactionType();
transType.taSopHdrIvcInsert = this.ConvertToSopHdrIvcInsertXml();
//Adjust fields to reset distributions.
transType.taSopHdrIvcInsert.UpdateExisting = 1;
transType.taSopHdrIvcInsert.CREATEDIST = 1;
SOPTransactionType[] updateInvTypeArray = { transType };
eConnect.SOPTransactionType = updateInvTypeArray;
//serialize and process the document.
XmlDocument eConnectDoc = eConnectHelper.SerializeEConnectDoc(eConnect);
return eConnectHelper.ProcessEConnectDoc(eConnectDoc);
}
我的问题围绕着这段代码:
transType.taSopHdrIvcInsert.UpdateExisting = 1; //updates the batch changes
transType.taSopHdrIvcInsert.CREATEDIST = 1; //re-creates the distributions
taSopHdrIvcInsert是eConnect提供的对象,用于保留对发票的任何更改。据我所知,没有一个对象只能重新创建发行版。每当我处理文档时,eConnect都会在Dynamics数据库上调用一个类似命名的存储过程来正确保存这些更改。 UpdateExisting和CREATEDIST是该SP的可选参数。
有时,我只需更新批次(或发票的其他部分),或只重新创建分配,但有时,我需要同时执行这两项操作。重新创建分发不会导致任何不良更改,您始终希望每个发票的分配正确。我没有测试过一次做一件事之间的任何时间节省;因为对象在服务器端调用SP,所以我看不到它会花费多少不同的时间。
你们中是否有人认为有任何理由将这一点重新分解为2-3种不同的方法来保持每个所需的功能分开?
答案 0 :(得分:1)
如果你所做的只是更新一两个字段而且你知道它不会妨碍任何GP,只需通过SQL更新字段即可。我有很多方法调用eConnect,然后在eConnect完成后再次直接更新对象,因为我必须更改字段的eConnect参数。