Программирование многопоточных пакетов в X ++. Не работает по какой-то причине? - PullRequest
1 голос
/ 18 января 2012

Код довольно прост.Если из формы «Сведения о поставщике» перейти в «Функции»> «Обновить 1099», пользователь хочет сделать это широко для всех поставщиков, а не делать это вручную.Я изменил базовый класс VendTax1099Update для расширения RunBaseBatch, а затем добавил несколько методов parm.Я получаю эту ошибку, но задача существует?Я делаю это неправильно?

"Зависимость не может быть создана, потому что обновление задачи налоговой информации 1099 поставщика не существует."

Я сделал это "addDependency", потому что при блокировке БДЯ пытался раскрыть это.Не уверен, есть ли способ исправить это.

void run()
{
    BatchHeader         batchHeader;
    VendTax1099Update   vendTax1099Update;
    VendTax1099Update   vendTax1099UpdateOld;
    VendTable           vendTable;
    boolean             first = true;
    ;

    /*
    if (this.isInBatch())
    {
    */
        // Make sure there is a batch header
        if (!batchHeader)
            batchHeader = BatchHeader::construct(this.parmCurrentBatch().BatchJobId);

        while select vendTable
            where vendTable.Tax1099Reports      == true     &&
                  vendTable.Tax1099Box          != ''
        {
            if (Tax1099Fields::exist(vendTable.Tax1099Box))
            {
                vendTax1099Update = new VendTax1099Update();
                vendTax1099Update.parmFromDate(fromDate);
                vendTax1099Update.parmToDate(toDate);
                vendTax1099Update.parmRecalcAmounts(recalcAmounts);
                vendTax1099Update.parmSetAll1099(setAll1099);
                vendTax1099Update.parmBoxFor1099(vendTable.Tax1099Box);
                vendTax1099Update.parmVendorNum(vendTable.AccountNum);

                if (first)
                {
                    batchHeader.addRuntimeTask(vendTax1099Update, this.parmCurrentBatch().RecId);
                    first = false;
                }
                else
                {
                    if (vendTax1099UpdateOld)
                        batchHeader.addDependency(vendTax1099Update, vendTax1099UpdateOld, BatchDependencyStatus::FinishedOrError);
                }

                vendTax1099UpdateOld = vendTax1099Update;
            }
            else
                error (strfmt("Unable to process %1 because %2 was not found in Tax1099Fields", vendTable.AccountNum, vendTable.Tax1099Box));
        }
    /*
    }
    */

    if (batchHeader)
        batchHeader.save();
}

1 Ответ

2 голосов
/ 18 января 2012

Я уже несколько часов ломаю голову над этим, и, конечно же, через несколько минут после публикации я выясняю проблему, поняв, что могу перейти к методу batchHeader.addDependency ().

Оказывается, вынужно добавить задачу, затем установить зависимость.Я думал, что установка зависимости также добавит задачу одним махом.Исправленный бит кода таков:

            vendTax1099Update.parmBoxFor1099(vendTable.Tax1099Box);
            vendTax1099Update.parmVendorNum(vendTable.AccountNum);

            batchHeader.addRuntimeTask(vendTax1099Update, this.parmCurrentBatch().RecId);

            if (vendTax1099UpdateOld)
                batchHeader.addDependency(vendTax1099Update, vendTax1099UpdateOld, BatchDependencyStatus::FinishedOrError);

            vendTax1099UpdateOld = vendTax1099Update;
        }
        else
...