如何为AEM工作流添加自定义输入值?技术咨询
当然可以!在AEM里给工作流添加自定义输入完全可行,刚好能解决你要为每个页面运行指定专属代码的需求。下面给你两种最实用的实现方式,还有关键细节:
1. 扩展工作流的启动对话框
这是最直接的方式——在启动工作流时让用户输入专属代码,参数会跟着工作流实例走,后续步骤直接取用:
- 首先找到你要修改的目标工作流模型(可以在AEM的「工作流控制台」→「模型」里管理,或者直接在CRXDE中定位到
/etc/workflow/models/[你的模型路径]) - 编辑模型的
launcherDialog节点,在对话框的表单里添加自定义字段。比如要加一个“专属代码”输入框,就在launcherDialog/items/tab1/items下新增一个节点,配置如下(CRXDE里的节点属性):<code jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/form/textfield" fieldLabel="专属代码" name="./code" required="{Boolean}true"/> - 保存后,下次启动这个工作流时,对话框就会多出这个输入框,用户填写的代码会自动存在工作流实例的元数据中,后续步骤可以直接读取。
2. 添加自定义工作流步骤接收输入
如果需要在工作流运行中途(比如某个审批环节后)再让用户输入代码,可以做一个带交互的自定义步骤:
- 方式一:开发Java自定义步骤——继承
com.adobe.granite.workflow.exec.WorkflowProcess接口,在execute方法里读取工作流元数据,或者弹出交互对话框让用户输入。比如读取启动时传入的代码:@Override public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap metaDataMap) throws WorkflowException { // 获取工作流实例 WorkflowInstance workflowInstance = workItem.getWorkflow(); // 读取启动对话框传入的专属代码 String customCode = workflowInstance.getMetadataMap().get("code", String.class); // 后续用这个code调用外部服务上传资产列表 uploadAssetListToExternalService(customCode, getAssetListFromPayload(workItem)); } - 方式二:用ECMAScript脚本步骤——直接在脚本里通过
workflowInstance.metadataMap.get("code")获取参数,逻辑更轻量,适合快速验证。
关键注意事项
- 参数传递:不管是启动对话框还是自定义步骤输入的参数,都存在工作流实例的
MetadataMap里,所有后续步骤都能访问到,确保你处理资产列表的步骤能拿到正确的专属代码。 - 字段验证:可以给启动对话框的自定义字段加校验规则(比如正则表达式、必填项),避免用户输入无效值,比如给
textfield添加validation属性配置校验逻辑。 - 权限配置:确保操作工作流模型的用户有足够的权限(比如
crx:modify权限),普通用户启动工作流时能看到并编辑自定义字段。
内容的提问来源于stack exchange,提问作者RegyN
相关产品推荐
相关产品推荐

