视图列表动态计算列字段值
在某些业务场 景下,可能需要对列表的某个字段进行动态赋值,新的值可能需要经过复杂的计算得出,平台提供了相关能力对该业务场景进行扩展。
场景示例
我们有三个字段,两个日期字段与两个日期之间的间隔天数字段,我们想在输入两个日期后,在列表上呈现两个日期之间的天数差值。
接口配置
我们需要配置一个接口来对我们的列表业务进行扩展。在我们字段所在对象 → 接口管理中新增接口,并对接口进行配置。
接口流程图
配置步骤
配置查询集合组件来查询数据集合,在查询集合组件的属性设置中勾选"输出到最终结果"。
使用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获取上一个组件的输出结果 - 计算后的字段值仅在列表展示时生效,不会存储到数据库
- 确保接口已保存并发布后才能在列表中使用