如何编写AEM - 使用作者内容验证的自定义工作流程?
例如:我想在激活页面时验证Author HTML内容。 我想检查作者内容中的所有超链接,根据特定链接使工作流失败或通过工作流程进行激活。
答案 0 :(得分:1)
AEM Workflow documentation对此主题非常有帮助。您需要创建实现WorkflowProcess
接口的服务。完成后,您可以在http://localhost:4502/workflow创建新的工作流程,也可以在http://localhost:4502/cf#/etc/workflow/models/request_for_activation.html更新默认的激活工作流程。放入新的Process Step
,将Advance Handler
设置为true,将Process
设置为您的服务。别忘了点击Save
按钮。
在您的服务中,您可以访问会话,从而访问资源解析程序以及激活资源的路径。这就是获取资源并针对其属性运行自定义代码所需的全部内容。如果您的自定义验证返回false,则可以使用wfsession.terminateWorkflow(item.getWorkflow())
终止工作流程,否则工作流程将继续,因为您将其设置为自动前进。
这是工作流程处理步骤的大致轮廓:
@Component
@Service
@Properties({
@Property(name = Constants.SERVICE_DESCRIPTION, value = "Workflow step description"),
@Property(name = Constants.SERVICE_VENDOR, value = "Company Name"),
@Property(name = "process.label", value = "Process Label will show in the workflow dropdown") })
public class MyCustomStep implements WorkflowProcess {
public void execute(WorkItem item, WorkflowSession wfsession, MetaDataMap args) throws WorkflowException {
ResourceResolver resolver = wfsession.adaptTo(ResourceResolver.class);
if (resolver != null) {
// Get the payload: the activated resource
String path = item.getWorkflowData().getPayload().toString();
Resource resource = resolver.getResource(path);
if (resource != null) {
ValueMap properties = resource.adaptTo(ValueMap.class);
String propertyToCheck = properties.get("myPropertyName", String.class);
if (!customValidationMethod(propertyToCheck)) {
// Terminate workflow
wfsession.terminateWorkflow(item.getWorkflow());
}
}
}
}
}