Alfresco: прямая связь с рабочим процессом

Я хотел бы начать рабочий процесс с дашлета ссылок сайта на моем сайте Alfresco. Использование Firebug для проверки POST дает мне работающий URL, но он отображает только форму без какого-либо пользовательского интерфейса:

http://localhost:8081/share/service/components/form?htmlid=template_x002e_start-workflow_x002e_start-workflow_x0023_default-startWorkflowForm-alf-id1&itemKind=workflow&itemId=activiti%24orpWorkflow&mode=create&submitType=json&showCaption=true&formUI=true&showCancelButton=true&destination=
  1. Это возможно? И если так, как я могу отформатировать ссылку, чтобы включить пользовательский интерфейс?
  2. Если нет, существуют ли специальные дашлеты, предназначенные для запуска рабочих процессов?

3 ответа

Когда вы выбираете рабочий процесс из выпадающего списка, он генерирует URL на основе выбранного рабочего процесса и перенаправляет вас на него.

Ex. Для ParallelGroupReview рабочий процесс URL есть.

http://localhost:8080/share/service/components/form?htmlid=template_x002e_start-workflow_x002e_start-workflow_x0023_default-startWorkflowForm-alf-id1&itemKind=workflow&itemId=activiti%24activitiParallelGroupReview&mode=create&submitType=json&showCaption=true&formUI=true&showCancelButton=true&destination=

Теперь, если вы используете этот URL-адрес непосредственно в браузере, вы сможете увидеть ту же форму, но часть верхнего и нижнего колонтитула будет отсутствовать, поскольку эти глобальные компоненты не будут доступны вне контекста общего ресурса.

Если вы увидите start-workflow.ftl, вы увидите, что вставлены компоненты верхнего и нижнего колонтитула, которые отвечают за остальную часть пользовательского интерфейса.

<#include "include/alfresco-template.ftl" />
<@templateHeader />

<@templateBody>
   <@markup id="alf-hd">
   <div id="alf-hd">
      <@region scope="global" id="share-header" chromeless="true"/>
   </div>
   </@>
   <@markup id="bd">
   <div id="bd">
      <div class="share-form">
         <@region id="start-workflow" scope="template"/>
      </div>
   </div>
   </@>
</@>

<@templateFooter>
   <@markup id="al-ft">
   <div id="alf-ft">
      <@region id="footer" scope="global"/>
   </div>
   </@>
</@>

Вы можете повторно использовать один и тот же компонент, просто убедитесь, что верхний и нижний колонтитулы правильно инициализированы.

Я создал модуль расширения, который имеет следующую цель:

<targetPackageRoot>org.alfresco.components.workflow</targetPackageRoot>

Я включил следующий фрагмент в мой расширенный start-workflow.get.html.ftl:

<@markup id="start-workflow-js" target="js" action="after">
   <@script src="${url.context}/res/components/workflow/initiate-workflow.js" group="workflow"/>
</@>

расширить собственный файл start-workflow.js по умолчанию.

Вам нужно будет изменить следующие методы:

  • onReady: поэтому он читает ваш параметр из URL, чтобы узнать, какое определение рабочего процесса нужно запустить и запустить onWorkflowSelectChange
  • onWorkflowSelectChange: поэтому он читает определение рабочего процесса для загрузки формы

Вы можете сделать небольшую настройку для Share.

Например, если вам нужно открыть начальную форму любого бизнес-процесса, вы можете найти его индекс во всплывающем окне и добавить дополнительный параметр в URL (скажем, openFormParam).

В start-workflow.js:

onReady: function StartWorkflow_onReady() {
    // skipped ...
    // get the additional parameter from the URL here
    // var openFormParam = ...

    if(openFormParam !== null) {
        var p_aArgs = [];
        var index = {index: 0}; // for the first workflow in the popup

        p_aArgs.push(0, index);
        this.onWorkflowSelectChange(null, p_aArgs);
    }

    return Alfresco.component.StartWorkflow.superclass.onReady.call(this);
},

 // OOTB
onWorkflowSelectChange: function StartWorkflow_onWorkflowSelectChange(p_sType, p_aArgs) {
    var i = p_aArgs[1].index;
    if (i >= 0) {
        // Update label of workflow menu button
        var workflowDefinition = this.options.workflowDefinitions[i];
        this.widgets.workflowDefinitionMenuButton.set("label", workflowDefinition.title + " " + Alfresco.constants.MENU_ARROW_SYMBOL);
        this.widgets.workflowDefinitionMenuButton.set("title", workflowDefinition.description);

        // Load the form for the specific workflow
        Alfresco.util.Ajax.request({
            url: Alfresco.constants.URL_SERVICECONTEXT + "components/form",
            dataObj: {
                htmlid: this.id + "-startWorkflowForm-" + Alfresco.util.generateDomId(),
                itemKind: "workflow",
                itemId: workflowDefinition.name,
                mode: "create",
                submitType: "json",
                showCaption: true,
                formUI: true,
                showCancelButton: true,
                destination: this.options.destination
            },
            successCallback: {
                fn: this.onWorkflowFormLoaded,
                scope: this
            },

            failureMessage: this.msg("message.failure"),
                scope: this,
                execScripts: true
        });
    }
},
Другие вопросы по тегам