给参数赋值

<< Click to Display Table of Contents >>

当前位置:  设计可视化分析报告 > 参数 

给参数赋值

复制链接

1. 可以通过编辑参数dialog给参数赋默认值

2. 可以通过参数弹出窗口给参数赋值,参见参数弹出窗口

3. 可以通过报告上的参数组件给参数赋值

4. 可以通过报告上的脚本给参数赋值

如param['参数名'] = 参数值

5. 可以通过报告上参数->组件传参,给参数传绑定的数据列的值。

6. 调度任务里,可以通过收集参数,对收集到的参数赋值,可以通过脚本给使用资源(数据集、报告、实验)里的参数赋值。

7. 通过url给参数赋值,参见部署与集成 > Web页面集成 > 资源相关

8. 超链接中传递数据列的值给某个参数或通过内嵌参数传固定的值给某个参数。

9. 外部页面可以通过前端接口给报告的参数赋值,比如平台通过Iframe集成了永洪时,可以通过此功能将参数值传递给Iframe中的报告。格式参考:

window.postMessage(JSON.stringify({

   action: 'EmitYHEvent',

 

   params: [{name: 'aa', multi: true, values: ['a', 'b', 'c']}] //aa为参数名,a、b、c为参数值

}), '*');

10. 用户通过自定义前台参数,将系统信息或报告页面信息等传递给参数赋值。

示例

获取系统用户位置经纬度值。

通过js定义参数获取位置信息,并将该文件放置bihome(如“GetLocation.js”),在此方法中定义了“?{getYHLocationLat}”获取纬度值和“?{getYHLocationLng}”获取经度值。在bi.properties 文件中配置external.resources=GetLocation.js。

示例代码如下:

/*

* Copyright 2011 Yonghong Technology Corp, Inc. All rights reserved.

* Yonghong Technology Corp PROPRIETARY/CONFIDENTIAL. Use instanceof subject to license terms.

*/

 

/**

* 用于用户定位

*/

class GISMapLocate {

  static LOCATE_FAILED = 0; // 定位失败

  static LOCATE_FAILED_TIME_OUT = 1; // 定位失败,定位超时

  static LOCATE_FAILED_POSITION_UNAVAILABLE = 2; // 定位失败,定位不可用

  static LOCATE_FAILED_PERMISSION_DENIED = 3; // 定位失败,没有权限,定位被拒绝

  static LOAD_LOCATE_MAP_FAILED = 4; // 加载用于定位的地图服务失败

 

  static INSTANCE = null;

 

  constructor(location, lastLocateTime) {}

 

  /**

   * 获取用户的位置

   * 使用 BMapGL1.0 实现

   *

   * isLat 纬度

   * @returns

   */

  static getUserLocation = async(isLat) => {

     // 10分钟内返回上一次定位的经纬度坐标

     const cachedLocation = await GISMapLocate.getCacheLocation(isLat);

 

     if(cachedLocation) {

        return Promise.resolve(cachedLocation);

     }

 

     await GISMapLocate.waitForLocateMapLoad("https://api.map.baidu.com/api?type=webgl&v=1.0", window._getYHCfgFront("baiduKey"));

 

     return new Promise((resolve, reject) => {

        if(!window.BMapGL) {

           reject(GISMapLocate.LOAD_LOCATE_MAP_FAILED);

 

           return;

        }

 

        const geolocation = new window.BMapGL.Geolocation();

        // 开启SDK辅助定位

        geolocation.enableSDKLocation();

        geolocation.getCurrentPosition(async(r) => {

           const status = geolocation.getStatus();

 

           switch(status) {

           case 0: {

              const point = `${r.point.lng},${r.point.lat}`;

              GISMapLocate.INSTANCE = new GISMapLocate(point, Date.now());

              const result = isLat ? r.point.lat : r.point.lng;

              resolve(result);

 

              break;

           }

           case 6: {

              reject(GISMapLocate.LOCATE_FAILED_PERMISSION_DENIED);

 

              break;

           }

           case 2: {

              reject(GISMapLocate.LOCATE_FAILED_POSITION_UNAVAILABLE);

 

              break;

           }

           case 8: {

              reject(GISMapLocate.LOCATE_FAILED_TIME_OUT);

 

              break;

           }

           default: {

              reject(GISMapLocate.LOCATE_FAILED);

 

              break;

           }

           }

        }, {

           enableHighAccuracy: true, // 是否要求浏览器获取最佳效果,同浏览器定位接口参数。默认为false

           timeout: 10000, // 超时时间,单位为毫秒。默认为10秒

           maximumAge: 600000, // 允许返回指定事件内的缓存结果,单位为毫秒。如果为0,则每次请求都获取最新的定位结果。默认为10分钟

           SDKLocation: true, // 是否开启SDK辅助定位

        });

     });

  };

 

  /**

   * 获取缓存的用户定位的位置信息,返回值为Promise包裹的坐标

   */

  static async getCacheLocation(isLat) {

     return GISMapLocate.INSTANCE && GISMapLocate.INSTANCE.shouldUseCacheLocation() ? isLat ?

        GISMapLocate.INSTANCE.location.split(',')[1] : GISMapLocate.INSTANCE.location.split(',')[0] : null;

  }

 

  /**

   * 等待BMapGL加载完成

   * @private

   */

  static waitForLocateMapLoad(url, key) {

     let count = 0;

 

     return new Promise((resolve) => {

        if(window.BMapGL && document.body.locateMap) {

           resolve();

 

           return;

        }

 

        GISMapLocate.loadScript(url, key);

 

        const interval = setInterval(() => {

           if((window.BMapGL && document.body.locateMap) || count++ >= 20) {

              clearInterval(interval);

              resolve();

           }

        }, 1000);

     });

  }

 

  /**

   * 加载 script

   * @param url

   * @param key

   * @private

   */

  static loadScript(url, key) {

     const script = document.createElement("script");

     script.type = "text/javascript";

     script.src = `${url}&callback=locateMapInit&ak=${key}`;

 

     const callbackScript = document.createElement("script");

     callbackScript.type = "text/javascript";

     callbackScript.innerHTML = "function locateMapInit() {document.body.locateMap = true;}";

     document.body.appendChild(callbackScript);

     document.body.appendChild(script);

  }

 

  /**

   * 是否需要使用缓存的定位地址

   * 10分钟内返回上一次定位的经纬度坐标

   *

   * @private

   */

  shouldUseCacheLocation() {

     return (Date.now() - this.lastLocateTime < 600000);

  }

}

 

// 纬度

window.getYHLocationLat = () => GISMapLocate.getUserLocation(true);

// 经度

window.getYHLocationLng = () => GISMapLocate.getUserLocation(false);