重构使用单个存储过程的eConnect方法

时间:2010-12-01 22:24:16

标签: c# performance refactoring dynamics-gp

我正在编写一个程序,使用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种不同的方法来保持每个所需的功能分开?

1 个答案:

答案 0 :(得分:1)

如果你所做的只是更新一两个字段而且你知道它不会妨碍任何GP,只需通过SQL更新字段即可。我有很多方法调用eConnect,然后在eConnect完成后再次直接更新对象,因为我必须更改字段的eConnect参数。