hybris 如何使用 workflow
hybris 中可以通过impex 来定义 workflow,如下所示
# ----------------------------------------------------------------------- # [y] hybris Platform # # Copyright (c) 2017 SAP SE or an SAP affiliate company. All rights reserved. # # This software is the confidential and proprietary information of SAP # ("Confidential Information"). You shall not disclose such Confidential # Information and shall use it only in accordance with the terms of the # license agreement you entered into with SAP. # ----------------------------------------------------------------------- $dummyUserName=admin; $orderApproveTempateName=orderApprovaltemplate; $orderStepName=OrderApprovalStep1; $orderApprovalStepName=OrderApprovalStep2; $orderEndStepName=OrderApprovalStepEnd $doneName=OrderApprovalDone; $approvedName=OrderApproved; $notApprovedName=OrderNotApproved; $endName=OrderApprovalEnd # import special (simple) template for creating order workflows: INSERT_UPDATE WorkflowTemplate;code[unique=true];name[lang=en];name[lang=zh];description[lang=en];description[lang=zh];owner(User.uid); ;$orderApproveTempateName;order template;订单审批流程;Template with one simple tasks;订单审批流程;$dummyUserName; # add two simple steps to order template ## step one INSERT_UPDATE WorkflowActionTemplate;code[unique=true];name[lang=en];name[lang=zh];workflow(WorkflowTemplate.code);actionType(code) ;$orderStepName;Start;开始;$orderApproveTempateName;start ## step two INSERT_UPDATE WorkflowActionTemplate;code[unique=true];name[lang=en];name[lang=zh];workflow(WorkflowTemplate.code);actionType(code) ;$orderApprovalStepName;Approval;审批;$orderApproveTempateName;normal #decisions for first step INSERT_UPDATE WorkflowDecisionTemplate;code[unique=true];name[lang=en];name[lang=zh];actionTemplate(WorkflowActionTemplate.code); ;$doneName;Done!;完成!;$orderStepName; INSERT_UPDATE WorkflowActionTemplateLinkTemplateRelation;source(WorkflowDecisionTemplate.code)[unique=true];target(WorkflowActionTemplate.code) ;$doneName;$orderApprovalStepName #decisions for second step INSERT_UPDATE WorkflowDecisionTemplate;code[unique=true];name[lang=en];name[lang=zh];actionTemplate(WorkflowActionTemplate.code); ;$approvedName;Approval;审批通过;$orderApprovalStepName; INSERT_UPDATE WorkflowDecisionTemplate;code[unique=true];name[lang=en];name[lang=zh];actionTemplate(WorkflowActionTemplate.code); ;$notApprovedName;No Approval;审批不过;$orderApprovalStepName; INSERT_UPDATE WorkflowActionTemplateLinkTemplateRelation;source(WorkflowDecisionTemplate.code)[unique=true];target(WorkflowActionTemplate.code) ;$notApprovedName;$orderEndStepName INSERT_UPDATE WorkflowActionTemplateLinkTemplateRelation;source(WorkflowDecisionTemplate.code)[unique=true];target(WorkflowActionTemplate.code) ;$approvedName;$orderEndStepName ## step three - final INSERT_UPDATE WorkflowActionTemplate;code[unique=true];name[lang=en];name[lang=zh];workflow(WorkflowTemplate.code);actionType(code) ;$orderEndStepName;End;结束;$orderApproveTempateName;end #decisions for third step INSERT_UPDATE WorkflowDecisionTemplate;code[unique=true];name[lang=en];name[lang=de];actionTemplate(WorkflowActionTemplate.code); ;$endName;End;Ende;$orderEndStepName;
impex 中包括 WorkflowTemplate, WorkflowActionTemplate, WorkflowDecisionTemplate, WorkflowActionTemplateLinkTemplateRelation 这四种类型的model
通过impex的内容不难看出来它们之间的关系。
现直接总结如下:
a. 一个workflow至少有3三 种类型(start/normal/end)的 action
b.一个action最少有一种决策 decision
c.一个decision 可以通过 WorkflowActionTemplateLinkTemplateRelation 链接到下一个action上 直到结束节点 end.
创建 workflow的代码如下,包括如何触发decision
public void autoCreateWorkFlow(PrincipalModel principal, KeyInfoModel info) { validateParameterNotNull(principal, "principal model cannot be null"); UserModel admin = userService.getUserForUID(ADMIN_CODE); WorkflowTemplateModel workflowTemplate = workflowTemplateService.getWorkflowTemplateForCode(workflowTemplateCode); //create a new workflow for given workflowtemplate final WorkflowModel workflow = workflowService.createWorkflow(workflowTemplate, admin); //add attachment for workflow final WorkflowItemAttachmentModel attachment = modelService.create(WorkflowItemAttachmentModel.class); AbstractOrderEntryModel orderEntry = info.getOrderEntry(); attachment.setItem(info.getOrderEntry()); attachment.setWorkflow(workflow); attachment.setCode(orderEntry.getPk()+"_OrderEntry"); this.modelService.save(attachment); this.modelService.refresh(attachment); workflow.setAttachments(Collections.singletonList(attachment)); workflowProcessingService.startWorkflow(workflow); //auto do start decision this.autoDoStartDecision(workflow, admin); }
一花一叶总关情