加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sap – 使用viz框架作为聚合的自定义控件

发布时间:2020-12-14 04:50:21 所属栏目:百科 来源:网络整理
导读:你好Sapui5开发者, 今天我进入了一个情况,我有5个图表来显示每种不同的风格,并使用不同的数据,所以我想在我的页面中多次使用viz框架我想写一个自定义控件,它采用grapghtype,FlattenedDataset数据,DimensionDefinition值,MeasureDefinition名称值,Feed项列表.
你好Sapui5开发者,

今天我进入了一个情况,我有5个图表来显示每种不同的风格,并使用不同的数据,所以我想在我的页面中多次使用viz框架我想写一个自定义控件,它采用grapghtype,FlattenedDataset数据,DimensionDefinition值,MeasureDefinition名称值,Feed项列表.

一般代码如下

<viz:VizFrame id="idVizFrame" 
              uiConfig="{applicationSet:'fiori'}"
              height='100%' 
              width="100%" 
              vizType='donut'>
  <viz:dataset>
    <viz.data:FlattenedDataset data="{/milk}">
      <viz.data:dimensions>
        <viz.data:DimensionDefinition name="Store Name"
                                      value="{Store Name}" />
      </viz.data:dimensions>
      <viz.data:measures>
        <viz.data:MeasureDefinition name="Revenue"
                                    value="{Revenue}" />
      </viz.data:measures>
    </viz.data:FlattenedDataset>
  </viz:dataset>

  <viz:feeds>
    <viz.feeds:FeedItem uid="size" 
                        type="Measure"
                        values="Revenue" />
    <viz.feeds:FeedItem uid="color" 
                        type="Dimension"
                        values="Store Name" />
  </viz:feeds>
</viz:VizFrame>

我希望它像

<chart frameType="donut" 
       flattenedData="{/milk}" 
       dimensionDefinationData="{Store Name}" 
       measureDefinationData="{Revenue}" />

那么应该呈现一个圆环图.

这是我试过的

shadowChart.js:

sap.ui.define([
  "sap/ui/core/Control","sap/viz/ui5/controls/VizFrame","sap/viz/ui5/data/FlattenedDataset","sap/viz/ui5/controls/common/feeds/FeedItem"
],function(Control,gViz,gData,gFeeds) {

  "use strict";

  return Control.extend("NWS.control.shadowCharts",{

    "metadata": {
        "properties": {
            "value": {
                "type": "float","defaultValue": 0
            },"frameType": {
                "type": "string","defaultValue": "bar"
            },"flattenedData": {
                "type": "object","defaultValue": ""
            },"dimensionDefinationData": {
                "type": "string","measureDefinationData": {
                "type": "string","height": {
                "type": "string","defaultValue": "90%"
            },"width": {
                "type": "string","defaultValue": "90%"
            }
        },"aggregations": {
            "_vizFrames": {
                "type": "sap.viz.ui5.controls.VizFrame","multiple": false,"visibility": "hidden"
            }

        }
    },init: function() {

        var oDataSet = new sap.viz.ui5.data.FlattenedDataset({
            "data": {
                "path": this.getFlattenedData()
            },"dimensions": [{
                "name": "dimensionNameHere","value": this.getDimensionDefinationData()
            }],"measures": [{
                "name": "measureNameHere","value": this.getMeasureDefinationData()
            }]
        });
        var feedItem1 = new sap.viz.ui5.controls.common.feeds.FeedItem({
            "uid": "ValueAxis","type": "Measure","values": ["measureNameHere"]
        });
        var feedItem2 = new sap.viz.ui5.controls.common.feeds.FeedItem({
            "uid": "categoryAxis","type": "Dimension","values": ["dimensionNameHere"]
        });
        var vizFrame = new sap.viz.ui5.controls.VizFrame({
            "vizType": this.getFrameType(),"dataset": oDataSet,"feeds": [feedItem1,feedItem2],"iConfig" : "{applicationSet:'fiori'}","selectData": this._dataSelect.bind(this)
        })
        this.setAggregation("_vizFrames",vizFrame);


    },_dataSelect: function(oEvent) {


    },renderer: function(oRM,oControl) {
        oRM.write("<div");
        oRM.writeControlData(oControl);
        oRM.addClass("customVizFrame");
        oRM.writeClasses();
        oRM.write(">");
        oRM.renderControl(oControl.getAggregation("_vizFrames"));

        oRM.write("</div>");
    }
  });
});

在登录view.xml中

<mvc:View xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m"
    controllerName="view.Login" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:l="sap.ui.layout" xmlns:f="sap.ui.layout.form" xmlns:cViz="NWS.control">
  <Page title="{i18n>Title}" >
    <content>
      <VBox class="sapUiSmallMargin">
         <cViz:shadowCharts frameType="donut" 
                            flattenedData="{gDataModel>/milk}"     
                            dimensionDefinationData="{Store Name}"                     
                            measureDefinationData="{Revenue}" />
      </VBox>
    </content>
  </Page>
</mvc:View>

调试时的错误(在init函数中)是传递绑定数据..正如我所知

this.getFrameType() as "bar" but not "donut",this.getFlattenedData() as ""

可能它与属性类型有关.

请帮助我满足要求

解决方法

我在朋友的帮助下想出了这个问题.

所以这里的问题是我们无法在init函数中获取属性值,所以我将代码转移到渲染器函数.

chartController.js

sap.ui.define([
"sap/ui/core/Control","sap/viz/ui5/controls/common/feeds/FeedItem"],gFeeds) {
"use strict";

return Control.extend("NWS.control.shadowCharts",{

    "metadata": {
        "properties": {
            "value": {
                "type": "float"

            },"frameType": {
                "type": "string"
            },"flattenedData": {
                "type": "string"
            },"dimensionDefinationData": {
                "type": "string"

            },"measureDefinationData": {
                "type": "string"

            },"height": {
                "type": "string"

            },"width": {
                "type": "string"

            },"press":{
                "type":"string"
            }
        },"visibility": "hidden"
            }

        },"events":{
            press:{}
        }
    },init: function() {
      this.getControlInstance=this;
    },_dataSelect: function(oEvent) {

          this.fireEvent("press");

    },oControl) {

        var oDataSet = new sap.viz.ui5.data.FlattenedDataset({
            "data": {
                "path": oControl.getFlattenedData()
            },"dimensions": [{
                "name": oControl.getDimensionDefinationData(),"value": "{"+oControl.getDimensionDefinationData()+"}"
            }],"measures": [{
                "name": oControl.getMeasureDefinationData(),"value": "{"+oControl.getMeasureDefinationData()+"}"
            }]
        });
        var gType=oControl.getFrameType();
        var measureUid="";
        var dimesionUid="";
        switch(gType){
            case "donut":measureUid="size";dimesionUid="color";break;
            case "bar":measureUid="valueAxis";dimesionUid="categoryAxis";break;
            default:throw "error beacause of unknown graph type"

        }
        var feedItem1 = new sap.viz.ui5.controls.common.feeds.FeedItem({
            "uid": measureUid,"values": [oControl.getMeasureDefinationData()]
        });
        var feedItem2 = new sap.viz.ui5.controls.common.feeds.FeedItem({
            "uid": dimesionUid,"values": [oControl.getDimensionDefinationData()]
        });
        var vizFrame = new sap.viz.ui5.controls.VizFrame({
            "vizType": oControl.getFrameType(),"iConfig": "{applicationSet:'fiori'}","selectData": oControl._dataSelect.bind(oControl.getControlInstance)
        })
            vizFrame.setVizProperties({

                    title: {
                        visible: false,text: 'Statastics'
                    }
                });
        oControl.setAggregation("_vizFrames",vizFrame);
        oRM.write("<div");
        oRM.writeControlData(oControl);
        oRM.addClass("customVizFrame");
        oRM.writeClasses();
        oRM.write(">");
        oRM.renderControl(oControl.getAggregation("_vizFrames"));

        oRM.write("</div>");
    }
});});

所以我在xml中的控制器用法是:

<cViz:shadowCharts frameType="bar" flattenedData="/milk" dimensionDefinationData="Store Name" measureDefinationData="Revenue" press="shadowChartsClick"></cViz:shadowCharts>

有优化的余地:-)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读