mgt-person能否将presence activity设为行属性及获取方法
React版Microsoft Graph Toolkit中mgt-person组件读取Presence Activity字段的实现
内置行属性的能力边界
- mgt-person组件的
line1-property/line2-property/line3-property配置项,原生仅支持绑定Person实体的顶层字段,比如displayName、jobTitle、department这类直接挂载在Person对象根节点的属性,不支持点路径形式的嵌套取值。 - 直接写
line2-property="presence.activity"不会生效:组件解析属性时只会匹配Person对象的顶层键名,传入嵌套路径时会查找名为presence.activity的顶层字段,最终返回空值。
实现Presence Activity行展示的方案
自定义行渲染内容
开启showPresence开关后,组件会自动调用Graph接口拉取对应人员的完整Presence实体数据,无需手动请求。可以通过组件提供的自定义渲染入口,直接把Presence的activity字段值绑定到第二行的展示内容上:
参考代码(适配React组件的camelCase属性命名规则)
import { MgtPerson } from '@microsoft/mgt-react'; function PersonWithActivityLine() { return ( <MgtPerson personQuery="someone@something.com" showPresence={true} view="threelines" line1Property="displayName" personCard="hover" // 自定义第二行的渲染逻辑 renderLine2={(dataContext) => { // 渲染上下文包含组件加载完成后的完整person、presence数据 return <span>{dataContext.presence?.activity ?? '状态未知'}</span> }} /> ) }
自定义枚举值映射
如果不需要直接展示原始的activity字符串(比如原始值OnACall),需要转换为更易读的本地化文案,可以在自定义渲染逻辑中增加一层映射关系:
// 定义原始枚举到展示文案的对应关系 const activityTextMap = { Available: '在线可用', OnACall: '正在通话', Away: '暂时离开', DoNotDisturb: '请勿打扰', Offline: '离线' } // 替换渲染时的取值 const displayText = activityTextMap[dataContext.presence?.activity] ?? '状态未知'
注意点
- 只要授权账号持有基础的Presence读取权限,开启
showPresence后组件会自动拉取对应数据,不需要额外编写Graph请求逻辑。 - 这种自定义渲染的方式完全兼容组件自带的人员卡片悬浮效果、Presence头像角标等原生能力,不会破坏原有组件的交互逻辑。
内容的提问来源于stack exchange,提问作者Dan Newton
相关产品推荐
相关产品推荐

