如何对ServiceNow目录项中的MRVS数据进行求和/总计
ServiceNow目录项MRVS数据求和实现方案
核心思路
通过客户端脚本实时读取MRVS(多行变量集)的每行数据,累加指定数值字段的内容,最终将总和显示在目录项的指定字段中,实现实时总计效果。
具体操作步骤
1. 配置基础字段
- 在目标目录项里新增一个数字/单行文本字段(比如命名为
total_sum),用来展示最终的求和结果 - 确认你的MRVS里已经有需要求和的数值类型字段(比如每行的金额字段
line_price)
2. 编写OnChange客户端脚本
创建一个触发源为MRVS变量集的OnChange脚本,代码如下:
function onChange(control, oldValue, newValue, isLoading) { if (isLoading) return; // 替换为你实际的MRVS变量名和求和字段名 const mrvsName = "你的MRVS变量名称"; const sumField = "line_price"; const totalField = "total_sum"; let total = 0; const mrvsData = g_form.getValue(mrvsName); if (mrvsData) { const rows = JSON.parse(mrvsData); rows.forEach(row => { const val = parseFloat(row[sumField]); if (!isNaN(val)) total += val; }); } // 保留两位小数,按需调整格式 g_form.setValue(totalField, total.toFixed(2)); }
3. 补充OnLoad脚本(可选)
如果需要页面加载时就自动计算现有MRVS数据的总和,添加一个OnLoad类型的客户端脚本:
function onLoad() { const mrvsName = "你的MRVS变量名称"; const sumField = "line_price"; const totalField = "total_sum"; let total = 0; const mrvsData = g_form.getValue(mrvsName); if (mrvsData) { const rows = JSON.parse(mrvsData); rows.forEach(row => { const val = parseFloat(row[sumField]); if (!isNaN(val)) total += val; }); } g_form.setValue(totalField, total.toFixed(2)); }
效果验证
配置完成后,用户在MRVS中新增行、删除行或者修改每行的数值时,总计字段会自动同步更新为所有行的数值总和,符合你期望的实时计算需求。
内容的提问来源于stack exchange,提问作者Mr world wide
相关产品推荐
相关产品推荐

