0

Alfresco の Activiti ワークフローで状態を開始した ScriptNode を取得する方法はありますか? ワークフローに ScriptTask があり、Start イベント用に Alfresco Script Listener が設定されています。スクリプトが呼び出されたときに、ワークフローで ScriptTask に遷移した ScriptNode を、リスナーとして定義された関数にパラメーターとして渡すようにしたいと考えています。それは可能ですか?

わかりやすくするための編集: これは、Activiti プラグインを使用した Eclipse のスクリーンショットです。 http://i.imgur.com/DAKtq.jpg

このワークフローは、Web スクリプトを使用する別のワークフローによって開始されます。

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オブジェクトに入れたノードへのポインターを取得する方法がわかりません。それが問題です。

それとも、私たちがこれをどのように開発しているかに基づいていないので、意味がありませんか?

4

1 に答える 1

1

ScriptTaskListener例として、クラスを確認してください。ここでは、すべてのワークフロー変数がマップに配置されています。

次のコードは興味深いものです。

// すべてのワークフロー変数をモデルに追加 Map variables = delegateTask.getExecution().getVariables();

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

これにより、bpm_package をワークフロー スクリプト タスク内のスクリプト内のオブジェクトとして使用できます。

したがって、ワークフローが実行されているノードが必要な場合は、次のコードが機能するはずです (タスクは、リスナーの通知メソッドからの delegateTask です。

delegateTask.getVariable("bpm_package");
// または上の例のように
delegateTask.getExecution().getVariable("bpm_package");

これはリストになるので、最初のものを取得すると、それがノードになります。

- - - - -アップデート

alfresco の JavaScript を使用している場合は、親オブジェクト bpm_package を直接使用できます。

したがって、あなたの場合、次のことを行うのが最善です。

var ノード = bpm_package.children[0]; // または、パッケージが null でないかどうかを確認できます
。 // 次に、ノードを
artPDFRename(node);に送信します。//または、js ファイルに bpm_package コードを追加することもできます

于 2013-01-02T16:18:20.760 に答える