AEM — Пользовательский рабочий процесс с проверкой авторского контента?

Как написать AEM-пользовательский рабочий процесс с проверкой авторского контента?

например: я хочу проверить авторский HTML-контент при активации страницы. Я хочу проверить все гиперссылки в содержимом автора, основываясь на том, что конкретная ссылка не прошла рабочий процесс или передала рабочий процесс для активации.


person Sandeep    schedule 05.07.2016    source источник


Ответы (1)


Документация по рабочему процессу 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
comment
Спасибо nateyolles за хорошее объяснение. - person Sandeep; 06.07.2016
comment
Спасибо nateyolles за хорошее объяснение. Пожалуйста, не обращайте внимания на мой глупый вопрос, я новичок в AEM. Как я могу отлаживать сервисный код локально? - person Sandeep; 06.07.2016
comment
В этой статье приведены пошаговые инструкции: helpx.adobe.com/experience-manager/ кб/. Если у вас есть дополнительные вопросы, было бы лучше начать новый вопрос на StackOverflow, поскольку этот разговор не относится к исходному вопросу. - person nateyolles; 06.07.2016
comment
Не за что. Если вы нашли ответ, который вам нужен, не забудьте проголосовать и отметить ответ как правильный. - person nateyolles; 06.07.2016