Изменить имя файла Alfresco
Мне нужно изменить имя файла, прикрепленного к рабочему процессу, и переместить в другое место во время выполнения. Имя файла генерируется на основе информации, введенной в форме процесса (поле "Регистрационный номер" и "Отправитель"). Как это можно реализовать? Спасибо!
Например: BX-2/Nick_Berry.xls
3 ответа
Я нахожу собственное решение этой проблемы. Необходимо создать слушатель выполнения в пользовательской задаче. Его код:
<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>
Вам нужно будет написать (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 );
Файл присоединяется к рабочему процессу как переменная области выполнения bpm:package (т.е. вторичная дочерняя ассоциация). Вы должны иметь возможность реализовать EndTaskListener, который получает информацию о форме из области задач и находит родителя пакета bpm:, а затем переименовывает родителя.