ขณะนี้เรากำลังเขียนส่วนหน้าใหม่ให้กับ Activiti โดยใช้ Grails เพื่อนำเสนอ UI ที่กำหนดเองแก่ผู้ใช้เมื่อจัดการงานและกรอกข้อมูลที่เกี่ยวข้อง
เราสามารถสืบค้น Activiti Engine และส่งคืนรายการงานได้ รหัสต่อไปนี้ทำงานได้ตามที่เราคาดหวัง และ (พร้อมกับมุมมอง) ให้รายการงานพื้นฐาน - ชื่อ คำอธิบาย ฯลฯ :
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
ในบางจุด หรืออย่างน้อยก็มีไลบรารี่ที่สามารถสร้างได้ ขออภัย เราไม่สามารถระบุวิธีการดังกล่าวได้แน่ชัด
แล้วเราพลาดอะไรไปที่จะทำให้สิ่งนี้ได้ผล? หรืออีกทางหนึ่ง จริงๆ แล้วเรากำลังเดินไปในเส้นทางที่ผิดโดยสิ้นเชิงและมีวิธีแก้ปัญหาที่ดีกว่าสำหรับสิ่งที่เราต้องการ (โดยไม่ต้องค้นหาตารางฐานข้อมูลโดยตรงซึ่งเราพยายามหลีกเลี่ยง) หรือไม่?