在 Formatter 中设置 ProcessFlowLaneHeader 的状态
Set State of ProcessFlowLaneHeader in Formatter
与此类似 question,但我需要通过格式化程序功能来完成此操作。
鉴于 ProcessFlow
控件没有节点或文档,我需要将每个 LaneHeader 设置为一个状态,但它没有设置成功!
View:在 state
属性 中,我可以通过将 namespace.controller.controllerName.prototype
添加到常规 .formatter.fnFormatterFunction
<ProcessFlow id="workflowMain" lanes="{workflowMain>/}">
<lanes>
<ProcessFlowLaneHeader iconSrc="sap-icon://order-status" laneId="{workflowMain>/Level}" press="onHeaderPress" text="{workflowMain>Level}"
state="{path:'workflowMain>Status',formatter:'the.SandboxOfTheGods.controller.Two_processFlowAndTreeTable.prototype.formatter.WorkflowLaneStatus'}"
position="{workflowMain>SequenceID}" />
</lanes>
</ProcessFlow>
格式化程序
sap.ui.define([], function() {
"use strict";
return {
WorkflowLaneStatus: function(sStatus) {
if (sStatus === "APPROVED") {
this.setState({
state: "Positive",
value: 100
});
} else if (sStatus === "PENDING") {
this.setState({
state: "Negative",
value: 100
});
}
}
};
});
控制器
onBeforeRendering: function() {
var that = this;
sScorecardNumber = "6000000683";
var aFilters = [
new Filter("Scorecardnum", FilterOperator.EQ, sScorecardNumber)
];
this.getOwnerComponent().getModel("workflowMain").read("/MainWorkflowSet", {
filters: aFilters,
success: function(oData) {
var iResultsLength = oData.results.length;
for (var i = 0; i < iResultsLength; i++) {
oData.results[i].SequenceID = i; //change 1st entry's SequenceID to 0 instead of 1 & every entry afterward to be incremental from 0
}
that.getView().setModel(new JSONModel(oData.results), "workflowMain");
},
error: function(oError) {
MessageToast.show("Error");
}
});
}
经过几个小时的崩溃,我解决这个问题的方法是 return fnFormatterFunction 中的一个值,而不是故意尝试通过 fnFormatterFunction 中的 setter 方法设置该值:
var sState;
if (sStatus === "APPROVED") sState = "Positive";
else if (sStatus === "PENDING") sState = "Negative";
return [{
state: sState,
value: 100
}];
*注意:returned 值必须包含在数组中,因为 属性 需要一个数组对象,而不仅仅是一个对象本身。
而不是设置它:
if (sStatus === "APPROVED") {
this.setState([{
state: "Positive",
value: 100
}]);
} else if (sStatus === "PENDING") {
this.setState([{
state: "Negative",
value: 100
}]);
}
与此类似 question,但我需要通过格式化程序功能来完成此操作。
鉴于 ProcessFlow
控件没有节点或文档,我需要将每个 LaneHeader 设置为一个状态,但它没有设置成功!
View:在 state
属性 中,我可以通过将 namespace.controller.controllerName.prototype
添加到常规 .formatter.fnFormatterFunction
<ProcessFlow id="workflowMain" lanes="{workflowMain>/}">
<lanes>
<ProcessFlowLaneHeader iconSrc="sap-icon://order-status" laneId="{workflowMain>/Level}" press="onHeaderPress" text="{workflowMain>Level}"
state="{path:'workflowMain>Status',formatter:'the.SandboxOfTheGods.controller.Two_processFlowAndTreeTable.prototype.formatter.WorkflowLaneStatus'}"
position="{workflowMain>SequenceID}" />
</lanes>
</ProcessFlow>
格式化程序
sap.ui.define([], function() {
"use strict";
return {
WorkflowLaneStatus: function(sStatus) {
if (sStatus === "APPROVED") {
this.setState({
state: "Positive",
value: 100
});
} else if (sStatus === "PENDING") {
this.setState({
state: "Negative",
value: 100
});
}
}
};
});
控制器
onBeforeRendering: function() {
var that = this;
sScorecardNumber = "6000000683";
var aFilters = [
new Filter("Scorecardnum", FilterOperator.EQ, sScorecardNumber)
];
this.getOwnerComponent().getModel("workflowMain").read("/MainWorkflowSet", {
filters: aFilters,
success: function(oData) {
var iResultsLength = oData.results.length;
for (var i = 0; i < iResultsLength; i++) {
oData.results[i].SequenceID = i; //change 1st entry's SequenceID to 0 instead of 1 & every entry afterward to be incremental from 0
}
that.getView().setModel(new JSONModel(oData.results), "workflowMain");
},
error: function(oError) {
MessageToast.show("Error");
}
});
}
经过几个小时的崩溃,我解决这个问题的方法是 return fnFormatterFunction 中的一个值,而不是故意尝试通过 fnFormatterFunction 中的 setter 方法设置该值:
var sState;
if (sStatus === "APPROVED") sState = "Positive";
else if (sStatus === "PENDING") sState = "Negative";
return [{
state: sState,
value: 100
}];
*注意:returned 值必须包含在数组中,因为 属性 需要一个数组对象,而不仅仅是一个对象本身。
而不是设置它:
if (sStatus === "APPROVED") {
this.setState([{
state: "Positive",
value: 100
}]);
} else if (sStatus === "PENDING") {
this.setState([{
state: "Negative",
value: 100
}]);
}