跳到主要内容

视图列表动态计算列字段值

在某些业务场景下,可能需要对列表的某个字段进行动态赋值,新的值可能需要经过复杂的计算得出,平台提供了相关能力对该业务场景进行扩展。

场景示例​

我们有三个字段,两个日期字段与两个日期之间的间隔天数字段,我们想在输入两个日期后,在列表上呈现两个日期之间的天数差值。

接口配置​

我们需要配置一个接口来对我们的列表业务进行扩展。在我们字段所在对象 → 接口管理中新增接口,并对接口进行配置。

接口流程图​

配置步骤​

配置查询集合组件来查询数据集合,在查询集合组件的属性设置中勾选"输出到最终结果"。

使用C#脚本组件来对数据集合进行编辑,脚本配置如下:

using System;
using System.Linq;
using System.Collections.Generic;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Chameleon.Common;
using Chameleon.Common.Context;
using Chameleon.Common.Exceptions;
using Chameleon.Common.Models;
using Chameleon.Database;

public class ChameleonCSharpScript
{
public object Execute(ComponentContext context, IChameleonDbContext dbContext, ILogger logger)
{
var list = context.CmpResult as List<ObjectData>;

foreach(var item in list){
var date1 = Convert.ToDateTime(item["date1"]);
var date2 = Convert.ToDateTime(item["date2"]);
item["days"] = (date2 - date1).Days;
}

return null;
}
}

保存并发布流程。

扩展列表​

在列表编辑弹窗的配置区域内,使用自定义查询列表PaaS接口功能,选择我们刚才配置的接口来覆盖默认的列表行为。

结果展示​

可以看到,此时我们的列表已经根据两个日期计算出间隔的天数。

注意事项​

  • 该方案适用于需要在列表展示时动态计算字段值的场景
  • 查询集合组件需要勾选"输出到最终结果"才能将数据传递给后续组件
  • C#脚本中通过 context.CmpResult 获取上一个组件的输出结果
  • 计算后的字段值仅在列表展示时生效,不会存储到数据库
  • 确保接口已保存并发布后才能在列表中使用