Skip to main content

Schema 案例:外部报表

可以将外部做好的报表以名称/url 的形式存入此 schema。在问答时直接嵌入答案卡片,并且支持在 url 中传参。

Schema 示例如下:

{
"_id": "report",
"name": "外部报表",
"type": "event",
"fallback": {
"property": "名称"
},
"properties": [
{
"name": "日期",
"type": "timestamp",
"ui": {
"show_in_detail_only": true
},
"constraints": {
"required": true
},
"_sid": "48SmSvvrVzvXPZumj1TW212",
"_id": "timestamp",
"is_comparable": false,
"ignore_in_execution": true
},
{
"name": "ID",
"type": "ID",
"ui": {
"show_in_detail_only": true
},
"constraints": {
"unique": true,
"required": true
},
"_sid": "48SmSvvrVzvXPZumj1TW_",
"_id": "ID",
"is_comparable": false
},
{
"name": "截图",
"type": "image",
"_sid": "qRl62Pnm3hBejvkGfVfw3",
"_id": "pic",
"is_comparable": false
},
{
"name": "名称",
"type": "name",
"constraints": {
"required": true,
"unique": true
},
"_sid": "es9Y2yBJS337T8E-7tM1k",
"_id": "name",
"is_comparable": false,
"is_name": true
},
{
"name": "简称",
"type": "name",
"_sid": "wefwqefvbq343-7tM1k",
"_id": "alias",
"is_comparable": false,
"is_name": true,
"isArray": true
},
{
"name": "简介",
"type": "string",
"_sid": "LjgaQfK6qoy7nhfP0fpov",
"_id": "description",
"is_comparable": false,
"is_name": false,
"is_categorical": false
},
{
"name": "标签",
"type": "tag",
"_sid": "gNeDgRbvxSRVLnuSaUPyp",
"_id": "tag",
"isArray": true,
"is_comparable": false,
"is_categorical": true,
"is_name": false
},
{
"name": "链接",
"type": "url",
"constraints": {
"required": true
},
"_sid": "H3KdFMc54r707WZ6of1iu",
"_id": "url",
"is_comparable": false
}
],
"modality": {
"detail": {
"config": {
"inline": true,
"property": "链接",
"querys": "(lf, entity, {moment}) => {const querys = {}; if(lf.query.日期 && lf.query.日期.$gte) {querys.p_date = moment(lf.query.日期.$gte).format('YYYY-MM-DD')\n}\n\nreturn querys;}",
"height": 600
},
"type": "url"
}
}
}

关于如何在 url 中传参

见 👆schema 示例中的modality.detail.config.querys配置项。此配置项里面是一个函数,输入 logicform 以及一些帮助函数。输出为一个 query 的字典,来声明应该在 url 中填入什么样的参数。

如该函数返回

{
"key1": "value1",
"key2": "value2"
}

那么最终生成的 url 就会是形如:

https://xxx.com/path?key1=value1&key2=value2

补充说明: 上文 👆 示例中的modality.detail.config.querys配置项,具体的逻辑是把 logicform 中的 query 的日期筛选条件,转化为和外部报表约定好的日期参数,这样可以让外部报表显示所需时间的数据。

关于权限

  • 因为是iframe链接,所以如果该用户之前在浏览器端登录过外部链接,那么不需要重新登录。否则需要在iframe里面再登录一次
  • 另外一种解决方案是,iframe的时候在url地址里面增加参数给到目标报表平台,例如加密后的用户token。可以通过modality.detail.config.querys配置项实现