You need to enable JavaScript to run this app. mgt-person能否将presence activity设为行属性及获取方法
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.05 10:36:07