當我們在開發app的時候,很多時候需要選擇一個用戶,比如我們開發一個審批的app,就要選擇審批人,所以這個app就需要實現選擇人的界面,而且需要獲取完整的用戶列表,但是要獲取完整的用戶列表又需要app擁有較高的權限。通常企業的IT部門不太愿意把這種權限給到app。
不過,好在Teams已經為我們考慮到這點,Teams提供了一個很好用的功能:People Picker。我們先來看一下代碼:
const peoplePickerInputs: PeoplePickerInputs = { ... };microsoftTeams.people.selectPeople((err: microsoftTeams.SdkError, people: PeoplePickerResult[]) =>{if (error) {const extraErrorMessage = error.message ?? '';let errorMessage;switch (error.errorCode) {case 100: // NOT_SUPPORTED_ON_PLATFORMerrorMessage = '當前平臺不支持此API';break;case 500: // INTERNAL_ERRORerrorMessage = '內部錯誤';break;case 4000: // INVALID_ARGUMENTSerrorMessage = '參數錯誤';break;case 8000: // USER_ABORTerrorMessage = '用戶取消操作';break;case 9000: // OLD_PLATFORMerrorMessage = '平臺太老,不支持此API';break;default:errorMessage = '未知錯誤';break;}output('發生錯誤:' + errorMessage + ' ' + extraErrorMessage);}output(JSON.stringify(people));},peoplePickerInputs
);
可以看到,這個接口比較簡單,但是不知道為什么目前微軟的文檔里對這個介紹的不詳細,我們直接找到JS SDK的代碼:https://github.com/OfficeDev/microsoft-teams-library-js/blob/master/src/public/people.ts
namespace people {export function selectPeople(callback: (error: SdkError, people: PeoplePickerResult[]) => void,peoplePickerInputs?: PeoplePickerInputs,): void {..................}export interface PeoplePickerInputs {title?: string;setSelected?: string[];openOrgWideSearchInChatOrChannel?: boolean;singleSelect?: boolean;}export interface PeoplePickerResult {objectId: string;displayName?: string;email?: string;}
}
selectPeople 有兩個參數第一個參數是一個callback,當用戶選擇人結束后,或者用戶取消了操作,這個回調函數就會被調用到。
第二個參數是一個配置,有這么一些值:
- title
可選,選擇人的界面標題,默認值是:Select people
- setSelected
可選,設置已經選擇的人員。這是一個 AzureAD ID的數組
- openOrgWideSearchInChatOrChannel
可選,表明是否在整個組織里選擇人員,默認值是 false。如果是 false,就是根據當前這個 app 的所在上下文,如果 app是安裝到channel,那選擇的就是channel里的人,如果安裝到的是 chat,那選擇的是這個chat里的人。
- singleSelect
可選,表明是否選擇一個人,還是多個人。默認值是 false
當用戶選擇完人員后,我們的代碼就可以拿到一個 PeoplePickerResult 的數組,這個數組包含了用戶選中的所有人,針對每一個人,有這些信息:
- objectId
這個是人的 AAD ID,和上面 setSelected 是一樣的概念
- displayName
選擇的人的顯示名字
選擇的人的郵箱地址