【问题标题】:AEM 6.2 - Custom workflow step not workingAEM 6.2 - 自定义工作流程步骤不起作用
【发布时间】:2017-05-25 10:17:46
【问题描述】:

我创建了一个自定义工作流程步骤,但问题是当我尝试将其添加到新工作流程时它没有显示在列表中。

我已按照指南进行操作,但无济于事。

我找不到任何错误消息。

在网络控制台中,我可以看到我的捆绑包。每次我安装它时都会正确更新它,但是,虽然我的工作流包是可见的,但服务本身是不可见的。所以,看起来它由于某种原因没有被加载。

注意:可能不相关,但使用“路径”的 servlet 也不起作用(它们在控制台的包中不可见)。 AEM 原型附带的示例 servlet 工作正常,但工作方式不同(它使用 resourceType 而不是路径)。

此外,在 Eclipse 中,它表示不推荐使用 Felix scr 注释,并且它们之间有一条线。我不使用 eclipse 进行构建和安装,所以我不确定这是否是问题所在,但我认为值得一提。

谢谢

编辑 - 这是一些示例代码:

package company.aem.core.workflow;

import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Workspace;

import org.apache.felix.scr.annotations.Component; // <--- shows up as deprecated
import org.apache.felix.scr.annotations.Properties;// <--- shows up as deprecated
import org.apache.felix.scr.annotations.Property;// <--- shows up as deprecated
import org.apache.felix.scr.annotations.Service;// <--- shows up as deprecated
import org.apache.sling.api.resource.ResourceResolver;
import org.osgi.framework.Constants;

import com.adobe.granite.workflow.WorkflowException;
import com.adobe.granite.workflow.WorkflowSession;
import com.adobe.granite.workflow.exec.WorkItem;
import com.adobe.granite.workflow.exec.WorkflowProcess;
import com.adobe.granite.workflow.metadata.MetaDataMap;

@Component // <----- this shows up as deprecated in eclipse
@Service // <----- this shows up as deprecated in eclipse
public class CommunityObjectsDeploymentWorkflow implements WorkflowProcess {

    @Property(value = "Test workflow implementation") // <----- this shows up as deprecated in eclipse
    static final String DESCRIPTION = Constants.SERVICE_DESCRIPTION; 
    @Property(value = "Some vendor") // <----- this shows up as deprecated in eclipse
    static final String VENDOR = Constants.SERVICE_VENDOR;
    @Property(value = "My Sample Workflow Process") // <----- this shows up as deprecated in eclipse
    static final String LABEL="My test workflow";

    @Override
    public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap metaDataMap) throws WorkflowException {

        Session session = (Session) workflowSession.adaptTo(Session.class);
        Workspace workspace = session.getWorkspace();

        try {
            // do JCR related stuff
        } catch (RepositoryException e) {
            e.printStackTrace();
        }

    }
}

编辑:解决方案是选择正确的组件注释导入。

改变这个:

import org.apache.felix.scr.annotations.Component;

到这里:

import org.osgi.service.component.annotations.Component;

现在服务正在运行,并且在 Web 控制台中可见。

注意:尽管其他注释在技术上已被弃用,但它们仍然有效。看起来只有一个组件需要更改。

为了让它在流程编辑器中可见,它需要 process.label 属性(使用 Felix 包中的 Property 注释),如下所示:

import org.apache.felix.scr.annotations.Property;
@Property(value = "My Sample Workflow Process")
    static final String LABEL="process.label";

【问题讨论】:

    标签: servlets adobe workflow aem


    【解决方案1】:

    任何工作流程过程都需要一个名为 process.label 的属性才能显示在工作流程步骤的流程列表中。 给定的示例代码中缺少此属性。

    关于 Apache Felix SCR 注释的弃用警告的另一个说明。这些注释已被弃用,取而代之的是标准 OSGi 声明式服务注释。

    【讨论】:

    • 问题是,该服务甚至没有出现在 Web 控制台中,这让我觉得它甚至没有运行。所以标签不应该有任何区别。是否有任何关于将 OSGi 声明式服务注释与 AEM 一起使用的文档?我发现的每个关于制作 AEM 服务/组件的示例都使用 Felix SCR 注释。我找不到你提到的任何例子。语法不同,我无法以通常的方式声明标签或描述或类似的东西。
    • 我已经用解决方案更新了我的原始帖子。您提到 OSGi 声明式服务已走上正轨。谢谢!
    【解决方案2】:

    我已经用更多细节更新了原始帖子。问题是 @Component 注释导入。我用的是费利克斯。我将其更改为在 Eclipse 中显示为选项的 OSGi 并且有效。

    顺便说一句,要在工作流编辑器中显示自定义工作流步骤,您还需要有一个 process.label 属性。我的原始代码没有那个,但我已经改变了它,现在它也在那里可见。

    【讨论】:

      猜你喜欢
      • 2016-02-18
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多