Writing custom workflow process:
"Constants.SERVICE_DESCRIPTION=A workflow process to peform xyz task" })
public class XYZWorkflow implements WorkflowProcess {
@Override
public void execute(WorkItem item, WorkflowSession wfsession, MetaDataMap args)
throws WorkflowException {
try {
final WorkflowData workflowData = item.getWorkflowData(); // gain access to the payload data
final String assetPath = WorkflowUtils.getAssetPathFromPayload(workflowData);
if (StringUtils.isBlank(assetPath)) {
LOG.error("Error in getting asset path from payload. Cannot process workflow.");
return;
}
final ResourceResolver resourceResolver = wfsession.adaptTo(ResourceResolver.class);
final Map<String, Object> processArguments = WorkflowUtils.getProcessArguments(args);
final Resource assetResource = resourceResolver.getResource(assetPath);
final String workflow =
WorkflowUtils.getParameter(processArguments, "xyzParam");
}
...........................................................................................................................................................
public static String getAssetPathFromPayload(final WorkflowData workflowData) {
if (workflowData == null || workflowData.getPayload() == null) {
return null;
}
String assetPath = workflowData.getPayload().toString();
if (assetPath.contains(CONTENT_PATH_SEPARATOR + JcrConstants.JCR_CONTENT
+ CONTENT_PATH_SEPARATOR)) {
assetPath = assetPath.substring(0, assetPath.lastIndexOf(CONTENT_PATH_SEPARATOR
+ JcrConstants.JCR_CONTENT + CONTENT_PATH_SEPARATOR));
}
return assetPath;
}
................................................................................................................................................................
public static Map<String, Object> getProcessArguments(final MetaDataMap args) {
String[] proccesArgsVals = ArrayUtils.EMPTY_STRING_ARRAY;
if (args.containsKey("PROCESS_ARGS")) {
final String processArgsString = args.get("PROCESS_ARGS", "");
if (StringUtils.isNotEmpty(processArgsString)) {
proccesArgsVals = StringUtils.split(processArgsString, "\n");
}
}
return extractProcessArguments(proccesArgsVals);
}
private static Map<String, Object> extractProcessArguments(final String[] proccesArgsVals) {
final Map<String, Object> params = new HashMap<>();
if (ArrayUtils.isEmpty(proccesArgsVals)) {
LOG.debug("Cannot extract workflow metadata. Hence returning empty.");
return params;
}
for (final String processArgs : proccesArgsVals) {
final String[] processArg = StringUtils.split(processArgs, "=");
if (ArrayUtils.isNotEmpty(processArg) && processArg.length == 2) {
params.put(StringUtils.trim(processArg[0]), StringUtils.trim(processArg[1]));
}
}
return params;
}
....................................................................................................................................................................
public static String getParameter(final Map<String, Object> processArguments, final String key) {
if (processArguments.containsKey(key)) {
return processArguments.get(key).toString();
}
return StringUtils.EMPTY;
}
......................................................................................................................................................................
Writing ECMA Script Sample:
/etc/workflow/scripts/myproj/ abc.ecma
function check(){
var path = workflowData.getPayload(). toString();
var session = workflowSession.getSession();
var node = session.getNode(path+"/jcr: content");
log.info("tet-" + node.hasProperty(" skipApprovalStep"));
return !node.hasProperty(" skipApprovalStep");
}
No comments:
Post a Comment