M365/SharePoint Online搜索结果中AdaptiveCard v1.3语法问题求助
核心背景说明
SharePoint Online搜索自定义结果的AdaptiveCard v1.3模板使用的表达式引擎并非完全兼容Azure Bot Service的自适应表达式规范,这是你遇到函数大小写、部分函数不生效的根本原因,以下是针对性解决方法:
一、函数失效与大小写问题修正
1. 日期相关函数
- 格式化日期:放弃Azure文档的
formatDateTime,改用SharePoint专属的format-date函数,语法示例:"${format-date($item/Created, 'yyyy-MM-dd HH:mm:ss')}" - 日期解析:必须使用全大写的
DATE(),而empty()需小写,这是SharePoint引擎的特殊实现,无需纠结与Azure文档的差异。
2. 条件判断与字符串转换函数
- 条件判断:使用
if()函数,但必须用${}包裹表达式,且字段引用需加$前缀,示例:"${if(empty($item/Description), '无描述信息', $item/Description)}" - 字符串转小写:替换
toLower为to-lower(),示例:
同理,转大写用"${to-lower($item/Title)}"to-upper(),所有字符串处理函数均采用短横线分隔命名。
二、两种数据绑定语法的差异
SharePoint搜索模板支持两种绑定方式,适用场景不同:
- 直接字段绑定:
{{$item/FieldName}},仅用于简单展示字段原始值,无需函数处理,比如:"{{$item/Title}}" - 表达式绑定:
${<表达式内容>},用于需要函数处理、逻辑判断的场景,所有带函数的操作必须用这种语法,不能和{{}}混用。
三、记事本编写的实用技巧
因为无开发环境,编写时可遵循以下规则降低出错概率:
- 先写最小化测试模板(比如仅包含一个日期格式化和一个条件判断),让工程师部署验证生效后再扩展
- 确认搜索索引中字段的内部名称(而非显示名称),比如
Created而非“创建时间”,字段名称错误会导致函数失效 - 所有表达式必须严格用
${}包裹,函数名称严格遵循SharePoint的命名规则(短横线分隔、部分函数大小写固定)
内容的提问来源于stack exchange,提问作者Adrian K
相关产品推荐
相关产品推荐

