Рефакторинг метода eConnect, использующего одну хранимую процедуру - PullRequest
0 голосов
/ 02 декабря 2010

Я пишу программу для изменения некоторых счетов в GP10 с помощью eConnect. Некоторые счета требуют, чтобы распределения были сброшены, потому что итоги не складываются правильно из-за различных других (не важных для этого вопроса) процессов; это достигается с помощью этой программы. Кроме того, большинство счетов-фактур будут перемещены в другой пакет (подумайте, если вы не знакомы с 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 Ответ

1 голос
/ 22 июля 2011

Если все, что вы делаете, - это обновляете поле или два, и вы знаете, что это не помешает чему-либо GP, просто обновите поле (поля) с помощью SQL.У меня есть много методов, которые вызывают eConnect, а затем вторично напрямую обновляют объект после того, как eConnect завершил работу с ним, потому что для полей, которые я должен изменить, нет параметров eConnect.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...