Инструменты пользователя

Инструменты сайта


axapta:пакетнаяобработка

Раздел: Программирование > СредаИсполнения


Пакетная обработка используется для того, чтобы выполнять некоторые задания периодически.

Чтобы создать собственное задание нужно написать класс, который расширяет Класс/RunBaseBatch

Как программно добавить пакетное задание в очередь

взято из \Classes\SysEmailBatch\sendToBatch

public batch sendToBatch(BatchGroupId    _groupId)
{
    BinData binData;
;
    if (attachmentfileName)
    {
        binData = new BinData();
        binData.loadFile(attachmentfileName);
        attachmentdata = binData.getData();
    }
 
    batchInfo =  batchInfo::construct(this);
    batchInfo.parmBatchExecute(true);
    batchInfo.parmGroupId(_groupId);
    batchInfo.parmDataareaId(curext());
    batchInfo.doBatch();
 
    return batchInfo.parmBatch();
}

Как запустить пакетную граппу при старте

Вазято из http://dynamicsandmore.spaces.msn.com/blog/cns!763444E3F18A4CB0!305.entry?_c11_blogpart_blogpart=blogview&_c=blogpart#permalink

Right now it is not possible to start a specific batch group with a startup command. You certainly can start the batch processing, but within the standard applications it is not possible to start one or more specific batch groups. The problem is caused by a missing parameter within the «SysStartupCmdBatchRun» class.

Now we add a new method to this class:

container CMHParmInCont()
{
    container   conParm;
    int         i, j;
    str         parmString;
    ;
    conparm = conNull();
    for (i = 1; i <= strlen(parm); i = j + 1)
    {
        j = strscan(parm, ',', i, strlen(parm));
        if (j > 0)
        {
            parmString = substr(parm, i, j-i);
        }
        else
        {
            parmString = substr(parm, i, strlen(parm) -i +1);
            j = i + strlen(parmString);
        }
        conParm += parmString;
    }
    return  conParm;
}

This method extracts the given batchgroupids from the startup command.

The second and last step is to modify the existing infoRun() method in a way that it starts the different batch jobs:

void infoRun()
{
    batchRun        batchRun = new batchRun();
    BatchGroupId    groupId;
    container       conParm;
    int             i;
    ;
    batchRun.parmUseForm(true);
    if (parm)
    {
        parm    = strrem(parm, ' ');
        conParm = this.KBSParmInCont();
        for (i = 1; i <= conlen(conParm); i++)
        {
            groupId = conpeek(conParm,i);
            batchRun.parmGroupId(groupId);
            if (batchRun.validate())
            {
                batchRun.run();
            }
        }
    }
    else
    {
        batchRun.run();
    }
}
axapta/пакетнаяобработка.txt · Последнее изменение: 2018/04/13 22:43 (внешнее изменение)