Слушатель задач сценария Alfresco Activiti текущий узел сценария?

Есть ли способ получить ScriptNode, который инициировал состояние в рабочем процессе Activiti в Alfresco? У меня есть ScriptTask в моем рабочем процессе, и для него настроен прослушиватель сценариев Alfresco для события Start. Когда скрипт вызывается, я бы хотел, чтобы ScriptNode, который перешел в ScriptTask в рабочем процессе, передавался в качестве параметра функции, определенной как прослушиватель. Это возможно?

Редактирование для ясности: вот скриншот Eclispe с плагином Activiti. http://i.imgur.com/DAKtq.jpg

Этот рабочий процесс запускается другим рабочим процессом с веб-скриптами.

var props = new Object();
var dd = new Date();
props[EL_PROP_WORK_UNIT_NAME] = "testNode" + DateISOString( dd );
props[EL_PROP_WORK_UNIT_SOURCE_CODE] = "ROB";
props[EL_PROP_WORK_UNIT_DELIVERY_DATE] = dd;

node = getHome().createNode(name, EL_TYPE_WORK_UNIT, props);

var EL_WORKFLOW = "activiti$The-workflow";
var activeWfs = node.activeWorkflows;
if( activeWfs === null || activeWfs.length === 0 )
{
    var workflowPackage = workflow.createPackage();
    workflowPackage.addNode( node );
    var workflowDef = workflow.getDefinitionByName(EL_WORKFLOW);
    var workflowPath = workflowDef.startWorkflow( workflowPackage, new Object());
}

Итак, слушатель вызывает другой метод javascript...

function artPDFRename()
{
    logger.log("==============================");
    logger.log("<START> artPDFRename");

    var workflowDef = workflow.getDefinitionByName(EL_WORKFLOW);
    var activeInstance = workflowDef.getActiveInstances();
        // ????
}

Цель состоит в том, чтобы эта обработка была автоматической. Мы пытаемся спроектировать это с минимальным ручным вмешательством, насколько это возможно, и не назначаем задачи пользователям. Да, вероятно, есть другой способ переименовать PDF-файл, но я не могу понять из документации, указанной здесь, как получить указатель на узел, который я поместил в объект bpm_package. Вот в чем вопрос.

Или я настолько далек от того, как мы разрабатываем это, что это не имеет смысла?


person MonkeyWrench    schedule 21.12.2012    source источник
comment
Твою последнюю строчку очень трудно понять. Пожалуйста, объясните, что вы имеете в виду, с некоторыми примерами кода, чтобы люди могли следовать. Я не уверен, но это может быть так, что у вас не было комментария/ответа на ваш вопрос.   -  person Tahir Malik    schedule 26.12.2012
comment
У меня есть прослушиватель сценариев Alfresco для задачи Activit (скажем, для задачи получения). Когда ScriptNode перемещается по рабочему процессу и достигает этой задачи, вызывается скрипт. Я хотел бы получить доступ только к тому ScriptNode, который инициировал вызов сценария.   -  person MonkeyWrench    schedule 28.12.2012
comment
ScriptNode движется через рабочий процесс, вы имеете в виду пакет bpm_package, верно? Итак, когда вы выполняете действие рабочего процесса, вам нужен этот узел, верно? Затем нужно получить первого потомка из пакета bpm_package (ассоциации). Или вы не это имеете в виду?   -  person Tahir Malik    schedule 28.12.2012
comment
да. Пакет рабочего процесса, который мы используем в качестве контейнера для метаданных, используемых в вычислениях рабочего процесса. Я не понимаю, как я могу получить этот объект из объекта WorkflowManager рабочего процесса.   -  person MonkeyWrench    schedule 02.01.2013


Ответы (1)


В качестве примера проверьте класс ScriptTaskListener. Здесь все переменные рабочего процесса помещаются в карту.

Интересен следующий код:

// Добавляем все переменные рабочего процесса в модель Переменные карты = delegateTask.getExecution().getVariables();

    for (Entry<String, Object> varEntry : variables.entrySet())
    {
        scriptModel.put(varEntry.getKey(), varEntry.getValue());
    }

Таким образом, вы можете использовать bpm_package как объект в своем скрипте в задаче скрипта рабочего процесса.

Поэтому, если вам нужен узел, на котором запущен рабочий процесс, должен работать следующий код (где задача — это ваш delegateTask из вашего метода уведомления Listener:

delegateTask.getVariable("bpm_package");
// или как в примере выше
delegateTask.getExecution().getVariable("bpm_package");

Это будет список, так что возьмите первый, и это будет ваш узел.

---------Обновить

Если вы используете javascript из alfresco, вы можете напрямую использовать родительский объект bpm_package.

Поэтому в вашем случае лучше всего сделать следующее:

узел var = bpm_package.children[0]; // или вы можете проверить, не является ли пакет нулевым
// Затем отправьте узел в ваш
artPDFRename(node); // или вы можете просто добавить код bpm_package в свой файл js

person Tahir Malik    schedule 02.01.2013
comment
Извините, я должен был указать, что я пытаюсь сделать это с помощью веб-скриптов. Я посмотрю, перейдет ли это к доступным методам в объектах рабочего процесса. - person MonkeyWrench; 02.01.2013
comment
? Я сейчас в полном замешательстве. Как задача попадает на веб-скрипт. Я не видел тега/слушателя/метода для этого. Я думаю, вам нужно полностью раскрыть свой код/шаги здесь, иначе вы действительно не получите помощи. - person Tahir Malik; 02.01.2013
comment
Обновлено с дополнительной информацией. Спасибо. - person MonkeyWrench; 02.01.2013
comment
Объект bpm_package, вот что мне было нужно. Нигде не видел этого в документации, не знал, что он существует. Спасибо. - person MonkeyWrench; 03.01.2013
comment
Это ;) здесь, в Wiki Alfresco: wiki.alfresco.com/wiki/WorkflowAdministration#Process_Data - person Tahir Malik; 03.01.2013