如何对从OData接收的值执行加法或减法等数学函数?

时间:2017-01-31 10:02:04

标签: sapui5

我的odata从CDS视图返回这个值:

investmentDone = 18 AND totalRevenue = 10

我想从这些值中计算利润并将其存储在变量 (profit = investmentDone - totalRevenue) 中,以便我可以在我的视图中使用它来显示值。任何帮助如何在控制器中执行此计算?

提前Tx!

2 个答案:

答案 0 :(得分:1)

如果要在UI层计算利润,执行此操作的理想方法是使用自定义格式化程序,因为这是推荐的方法。 https://sapui5.netweaver.ondemand.com/#docs/guide/0f8626ed7b7542ffaa44601828db20de.html

您可以添加以下代码。

对于XML视图

<Label text="{
parts:[{path:'investmentDone'},
       {path:'totalRevenue'}
    ],
formatter: '.formatter.calcProfit' 
}">
</Label>

控制器JS

sap.ui.define([
    "sap/ui/core/mvc/Controller",
    "sap/ui/model/json/JSONModel",
    "sap/ui/demo/wt/model/formatter"
], function (Controller, JSONModel, formatter) {
    "use strict";
    return Controller.extend("sap.ui.demo.wt.controller.InvoiceList", {
        formatter: formatter,
        onInit : function () {

            ...

        }
    });
});

对于Formatter代码,创建一个新文件model / formatter.js

sap.ui.define([], function () {
    "use strict";
    return {
        calcProfit: function (iInvestmentDone, iTotalRevenue) {
                return (iInvestmentDone - iTotalRevenue);

        }
    };
});

答案 1 :(得分:0)

我建议最好在后端进行计算。 如果你必须做前端没问题。 检查以下代码:

var fnSuccess = function(oData,oResponse){
var TabData = {
    Data : []
};
var DataArr;

for(i=0;i<oData.results.length;i++){
  DataArr = {
    profit : oData.results[i].investmentDone - oData.results[i].totalRevenue,
    investmentDone : oData.results[i].investmentDone,
    totalRevenue   : oData.results[i].totalRevenue
 }
 TabData.Data.push(DataArr);
}

在此代码之后,只需将此数据绑定到JSON模型并将模型设置为表。