2014-07-03 12 views
1

我們正在使用Grails爲Activiti編寫一個新的前端,用於在處理任務和填充相關數據時向用戶展示自定義UI。FormService中的未知類型'processDefinition'

我們能夠查詢Activiti引擎並返回任務列表;下面的代碼工作,因爲我們所期待和(與視圖一起)給任務的基本清單 - 名稱,說明等:

def index() { 
    def tasks = activitiService.findAllTasks(["sort": null, "offset": 0, "max": 10]) 
    [tasks: tasks] 
} 

然而,當我們試圖拉回來的表單數據各個任務(這樣我們可以顯示的形式向用戶完成):

def view(params) { 

    def taskQuery = taskService.createTaskQuery() 
    def task = taskQuery.taskId(params.id).singleResult(); 
    def form = formService.getRenderedTaskForm(params.id) 

    [task: task, form: form] 
} 

一個錯誤被拋出:

unknown type 'processDefinition' processDefinition 

def form =線;完整的軌跡是:

Line | Method 
->> 55 | parseFormPropertyType    in org.activiti.engine.impl.form.FormTypes 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|  61 | parseConfiguration    in org.activiti.engine.impl.form.DefaultFormHandler 
|  34 | parseConfiguration . . . . . . . in org.activiti.engine.impl.form.DefaultStartFormHandler 
|  84 | createStartFormHandlers   in org.activiti.engine.impl.bpmn.parser.handler.StartEventParseHandler 
|  58 | executeParse . . . . . . . . . . in  '' 
|  38 | executeParse      in  '' 
|  84 | parse . . . . . . . . . . . . . . in org.activiti.engine.impl.bpmn.parser.handler.AbstractBpmnParseHandler 
|  27 | parse        in org.activiti.engine.impl.bpmn.parser.handler.AbstractFlowNodeBpmnParseHandler 
|  36 | parse . . . . . . . . . . . . . . in org.activiti.engine.impl.bpmn.parser.handler.AbstractActivityBpmnParseHandler 
|  73 | parseElement      in org.activiti.engine.impl.bpmn.parser.BpmnParseHandlers 
| 435 | processFlowElements . . . . . . . in org.activiti.engine.impl.bpmn.parser.BpmnParse 
|  88 | transformProcess     in org.activiti.engine.impl.bpmn.parser.handler.ProcessParseHandler 
|  49 | executeParse . . . . . . . . . . in  '' 
|  35 | executeParse      in  '' 
|  84 | parse . . . . . . . . . . . . . . in org.activiti.engine.impl.bpmn.parser.handler.AbstractBpmnParseHandler 
|  73 | parseElement      in org.activiti.engine.impl.bpmn.parser.BpmnParseHandlers 
| 395 | transformProcessDefinitions . . . in org.activiti.engine.impl.bpmn.parser.BpmnParse 
| 231 | execute       in  '' 
| 107 | deploy . . . . . . . . . . . . . in org.activiti.engine.impl.bpmn.deployer.BpmnDeployer 
|  50 | deploy       in org.activiti.engine.impl.persistence.deploy.DeploymentManager 
| 115 | resolveProcessDefinition . . . . in  '' 
|  65 | findDeployedProcessDefinitionById in  '' 
| 751 | getTaskDefinition . . . . . . . . in org.activiti.engine.impl.persistence.entity.TaskEntity 
|  54 | execute       in org.activiti.engine.impl.cmd.GetRenderedTaskFormCmd 
|  24 | execute . . . . . . . . . . . . . in org.activiti.engine.impl.interceptor.CommandInvoker 
|  57 | execute       in org.activiti.engine.impl.interceptor.CommandContextInterceptor 
|  47 | doInTransaction . . . . . . . . . in org.activiti.spring.SpringTransactionInterceptor$1 
|  45 | execute       in org.activiti.spring.SpringTransactionInterceptor 
|  31 | execute . . . . . . . . . . . . . in org.activiti.engine.impl.interceptor.LogInterceptor 
|  40 | execute       in org.activiti.engine.impl.cfg.CommandExecutorImpl 
|  35 | execute . . . . . . . . . . . . . in  '' 
|  46 | getRenderedTaskForm    in org.activiti.engine.impl.FormServiceImpl 
|  22 | view . . . . . . . . . . . . . . in TasksController.groovy 
| 195 | doFilter       in PageFragmentCachingFilter.java 
|  63 | doFilter . . . . . . . . . . . . in AbstractFilter.java 
| 1145 | runWorker       in java.util.concurrent.ThreadPoolExecutor 
| 615 | run . . . . . . . . . . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker 
^ 744 | run        in java.lang.Thread 

我們似乎需要在某一時刻到formService通過流程定義,或者至少有一個可用的庫,它可以創建一個從;不幸的是,我們一直無法弄清楚如何做到這一點。

那麼 - 我們錯過了什麼會得到這個工作?或者,我們是否完全走錯了路線,對於我們需要的東西還有更好的解決方案(我們試圖避免直接查詢數據庫表)。

回答

0

看起來,這種類型的錯誤出現在您定義一個未註冊的自定義類型的表單字段。如果你想顯示你暴露的流程定義表單字段,我找到了一個好的博客貼子,可能與here

基本上,你必須確定你的自定義類型(在這種情況下ProcessDefinitionFormType)和resources.groovy註冊它:

processDefinitionFormType(org.unnoware.ProcessDefinitionFormType) 
processEngineConfiguration(org.activiti.spring.SpringProcessEngineConfiguration) { 

      // ... many other properties are set here, you may copy them from activiti plugin source 

      customFormTypes = [ref('processDefinitionFormType')] 
     } 

編輯:

您可以在 'Config.groovy中' 太註冊您的自定義類型:

beans { 
    processEngineConfiguration { 
      customFormTypes = [new org.unnoware.ProcessDefinitionFormType()] 
    } 
}