如何使用Java从ServiceTask在Alfresco中创建新内容?

如何使用Java从ServiceTask在Alfresco中创建新内容?,alfresco,activiti,Alfresco,Activiti,工作流完成后,如何在Alfresco存储库中创建xml文件 我创建了一个服务任务,但从那里我只能访问DelegateExecution、ProcessEngine和各种服务,而不能访问节点服务 问候, 迈克 编辑。 很难相信,对于从正在进行的工作流创建新文件这样的基本问题,没有简单的解决方案。(在这种情况下,RESTAPI似乎要好得多) 首先,在bpmn中,需要创建文件服务任务: <serviceTask id="myServiceTask" activiti:class="com.exa

工作流完成后,如何在Alfresco存储库中创建xml文件

我创建了一个服务任务,但从那里我只能访问DelegateExecution、ProcessEngine和各种服务,而不能访问节点服务

问候,

迈克

编辑。 很难相信,对于从正在进行的工作流创建新文件这样的基本问题,没有简单的解决方案。(在这种情况下,RESTAPI似乎要好得多)

首先,在bpmn中,需要创建文件服务任务:

<serviceTask id="myServiceTask" activiti:class="com.example.myClass"></serviceTask>

第二,在我的课堂上:

Map registeredBeans=Context.getProcessEngineConfiguration().getBeans();
ServiceRegistry registry=(ServiceRegistry)registeredBeans.get(ActivityConstants.SERVICE\u registry\u BEAN\u KEY);
NodeService NodeService=registry.getNodeService();
StoreRef StoreRef=新的StoreRef(StoreRef.PROTOCOL_工作区,“SpacesStore”);
ResultSet rs=registry.getSearchService().query(storeRef,SearchService.LANGUAGE\u LUCENE,“路径:\”/app:company\u home/app:shared\”);
NodeRef companyHomeNodeRef=null;
尝试
{
如果(rs.length()==0)
{
抛出新的AlfrescoRuntimeException(“坏Lucene搜索!”);
}
companyHomeNodeRef=rs.getNodeRef(0);
//创建包含节点属性值的映射
Map props=新的HashMap(1);
put(ContentModel.PROP_名称,“NewFile.txt”);
//使用节点服务创建新节点
NodeRef node=nodeService.createNode(
女主人公,
ContentModel.ASSOC_包含,
createQName(NamespaceService.CONTENT_MODEL_1_0_URI,“TEST”),
ContentModel.TYPE_CONTENT,
props.getChildRef();
//使用内容服务将内容设置到新创建的节点上
ContentWriter writer=registry.getContentService().getWriter(节点,ContentModel.PROP\u CONTENT,true);
writer.setMimetype(MimetypeMap.MIMETYPE\u TEXT\u PLAIN);
writer.setEncoding(“UTF-8”);
writer.putContent(“新内容中的消息”);
}
最后
{
rs.close();
}

我必须获得nodeserive,然后使用Lucene搜索SharedFolder/Userhome(公共文件夹的“路径”不应该在某处声明吗?),最后使用ContentWriter,我可以将内容放入Alfresco存储库。

我相信您使用的是Alfresco Activiti引擎,而不是APS。 如果您使用的是Alfresco Activiti,那么将nodeService bean注入module-context.xml文件中,并将其用于委托类

示例module-context.xml文件

<bean id="delegate" 
     parent="baseJavaDelegate" 
     class="com.example.mydelegate">
     <property name="nodeService" ref="NodeService"/>
</bean>
现在,您的delete中有了nodeService,您应该能够使用它来创建xml文件

像这样,你也可以注入其他bean


希望这对您有所帮助。

我相信您使用的是Alfresco Activiti引擎,而不是APS。 如果您使用的是Alfresco Activiti,那么将nodeService bean注入module-context.xml文件中,并将其用于委托类

示例module-context.xml文件

<bean id="delegate" 
     parent="baseJavaDelegate" 
     class="com.example.mydelegate">
     <property name="nodeService" ref="NodeService"/>
</bean>
现在,您的delete中有了nodeService,您应该能够使用它来创建xml文件

像这样,你也可以注入其他bean


希望这对您有所帮助。

我尝试过,但在调试自定义类时,nodeService为null(Alfresco崩溃)。我甚至尝试注入“ref=”nodeService“(小写),但效果并不理想。我正在从bpmn20文件调用我的类:“您是如何在module-context.xml文件中注入com.example.Text类的?我复制粘贴了您的代码。刚刚将“class”属性更改为“com.example.Text”。但我认为这是活动的问题。也许我应该以某种方式使用委托表达式。我尝试过这样做,但当我调试自定义类时,nodeService为null(并且Alfresco崩溃)。我甚至尝试注入“ref=”nodeService“(小写),但效果并不理想。我正在从bpmn20文件调用我的类:“您是如何在module-context.xml文件中注入com.example.Text类的?我复制粘贴了您的代码。刚刚将“class”属性更改为“com.example.Text”。但我认为这是活动的问题。也许我应该使用委托表达式
public class mydelegate extends BaseJavaDelegate
{
    private NodeService nodeService;

    public void setNodeService(NodeService nodeService)
    {
        this.nodeService = nodeService;
    }  
//rest of the code below 
 }