如何消除SharePoint三状态工作流任务标题中计算列值前的string;#前缀?
我之前也踩过这个SharePoint的坑——计算列在列表视图里显示完全正常,一放到三状态工作流的任务标题里就自动带上string;#前缀,还不能用SharePoint Designer来调整。给你几个不用SPD的实用解决/规避方案:
方案1:优化计算列公式,强制输出纯文本
虽然你试过多种拼接方法,但可以针对选项列的存储特性调整公式,确保输出无编码的纯文本:
- 基础公式示例:
CONCATENATE([Office], " | ", [Position ID]) - 关键设置:务必将计算列的返回类型设为「单行文本」(不要选「选项」或其他类型)
如果还是出现前缀,试试用TEXT函数把选项列的取值强制转成纯文本格式:
TEXT([Office],"@") & " | " & [Position ID]
TEXT([Office],"@")会直接提取选项列的显示值并转为纯文本,避免工作流读取到SharePoint内部的编码格式。
方案2:用Power Automate同步合并值到普通单行文本列
如果计算列的方法始终行不通,我们可以绕开计算列,用Power Automate(原Microsoft Flow)生成一个干净的文本列:
- 在目标列表里新建一个单行文本列,比如命名为
Task Title Content - 创建Power Automate流,触发条件设为「当列表项创建或修改时」
- 在流中添加「更新项目」动作,把
Task Title Content的值设置为:@{triggerBody()?['Office/Value']} | @{triggerBody()?['PositionID']}(其中Office/Value是选项列的显示值字段,PositionID是你单行文本列的内部名称) - 保存流后,新创建或修改的列表项会自动同步合并后的值到这个新列
- 最后在三状态工作流的任务标题中选择这个
Task Title Content列,就不会出现前缀问题了
方案3:临时规避——修改工作流通知模板(需权限)
如果你有站点集或站点的设计权限,可以直接修改工作流任务通知的显示模板:
- 找到
Workflows\Tasks列表中的对应通知模板 - 编辑模板内容,添加字符串替换逻辑,把
string;#前缀替换为空 - 比如在模板中使用
replace(@title, 'string;#', '')这类语法(具体语法需根据模板类型调整,比如ASPX或HTML模板)
这个方法需要一定权限,但如果前两个方案都不适用,可以尝试。
内容的提问来源于stack exchange,提问作者Joe Marinucci
相关产品推荐
相关产品推荐

