更改文件名 Alfresco
Change the file name Alfresco
我需要更改附加到工作流的文件的名称并在执行期间移动到另一个位置。文件名是根据以流程形式输入的信息生成的(注册号字段和发件人)。如何实施?谢谢!
例如:BX-2/Nick_Berry.xls
文件作为执行范围变量bpm:package(即次级子关联)附加到工作流。您应该能够实现一个 EndTaskListener,它从任务范围中获取表单信息并找出 bpm:package 的父级,然后重命名父级。
您将需要编写一个 (java) 侦听器,该侦听器将在表单完成且任务结束时 运行。
以下是如何从工作流执行上下文中获取文件的 NodeRef:
public NodeRef getFirstPackageItem(DelegateExecution execution){
ActivitiScriptNode packageItemsbpm = (ActivitiScriptNode) execution.getVariable("bpm_package");
try {
if (packageItemsbpm != null && packageItemsbpm.getHasChildren()){
return nodeService.getChildAssocs(packageItemsbpm.getNodeRef()).get(0).getChildRef();
}
} catch (Throwable e) {
logger.error("",e);
}
return null;
}
通过从您的任务对象中获取值并将它们存储在您的 NodeRef 中来完成 属性 值形式的名称设置:
NodeRef file = getFirstPackageItem(execution)
Object filenameprefix = task.getVariable("mymodel_regnumber");
Object filenamesuffix = task.getVariable("mymodel_sender");
nodeService.setProperty(file, ContentModel.PROP_NAME, filenameprefix+"/"+filenamesuffix );
我正在寻找自己的解决方案。需要在用户任务中创建执行监听器。它的代码是:
<extensionElements>
<activiti:executionListener class="org.alfresco.repo.workflow.activiti.listener.ScriptExecutionListener" event="start">
<activiti:field name="script">
<activiti:string><![CDATA[
if (typeof execution.getVariableLocal('zvernennya_registrationnumber') != undefined) execution.setVariable('zvernennya_registrationnumber', execution.getVariableLocal('zvernennya_registrationnumber'));
if (typeof execution.getVariableLocal('zvernennya_sender') != undefined) execution.setVariable('zvernennya_sender', execution.getVariableLocal('zvernennya_sender'));
for (var i = 0; i < bpm_package.children.length; i++) {
var child = bpm_package.children[i];
a = child.properties['cm:name'].split('.');
var ext = a[a.length-1];
child.properties['cm:name']=zvernennya_registrationnumber+" "+zvernennya_sender+"."+ext;
child.save();
}
]]></activiti:string>
</activiti:field>
</activiti:executionListener>
</extensionElements>
我需要更改附加到工作流的文件的名称并在执行期间移动到另一个位置。文件名是根据以流程形式输入的信息生成的(注册号字段和发件人)。如何实施?谢谢!
例如:BX-2/Nick_Berry.xls
文件作为执行范围变量bpm:package(即次级子关联)附加到工作流。您应该能够实现一个 EndTaskListener,它从任务范围中获取表单信息并找出 bpm:package 的父级,然后重命名父级。
您将需要编写一个 (java) 侦听器,该侦听器将在表单完成且任务结束时 运行。
以下是如何从工作流执行上下文中获取文件的 NodeRef:
public NodeRef getFirstPackageItem(DelegateExecution execution){
ActivitiScriptNode packageItemsbpm = (ActivitiScriptNode) execution.getVariable("bpm_package");
try {
if (packageItemsbpm != null && packageItemsbpm.getHasChildren()){
return nodeService.getChildAssocs(packageItemsbpm.getNodeRef()).get(0).getChildRef();
}
} catch (Throwable e) {
logger.error("",e);
}
return null;
}
通过从您的任务对象中获取值并将它们存储在您的 NodeRef 中来完成 属性 值形式的名称设置:
NodeRef file = getFirstPackageItem(execution)
Object filenameprefix = task.getVariable("mymodel_regnumber");
Object filenamesuffix = task.getVariable("mymodel_sender");
nodeService.setProperty(file, ContentModel.PROP_NAME, filenameprefix+"/"+filenamesuffix );
我正在寻找自己的解决方案。需要在用户任务中创建执行监听器。它的代码是:
<extensionElements>
<activiti:executionListener class="org.alfresco.repo.workflow.activiti.listener.ScriptExecutionListener" event="start">
<activiti:field name="script">
<activiti:string><![CDATA[
if (typeof execution.getVariableLocal('zvernennya_registrationnumber') != undefined) execution.setVariable('zvernennya_registrationnumber', execution.getVariableLocal('zvernennya_registrationnumber'));
if (typeof execution.getVariableLocal('zvernennya_sender') != undefined) execution.setVariable('zvernennya_sender', execution.getVariableLocal('zvernennya_sender'));
for (var i = 0; i < bpm_package.children.length; i++) {
var child = bpm_package.children[i];
a = child.properties['cm:name'].split('.');
var ext = a[a.length-1];
child.properties['cm:name']=zvernennya_registrationnumber+" "+zvernennya_sender+"."+ext;
child.save();
}
]]></activiti:string>
</activiti:field>
</activiti:executionListener>
</extensionElements>