Skip to content

数据集 ​

把可复用数据封装为数据集,供表单设计下拉 / 单选 / 多选 / 级联等控件数据源引用。

新增数据集 ​

  1. 进入 数据管理 → 数据集(路由 /data-management/data-set-manage)。

  2. 点击【新增】按钮打开表单填写名称、请求方法、脚本;按需选择允许匿名、描述。

3.完成表单填写后点击【确定】按钮,新增成功后列表刷新可见。

表单字段说明:

属性名字说明
名称f_name数据集展示名称
请求方法f_method类型:GET\POST
允许匿名f_allow_anonymous开:未登录也可使用该数据集
描述f_description用途说明
脚本f_context后端 JS 正文;须设置 App.Response.Body

编辑数据集 ​

  1. 在数据集列表中选中一行,单击操作列【编辑】按钮。
  2. 在 数据集 表单中修改名称、请求方法、允许匿名、描述或脚本。
  3. 保存后重新打开引用该数据集的表单,确认选项已更新。

删除数据集 ​

  1. 选中要删除的数据集,单击操作列【删除】,按提示确认。
提示:删除前确认没有表单控件仍指向该数据集;否则运行态下拉会加载失败

数据集脚本( context) ​

数据集可以由静态数据构成也可以从关系库动态查询数据或接口请求数据组合构成。

例1:静态选项

javascript
App.Response.Body = [
  { label: '启用', value: '1' },
  { label: '停用', value: '0' },
  { label: '待审核', value: 'pending' }
];

例2:树形 / 级联选项

javascript
App.Response.Body = [
  {
    label: '华东',
    value: 'east',
    children: [
      { label: '上海市', value: 'shanghai' },
      { label: '杭州市', value: 'hangzhou' }
    ]
  },
  {
    label: '华南',
    value: 'south',
    children: [
      { label: '广州市', value: 'guangzhou' },
      { label: '深圳市', value: 'shenzhen' }
    ]
  }
];

例3:从关系库动态查出选项(默认库)

javascript
try {
  var rows = App.Services.DatabaseService.Query({
    table: 'dict_item',
    type: 1,
    columns: ['id', 'name'],
    page: { page_size: 500, page_number: 1 }
  });
  var options = [];
  for (var i = 0; i < rows.length; i++) {
    options.push({
      label: String(rows[i].name),
      value: String(rows[i].id)
    });
  }
  App.Response.Body = options;
} catch (e) {
  App.IsException = true;
  App.Helpers.Logger.Error(String(e));
  App.Response.StatusCode = 500;
  App.Response.Body = { ok: false, message: String(e) };
}

多库时第一参数传数据源逻辑名,例如 'pro_code_crm':

javascript
var rows = App.Services.DatabaseService.Query('pro_code_crm', {
  table: 'product',
  type: 1,
  columns: ['id', 'name'],
  page: { page_size: 100, page_number: 1 }
});

例4:POST 带参筛选

请求方法为 POST,且调用方传入 Body 时,可在脚本中读取 App.Request.Body:

javascript
try {
  var keyword = (App.Request.Body && App.Request.Body.keyword) || '';
  var rows = App.Services.DatabaseService.Query({
    table: 'product',
    type: 1,
    columns: ['id', 'name'],
    page: { page_size: 100, page_number: 1 }
  });
  var options = [];
  for (var i = 0; i < rows.length; i++) {
    var name = String(rows[i].name || '');
    if (keyword && name.indexOf(String(keyword)) < 0) continue;
    options.push({ label: name, value: String(rows[i].id) });
  }
  App.Response.Body = options;
} catch (e) {
  App.IsException = true;
  App.Helpers.Logger.Error(String(e));
  App.Response.StatusCode = 500;
  App.Response.Body = { ok: false, message: String(e) };
}

常见问题 ​

下拉没有选项 ​

确认控件绑定数据集;用 GET /api/{code}/v1/data-set/{id} 看脚本是否报错、Body 是否为数组。

匿名访问失败 ​

数据集【允许匿名】需开启,且站点/表单侧匿名策略允许;敏感数据不要开匿名。

脚本查不到表 ​

与关系库相同:table / 列用 map_name;多库须传数据源 map_name(如 pro_code_crm)。

白泽 ProCode 开发者文档