I am trying to create custom control from the Process Flow control. This is what the base control looks like:
Now, I would like the ProcessFlow to have custom nodes wherein there will be buttons on each node, like so:
So, the issue I am having is that since we'll have custom ProcessFlowNodes (pictured as square-looking notes), we will need a custom ProcessFlow control as the standard ProcessFlow only allows type sap.suite.commons.ProcessFlowNode
controls under its nodes
aggregation.
Thus, the hurdle is to create a custom ProcessFlow control with a custom aggregation that accepts the custom ProcessFlowNode control. My question in this regard is:
- Do I extend
sap.ui.core.Control
or sap.suite.commons.ProcessFlow
? If it is Control, how does it know to be a ProcessFlow? My assumption here (I believe I am partly answering my own question) is that ProcessFlow is to be extended. Then, the next issue is the console errors such as "oControl must be an sap.ui.core.Control or empty" when I try to render the control with oRm.renderControl(oControl.getAggregation("lanes"))
. How can I resolve these errors?
Here is a sample code with screenshot of how a basic, working ProcessFlow (namespace xmlns="sap.suite.ui.commons"
) looks:
<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>
Here is my code thus far:
Control:
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"));
}
});
});
View in the app:
<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>
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…