どうやら「MicrosoftTeams.×××」という式でTeamsから色々と情報を取得できるようです。
Teams見たいならTeams見ろや、アプリで見させる意味って何だよ、と思う人間なのでどういう業務に使えるかは分かりませんが。
いつか必要になるかもしれませんし。
式で取得できる情報は知っておきたい。
ということで、レッツチャレンジ☆
完成図と仕様

上のコンボボックスでチームを選択。
下のコンボボックスでチャネルを選択。
2つが揃ったタイミングで垂直ギャラリーに投稿メッセージの一覧を表示。
ギャラリー内に表示しているのは、投稿日時(JST)、投稿者、件名です。
ユーザー投稿の場合は投稿者が表示されますが、ボット投稿の場合は空欄。
件名がない投稿は空欄。
データ
Appsのデータで「Teams」をデータソースとして追加します。
スクリーン
名称:Screen2
| プロパティ | OnVisible |
|---|
ClearCollect(colTeams2, { id:"", displayName:"", description:"" }); RemoveIf(colTeams2, true);
ClearCollect(colChannels2, { id:"", displayName:"", description:"" }); RemoveIf(colChannels2, true);
ClearCollect(colMsgs2,
{
id:"", replyToId:"", subject:"", summary:"",
body:{ contentType:"", content:"" },
createdDateTime: DateTimeValue("1900-01-01T00:00:00Z")
}
); RemoveIf(colMsgs2, true);
ClearCollect(colTeams2, MicrosoftTeams.GetAllTeams().value);- colTeams2 というコレクションを作成
- 空データを入れて、コレクションの構造を定義
※id(識別子)、displayName(チーム名)、description(チームの説明) - RemoveIf(colTeams2, true)で空データを削除
- 上記と同様に「colChannels2」というチャネル用のコレクションを作成して初期化
- 上記と同様に「colMsgs2」というメッセージ用のコレクションを作成して初期化
- bodyにはcontentType(テキスト形式など)、content(本文)などを設定
- createdDateTimeを日付型に変換するため、DateTimeValueで1900年1月1日を設定
- Teamsから取得したすべてのチーム情報をcolTeams2に格納
チーム一覧を選択するコンボボックス
名称:cboTeam_1
DisplayFields
備忘:どのフィールド(列)を画面上に表示するか指定するプロパティ
["displayName"]InputTextPlaceholder
備忘:何も入力してないときボックスに表示されるテキスト
"チーム名"Items
colTeams2NoSelectionText
備忘:何も選択されていない時に表示されるテキスト
(InputTextPlaceholderと同じようなプロパティ)
"チーム名"OnChange
備忘:cboTeam_1が変更されたときに働く式
Reset(cboChannel_1);
Clear(colChannels2);
If(
!IsBlank(cboTeam_1.Selected.id),
ClearCollect(
colChannels2,
MicrosoftTeams.GetChannelsForGroup(cboTeam_1.Selected.id).value
)
);- 前回選択したチャネルをクリアます
- colChannels2に格納されたチャネル一覧をすべて削除します
- コンボボックス(cboTeam_1)が選択されている場合のみclearcollectが働くようにします
※チーム名を変更したときは変更後のチャネルがまだ取得されていないため、この式がないとエラーになります - 指定したチームIDに属するチャネル一覧を取得します
- clearcollectで、取得したチャネル一覧をcolChannels2に保存します
SearchFields
["displayName"]SelectMultiple
備忘:複数選択を許可するか否か
falseチャネル一覧を選択するコンボボックス
名称:cboChannel_1
| DisplayFields | [“displayName”] |
|---|---|
| DisplayMode | // cboTeam_1が何も選択されていない場合は無効化 If(IsBlank(cboTeam_1.Selected), DisplayMode.Disabled, DisplayMode.Edit) |
| InputTextPlaceholder | “チャネル名” |
| Items | colChannels2 |
| NoSelectionText | “チームを選択してください” |
| SearchFields | [“displayName”] |
| SelectMultiple | false |
Messageの一覧を表示
ギャラリーを挿入します
名称:Gallery3_1
プロパティ:Items
If(
IsBlank(cboTeam_1.Selected.id) || IsBlank(cboChannel_1.Selected.id),
FirstN(
Table(
{
id: "",
replyToId: "",
subject: "",
summary: "",
body: { contentType: "", content: "" },
from: { user: { displayName: "" } },
createdDateTime: DateValue("2000-01-01")
}
),
0
),
MicrosoftTeams.GetMessagesFromChannel(
cboTeam_1.Selected.id,
cboChannel_1.Selected.id
).value
)- cboTeam_1かcboChannel_1のどちらかが空欄である場合は次を実行します
- 空っぽのテーブルを返します
ギャラリーには何も表示しませんが、構造は保ちます - コンボボックスが両方選択されている場合、選ばれたチームのIDと選ばれたチャネルのIDに対応するメッセージ一覧を取得して表示します(レコードの配列)
Gallery3_1のレコード表示設定
1行に以下のようなアイテムを挿入表示しています
| コントロール | コントロール名 | 表示内容 | Textプロパティ |
|---|---|---|---|
| テキストラベル | daytime | 投稿日時 | Text(ThisItem.createdDateTime, “yyyy/mm/dd hh:mm”,”ja-JP”) |
| テキストラベル | msgName | 投稿者 | ThisItem.from.user.displayName |
| テキストラベル | Label5 | 件名 | ThisItem.subject |
| アイコン | NextArrow2_1 | - | これはOnselectに設定します UpdateContext({ ctxMessageId: Text(ThisItem.id)}); Select(Parent) |
単純に投稿一覧だけであれば最後のアイコンやOnselectは不要です
設定完了
上記で設定は完了です。
変更していないコントロール名が結構あるため、分かりにくいかもしれません。
Copilotと試行錯誤しながらだったため、今となっては不要な式もあると思われますが、ご容赦ください。
あと細かいデザイン(Height、Width、X、Y)は好みで調整してください。
また、ここでは投稿一覧を表示させるところまでで終了ですが、投降を1つ選択したらメイン画面にそのスレッドが表示される設定に挑戦中です。
