在 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
  }]);
}