Комментарии к бизнес-процессу

 У бизнес-процесса есть комментарии (секция Обсуждение). Задача стоит следующая - по завершению бизнес-процесса (на последней стадии) забирать все комментарии и их свойства в поле карточки реестра.
Как можно получить доступ к комментариям бизнес-процесса?

Комментарии

Angelina аватар
Вот Вам очень полезная ссылка: https://wiki.alfresco.com/wiki/JavaScript_API

А почему именно в конце процесса? Почему не добавлять комментарий в конце каждого юзер-таска?

Смотрите, комментарий каждого таска в процессе - это параметр bpm_comment  У каждого таска есть обработка событий - его можно перехватить в задаче и что-то сделать: creаte (при создании задачи), coplete (при завершении), assignment (при взятии задачи на себя)  и delete (при стирании задачи) (посмотрите главу "Task listener" в юзергайде по активити)

В реестре у Вас будет переменная - список комментариев (ну, или же Вам нужна сконкатенированная строка - смотрите сами, тип переменной определяйте сами) И в нее Вы будете добавлять комменты по мере завершения задач

Как обычно это делается? Вот Вам пример:
<userTask id="review" name="Проверить исполнение поручения."	
    activiti:formKey="pinternaldir:review" >
  <extensionElements>
    <activiti:taskListener event="complete" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
      <activiti:field name="script">
	<activiti:string>
        //прочитаем поле комментария в закрывающейся задаче
        //и поместим значение в переменную comment
	 var comment = task.getVariable('bpm_comment');
 
...
      здесь идет участок кода, который добавляет комментарий задачи в реестр
...
 
        </activiti:string>
      </activiti:field>
    </activiti:taskListener>
  </extensionElements>
...
</userTask>

Таким образом Вы можете достать любые переменные задач на разных их стадиях. В принципе, можно сделать это и в конце процесса - просто копить все комментарии в переменной процесса, используя execution.setVariable и execution.getVariable


Angelina аватар
Ну, а это пример того, как записать переменную в реестр:
var site = siteService.getSite(SITE_NAME);
if (site && site.hasContainer("dataLists")) {
  var dataLists = site.getContainer("dataLists");
  if (dataLists != null) {
    for each(var dataList in dataLists.children) {
      if (dataList.properties["dl:dataListItemType"] == "abrdl:application") {
        var app = dataList.createNode(null, "abrdl:application");
	app.properties["abrdl:comment"] += task.getVariable('bpm_comment'));;
	app.save();
      }
    }
  } }										
 
SITE_NAME - это имя сайта, на котором создан кастомный реестр типа abrdl:application (еесно, у Вас будет свой тип реестра). Из списка реестров ищется ваш реестр, а затем в него, в поле реестра abrdl:comment конкатенируется текущий комментарий

 Спасибо большое за развернутый ответ)