Изменить имя файла 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:, а затем переименовывает родителя.

Другие вопросы по тегам