Workflow 在工作流Alfresco上集成applet

Workflow 在工作流Alfresco上集成applet,workflow,alfresco,activiti,alfresco-share,workflow-activity,Workflow,Alfresco,Activiti,Alfresco Share,Workflow Activity,问题:我有一个小程序,可以在PDF上进行“更改”,然后我必须将更改保存到相应的文件中。如何将此小程序集成到工作流中?有什么提示或文件要读吗 我认为在任务表单中(在任务编辑页面中),有一个带有按钮的新组件来调用applet,但这是一个好主意吗?工作呢?因为我想当这个人按下accept按钮时,applet被调用,只有当更改完成时,任务才会完成。但是如何集成呢?我们通过在iframe中打开第三方应用程序(applet)进行了类似的集成。 入口点是一个自定义文档库操作,使用自定义客户端java脚本打开i

问题:我有一个小程序,可以在PDF上进行“更改”,然后我必须将更改保存到相应的文件中。如何将此小程序集成到工作流中?有什么提示或文件要读吗


我认为在任务表单中(在任务编辑页面中),有一个带有按钮的新组件来调用applet,但这是一个好主意吗?工作呢?因为我想当这个人按下accept按钮时,applet被调用,只有当更改完成时,任务才会完成。但是如何集成呢?

我们通过在iframe中打开第三方应用程序(applet)进行了类似的集成。 入口点是一个自定义文档库操作,使用自定义客户端java脚本打开iframe并向其传递参数,但我想如果您希望它从表单按钮弹出,您可以为它提供一个自定义控件

然后,第三方应用程序使用我们编写的自定义alfresco Web脚本(用于保存您的pdf)与alfresco通信


=>或者,如果您有小程序java代码,您可以将其移动到alfresco java web脚本。这将大大简化体系结构

我们通过在iframe中打开第三方应用程序(applet)进行了类似的集成。 入口点是一个自定义文档库操作,使用自定义客户端java脚本打开iframe并向其传递参数,但我想如果您希望它从表单按钮弹出,您可以为它提供一个自定义控件

然后,第三方应用程序使用我们编写的自定义alfresco Web脚本(用于保存您的pdf)与alfresco通信

=>或者,如果您有小程序java代码,您可以将其移动到alfresco java web脚本。这将大大简化体系结构

正如我在中提到的,这是可行的,但我不赞成你这样做

我的理解(从前面的问题开始)是,您需要在alfresco实例中集成文档签名功能。您还开发了一个doclib操作,该操作使用小程序导航到一个特殊页面,以验证用户身份,对文档进行签名,然后上载文档的新(签名)版本。现在,您需要将同一个小程序集成到工作流中,以便用户能够请求其他用户对文档进行数字签名(或类似的东西)

同样,我建议您将代码从applet迁移到服务任务(服务器端),因为它将具有更高的兼容性和更高的安全性(仅供参考:并非所有浏览器仍然支持NPAPI,afaik至少Chrome不再支持,因此它们需要配置才能运行applet!)

话虽如此,我想你这样做的方式是:

  • /org/alfresco/components/form/controls/workflow/activiti transitions.ftl
    中获得一些灵感,并创建自己的
    sign transition.ftl
    ftl,在其中为小程序添加html和js代码,就像在您的页面中那样
  • 记住从工作流包项目中获取文档noderef(记住,上次从页面url上的get参数获取该信息时)
  • 一旦您成功地将文档上传到repo上(使用applet对其进行签名后),您的JS回调将调用与按下转换按钮时相同的逻辑(使用
    task
    作为itemKind和
    作为itemId对表单处理器webscript进行Xhr…)
  • 正如我在中提到的,这是可行的,但我不赞成你这样做的方式

    我的理解(从前面的问题开始)是,您需要在alfresco实例中集成文档签名功能。您还开发了一个doclib操作,该操作使用小程序导航到一个特殊页面,以验证用户身份,对文档进行签名,然后上载文档的新(签名)版本。现在,您需要将同一个小程序集成到工作流中,以便用户能够请求其他用户对文档进行数字签名(或类似的东西)

    同样,我建议您将代码从applet迁移到服务任务(服务器端),因为它将具有更高的兼容性和更高的安全性(仅供参考:并非所有浏览器仍然支持NPAPI,afaik至少Chrome不再支持,因此它们需要配置才能运行applet!)

    话虽如此,我想你这样做的方式是:

  • /org/alfresco/components/form/controls/workflow/activiti transitions.ftl
    中获得一些灵感,并创建自己的
    sign transition.ftl
    ftl,在其中为小程序添加html和js代码,就像在您的页面中那样
  • 记住从工作流包项目中获取文档noderef(记住,上次从页面url上的get参数获取该信息时)
  • 一旦您成功地将文档上传到repo上(使用applet对其进行签名后),您的JS回调将调用与按下转换按钮时相同的逻辑(使用
    task
    作为itemKind和
    作为itemId对表单处理器webscript进行Xhr…)

  • 我没有小程序的详细信息,因此我不能确定它是否可能,但是您可以尝试简单地使用一些javascript来访问applet的公共方法

    Alfresco中的表单引擎可以轻松地自定义编写自定义控件。 自定义控件将生成将小程序嵌入表单所需的html和javascript,并在按下按钮时调用它

    了解是否可以在露天截获小程序执行的更新是很有用的。例如,您可以在Alfresco中有一个侦听器(行为),当文档更新时将调用该侦听器。如果基于您的业务逻辑,侦听器可以理解小程序
    package com.someco.alfresco.behaviours;
    
    import java.io.Serializable;
    import java.util.List;
    import java.util.Map;
    
    import org.alfresco.repo.node.NodeServicePolicies.OnCreateNodePolicy;
    import org.alfresco.repo.node.NodeServicePolicies.OnUpdatePropertiesPolicy;
    import org.alfresco.repo.policy.Behaviour;
    import org.alfresco.repo.policy.JavaBehaviour;
    import org.alfresco.service.cmr.repository.ChildAssociationRef;
    import org.alfresco.service.cmr.repository.NodeRef;
    import org.alfresco.service.cmr.site.SiteInfo;
    import org.alfresco.service.namespace.NamespaceService;
    import org.alfresco.service.namespace.QName;
    import org.apache.log4j.Logger;
    
    
    public class SomeObjectCreatePolicy implements OnCreateNodePolicy, OnUpdatePropertiesPolicy {
        private final Logger logger = Logger.getLogger(SomeObjectCreatePolicy.class);
    
        @Override
        public void init() {
            this.policyComponent.bindClassBehaviour(
                    QName.createQName(NamespaceService.ALFRESCO_URI, "onCreateNode"),
                    Model.TYPE_ENTITY_OBJECT,
                    new JavaBehaviour(this, "onCreateNode", 
                            Behaviour.NotificationFrequency.TRANSACTION_COMMIT));
    
            this.policyComponent.bindClassBehaviour(
                    QName.createQName(NamespaceService.ALFRESCO_URI, "onUpdateProperties"),
                    Model.TYPE_ENTITY_OBJECT,
                    new JavaBehaviour(this, "onUpdateProperties", 
                            Behaviour.NotificationFrequency.EVERY_EVENT));
        }
    
        @Override
        public void onCreateNode(ChildAssociationRef childAssocRef) {
            /* Your logic to fire the transition */
        }
    
        @Override
        public void onUpdateProperties(NodeRef nodeRef,
                Map<QName, Serializable> before, Map<QName, Serializable> after) {
            /* Your logic to fire the transition */
        }
    }
    
    <bean id="org.alfresco.behaviours.someObjectCreatePolicy" class="com.someco.alfresco.policy.SomeObjectCreatePolicy"
            init-method="init">
    </bean>