Документация по рабочему процессу AEM очень полезна в этом вопросе. Вам нужно будет создать службу, реализующую интерфейс 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());
}
}
}
}
}
person
nateyolles
schedule
06.07.2016