Workflow 在工作流Alfresco上集成applet
问题:我有一个小程序,可以在PDF上进行“更改”,然后我必须将更改保存到相应的文件中。如何将此小程序集成到工作流中?有什么提示或文件要读吗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
我认为在任务表单中(在任务编辑页面中),有一个带有按钮的新组件来调用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代码,就像在您的页面中那样task
作为itemKind和
作为itemId对表单处理器webscript进行Xhr…)/org/alfresco/components/form/controls/workflow/activiti transitions.ftl
中获得一些灵感,并创建自己的sign transition.ftl
ftl,在其中为小程序添加html和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>