Создание пользовательского элемента управления: Ошибки при расширении ProcessFlow

#sapui5

#sapui5

Вопрос:

Я пытаюсь создать пользовательский элемент управления из элемента управления потоком процесса. Вот как выглядит базовый элемент управления:

Поток процессов

Теперь я хотел бы, чтобы ProcessFlow имел пользовательские узлы, в которых на каждом узле будут кнопки, например:

ProcessFlow с пользовательскими ProcessFlowNodes

Итак, проблема, с которой я столкнулся, заключается в том, что, поскольку у нас будут пользовательские ProcessFlowNodes (изображенные в виде квадратных заметок), нам понадобится пользовательский элемент управления ProcessFlow, поскольку стандартный ProcessFlow допускает только sap.suite.commons.ProcessFlowNode элементы управления типами при его nodes агрегировании.

Таким образом, препятствием является создание пользовательского элемента управления ProcessFlow с пользовательской агрегацией, которая принимает пользовательский элемент управления ProcessFlowNode. Мой вопрос в этой связи таков:

  • Должен ли я продлить sap.ui.core.Control или sap.suite.commons.ProcessFlow ? Если это контроль, то как он распознает, что это поток процессов? Мое предположение здесь (я полагаю, что частично отвечаю на свой собственный вопрос) заключается в том, что ProcessFlow должен быть расширен. Затем следующая проблема — это ошибки консоли, такие как «oControl должен быть sap.ui.core.Control или пустой», когда я пытаюсь отобразить элемент управления с oRm.renderControl(oControl.getAggregation("lanes")) помощью . Как я могу устранить эти ошибки?

ошибки консоли


Вот пример кода со скриншотом того, как выглядит базовый рабочий поток процессов (пространство xmlns="sap.suite.ui.commons" имен):

 <ProcessFlow>
  <nodes>
    <ProcessFlowNode
      title="Sales Order Volume"
      titleAbbreviation="SOV1"
      laneId="0"
      nodeId="01"
      children="010,011"
      state="Positive"
      stateText="OK status"
      texts="Sales Order Document Overdue long text for the wrap up all the aspects - Not cleared"
      highlighted="false"
      focused="true"
    />
    <ProcessFlowNode
      title="Outbound Delivery 40"
      titleAbbreviation="OD40"
      laneId="0"
      nodeId="010"
      state="Negative"
      stateText="NOT OK"
      texts="Save Our Soul"
      highlighted="false"
      focused="false"
    />
    <!-- ... -->
  </nodes>
  <lanes>
    <ProcessFlowLaneHeader laneId="0" iconSrc="sap-icon://order-status" text="Order Processing" position="0" />
    <ProcessFlowLaneHeader laneId="1" iconSrc="sap-icon://monitor-payments" text="Delivery Processing" position="1" />
    <ProcessFlowLaneHeader laneId="2" iconSrc="sap-icon://payment-approval" text="Invoicing" position="2" />
    <ProcessFlowLaneHeader laneId="3" iconSrc="sap-icon://money-bills" text="Accounting" position="3" />
  </lanes>
</ProcessFlow>
 

пример кода ProcessFlow


Вот мой код на данный момент:

Контроль:

 sap.ui.define([
  "sap/suite/ui/commons/ProcessFlow"
], function(ProcessFlow){
  "use strict";

  return ProcessFlow.extend("ns.testino.control.SuperProcessFlow", {
    metadata: {
      aggregations:{
        "lanes":{
          type: "sap.suite.ui.commons.ProcessFlowLaneHeader",
          multiple: true,
          singularName: "lane"
        },
        "nodes": {
          type: "sap.suite.ui.commons.ProcessFlowNode",
          multiple: true,
          singularName: "node"
        }
      }
    },

    init: function() {
      
    },

    renderer: function(oRM,oControl) {
      oRM.renderControl(oControl.getAggregation("lanes"));
    }
  });
});
 

Просмотр в приложении:

 <mvc:View controllerName="ns.testino.controller.coke2"
  xmlns:mvc="sap.ui.core.mvc"
  xmlns:m="sap.m"
  xmlns="sap.suite.ui.commons"
  xmlns:custom="ns.testino.control"
>
  <m:Panel>
    <custom:SuperProcessFlow>
      <custom:lanes>
        <ProcessFlowLaneHeader laneId="0" iconSrc="sap-icon://order-status" text="Order Processing" position="0" />
        <ProcessFlowLaneHeader laneId="1" iconSrc="sap-icon://monitor-payments" text="Delivery Processing" position="1" />
        <ProcessFlowLaneHeader laneId="2" iconSrc="sap-icon://payment-approval" text="Invoicing" position="2" />
        <ProcessFlowLaneHeader laneId="3" iconSrc="sap-icon://money-bills" text="Accounting" position="3" />
      </custom:lanes>
    </custom:SuperProcessFlow>
  </m:Panel>
</mvc:View>
 

Ответ №1:

Я устранил ошибки, удалив init метод и создав пустую renderer функцию.

 sap.ui.define([
  "sap/suite/ui/commons/ProcessFlow"
], function(ProcessFlow) {
  "use strict";

  return ProcessFlow.extend("ns.testino.control.CustomProcessFlow", {
    metadata: {
      // ...
    },

    // No init: function() {},

    renderer: {} // leave empty if you want it to render like the standard control

  });
});