AEM工作流的自定义输入数据可以通过使用ProcessArgumentProvider接口来实现。下面是一个示例代码,展示了如何在AEM工作流中自定义输入数据。
首先,创建一个类实现ProcessArgumentProvider接口:
package com.example.workflow;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.api.scripting.SlingScriptHelper;
import org.apache.sling.api.wrappers.ValueMapDecorator;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.propertytypes.ServiceDescription;
import com.adobe.granite.workflow.exec.WorkItem;
import com.adobe.granite.workflow.exec.WorkflowProcessArgument;
import com.adobe.granite.workflow.exec.WorkflowProcessArgumentProvider;
import com.adobe.granite.workflow.exec.WorkflowProcessException;
import com.adobe.granite.workflow.metadata.MetaDataMap;
@Component(service = WorkflowProcessArgumentProvider.class)
@ServiceDescription("Custom Input Data Provider")
public class CustomInputDataProvider implements WorkflowProcessArgumentProvider {
@Reference
private SlingScriptHelper slingScriptHelper;
@Override
public WorkflowProcessArgument[] getArguments(WorkItem workItem, WorkflowProcessArgument[] declaredArgs,
MetaDataMap metaDataMap) throws WorkflowProcessException {
ResourceResolver resourceResolver = null;
try {
resourceResolver = slingScriptHelper.getService(ResourceResolver.class);
ValueMap valueMap = new ValueMapDecorator(resourceResolver.adaptTo(ValueMap.class));
String customInputData = valueMap.get("customInputData", String.class);
WorkflowProcessArgument[] arguments = new WorkflowProcessArgument[1];
arguments[0] = new WorkflowProcessArgument("customInputData", customInputData);
return arguments;
} finally {
if (resourceResolver != null) {
resourceResolver.close();
}
}
}
}
上述代码中,我们使用了SlingScriptHelper来获取当前的ResourceResolver,并使用ValueMap来获取自定义输入数据。在这个示例中,我们假设自定义输入数据的键是"customInputData"。
然后,在你的工作流模型中,将自定义输入数据的键设置为"customInputData",并在工作流步骤中使用它。例如,在一个Process Step中,你可以使用以下JavaScript代码来获取自定义输入数据:
var customInputData = workItem.getWorkflowData().getMetaDataMap().get("customInputData", "");
这样,你就可以在AEM工作流中使用自定义的输入数据了。记得将上述代码编译为bundle并部署到AEM中。