2012-07-27 77 views
2

我想以編程方式啓動工作流程。所以寫了一個web腳本。使用alfresco java腳本API或通過web腳本啓動工作流程

執行腳本:

function startWorkflow() 
{ 
    var workflow = actions.create("start-workflow"); 
    workflow.parameters.workflowName = "activiti$alfGroupReview"; 
    workflow.parameters["bpm:workflowDescription"] = "Please review "; 
    workflow.parameters["bpm:groupAssignee"] = people.getGroup("GROUP_site_collaborators");; 
    var futureDate = new Date(); 
    futureDate.setDate(futureDate.getDate() + 7); 
    workflow.parameters["bpm:workflowDueDate"] = futureDate; 
    workflow.execute(document); 
    return ; 
} 

對於上面的腳本,我得到錯誤「的文件沒有定義」。我指的是https://forums.alfresco.com/en/viewtopic.php?f=34&t=42677http://livinginjava.blogspot.in/2008/10/starting-alfresco-workflow-using.html鏈接。

所以我更新我的腳本:

function startWorkflow() 
{ 
var nodeRef = "workspace://SpacesStore/25285e6c-2995-49fe-aa50-1270cefc806a"; 
var docNode = search.findNode(nodeRef); 
    var workflow = actions.create("start-workflow"); 
    workflow.parameters.workflowName = "activiti$alfGroupReview"; 
    workflow.parameters["bpm:workflowDescription"] = "Please review "; 
    workflow.parameters["bpm:groupAssignee"] = people.getGroup("GROUP_aloha_collaborators");; 
    var futureDate = new Date(); 
    futureDate.setDate(futureDate.getDate() + 7); 
    workflow.parameters["bpm:workflowDueDate"] = futureDate; 
    workflow.execute(docNode); 
    return ; 
} 

這裏,nodeRef:是文檔庫中文檔的參考。

現在,新的錯誤是:

500 Description: An error inside the HTTP server which prevented it from fulfilling the request. 

Message: 06270056 Wrapped Exception (with status template): 06270273 Failed to execute script 'classpath*:alfresco/templates/webscripts/org/justransform/startWF.get.js': null 

Exception: org.alfresco.scripts.ScriptException - 06270273 Failed to execute script 'classpath*:alfresco/templates/webscripts/org/justransform/startWF.get.js': null 

    org.alfresco.repo.jscript.RhinoScriptProcessor.execute(RhinoScriptProcessor.java:195) 

在此先感謝。

+0

你肯定你不能得到的節點傳遞到腳本作爲參數?如果沒有,你確定這是查找節點的正確方法嗎? – Gagravarr 2012-07-27 14:35:34

+0

我可以通過節點作爲參數。但是,當我測試時,我使用硬編碼節點參考。我對工作流程很陌生,甚至不知道nodeRef是否需要啓動工作流程。謝謝你的回覆 – mahesh 2012-07-27 15:07:31

+0

如果你想做一個評論工作流程,那麼你需要noderef來指定人們應該評論的內容! – Gagravarr 2012-07-27 15:29:45

回答

5

此代碼運行正常,如果:

  • docNode不爲空。你應該爲此添加一個檢查。
  • 您的小組已存在。可能值得爲此添加一個檢查。
  • 工作流存在於指定的ID中。使用工作流程控制檯來確認。例如,您提供的ID不是 開箱即用的工作流程。如果它是自定義的,也許你沒有成功部署 工作流,或者你的ID不正確。

此外,請勿使用稱爲「工作流程」的變量。 Alfresco已經定義了一個名爲「工作流」的根範圍對象。說到這一點,請隨意使用workflow JavaScript API來調用您的工作流程而不是操作。不過,要麼應該工作。

我使用JavaScript console和「activiti $ activitiParallelGroupReview」工作流程ID(並將工作流程變量更改爲workflowAct後)成功運行了您的代碼。

+0

傑夫,謝謝你的回覆。現在我的腳本成功運行了。我們可以在不傳遞docNode的情況下運行腳本。我正在嘗試啓動自定義工作流程,這不需要docNode引用。我試圖調用沒有參數的execute()方法,但每次都得到一個異常。 – mahesh 2012-07-30 12:57:33

+0

確實有可能運行沒有文檔的工作流程。您正在運行的操作需要一個文檔上下文。如果你不想這樣做,不要開始行動。改用工作流API。 – 2012-07-30 19:05:07

+0

傑夫謝謝。現在如何將多個文檔添加到工作流?我沒有看到工作流API中的相關方法。另外,我嘗試通過調用docNodes數組的execute方法。但沒有運氣。 – mahesh 2012-07-31 15:37:02

7

使用Alfresco Workflow API。 注:wfDocs持有DOC節點的數組:

// 2 days from now 
var dueDate2d = new Date((new Date()).getTime() + 2*(24*60*60*1000)); 

// Start workflow 
var wfdef = workflow.getDefinitionByName("activiti$alfGroupReview"); 
if (wfdef) { 
    var wfparams = new Array(); 
    wfparams["bpm:workflowDescription"] = "Please review"; 
    wfparams["bpm:groupAssignee"] = people.getGroup("GROUP_site_collaborators"); 
    wfparams['bpm:workflowDueDate'] = dueDate2d; 
    wfparams['bpm:workflowPriority'] = 1; 
    wfparams['wf:notifyMe'] = true; 

    var wfpackage = workflow.createPackage(); 
    for each (var n in wfDocs) 
     wfpackage.addNode(n); 
    var wfpath = wfdef.startWorkflow(wfpackage, wfparams); 
    var tasks = wfpath.getTasks(); 
    for each (task in tasks) 
     task.endTask(null); 
}