2012-12-21 19 views
0

有沒有辦法在Alfresco的Activiti工作流程中獲得啓動狀態的ScriptNode?我的工作流程中有一個ScriptTask,並且它有一個爲Start事件設置的Alfresco Script Listener。當腳本被調用時,我希望轉換到工作流中的ScriptTask的ScriptNode作爲參數傳遞給定義爲偵聽器的函數。那可能嗎?Alfresco Activiti腳本任務偵聽器當前scriptnode?

爲清晰起見進行編輯: 下面是Activiti插件Eclispe的屏幕截圖。 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對象中的節點的指針。這就是問題所在。

還是我到目前爲止基於我們如何開發這個,它沒有任何意義?

+0

你的最後一行是很難跟上。請解釋一些代碼示例的含義,以便人們可以遵循。我不確定,但可能會出現這種情況,您沒有針對您的問題發表任何評論/回答。 –

+0

我有一個露天腳本上的偵聽器Activit任務(比如接收任務)。當ScriptNode在工作流中移動並完成該任務時,腳本被調用。我想只抓住觸發腳本被調用的ScriptNode。 – MonkeyWrench

+0

ScriptNode通過工作流的移動,你的意思是bpm_package吧?那麼當你執行工作流操作時,你希望該節點正確嗎?然後你需要從bpm_package(association)中獲得第一個孩子。或者這不是你的意思? –

回答

1

作爲示例,請檢查ScriptTaskListener類。這裏所有的工作流變量都放在地圖上。

下面的代碼是有趣:

//添加所有工作流變量模型 地圖變量= 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」)的例子;

這將是一個列表,以便採取第一和一個將是您的節點

---------更新

如果您使用從露天的JavaScript,那麼你可以直接使用父對象bpm_package。

所以你的情況建議最好做到以下幾點:

VAR節點= bpm_package。兒童[0]; //或者你可以檢查 包不爲空
//然後發送節點到您的
artPDFRename(節點); //或者你可以只添加bpm_package代碼 您的JS文件

+0

對不起,我應該已經指定了我試圖通過網頁腳本來做到這一點。我會看看是否轉換爲工作流對象中的可用方法。 – MonkeyWrench

+0

?我現在完全困惑。這個任務如何得到一個web腳本。我還沒有看到一個標籤/聽衆/方法。我認爲你需要在這裏完全暴露你的代碼/步驟,否則你不會真的得到幫助。 –

+0

更新了更多信息。謝謝。 – MonkeyWrench

相關問題