今回は、クエリビルダのExpression:拡張表現の関数群の中から、MS Teamsにメッセージを送る関数を使用して、簡単にWebインターフェースからメッセージを送ってみようと思います。
前準備
ChannelLink使用時の認証設定
Expression:拡張表現でChannelLinkを利用してメッセージを送信する場合は、使用する関数にMicrosoft Graph API認証情報を直接渡すことができます。しかし、クエリの中にその都度設定していると、変更があった場合等の管理が煩雑になってしまいます。通常はSharperlightをインストールするアプリケーションサーバーに対し、ひとつの専用認証アカウントを準備すると思うので、Sharperlight内のどこか一か所に設定できれば管理も簡単になります。これはSharperlightのサイトセットアップで実現することができます。
Sharperlightアプリケーションメニューからサイトセットアップを起動します。
サイトセットアップが起動したら、プロダクトの設定 -> システムを選択します。右側にMicorosoft Graph API用のプロパティが表示されるので必要な情報を記入します。'閉じる'ボタンで設定を保存し、Sharperlightサービスを再起動しておきます。
Webインターフェースの作成
WebインターフェースはSharperlightパブリッシャーで作成するWebレポートを使用します。
Sharperlightアプリケーションメニューからパブリッシャーを起動します。
パブリッシャーが起動したら新規
ボタンでWebレポートの作成を開始します。
レポートのダイアログが開いたら一意のコード、グループ、タイトル、レポートのタイトルを記入します。
クエリを編集
ボタンでクエリビルダを開きます。
今回はメッセージを送るためだけなのでクエリ結果は1行だけ表示されればいいです。これは送信後のメッセージを出すためだけです。
フィルター領域で製品
にシステム、テーブル
には製品を選択します。テーブルフィルターのオプションでトップn行
を1に設定。これで1行しか結果は戻ってきません。
出力領域にプロダクトId列を設定して、プレビューで結果を見てみます。よさそうです。
次にメッセージを記入させるフィールドを作成します。これはテキスト型のフィルタとしてWebレポートのプロンプトに表示させるようにします。
フィルター領域の右クリックメニューからその他 -> テキストを選択しテキスト列を追加します。
このフィルター列には範囲入力は必要ないので入力フィールドを1つにします。それには追加したフィルター列のオプションを開き、1つの値のみオプションを設定します。また、説明
はメッセージに、フィルター名
はMessageにします。
これでクエリの母体は完成です。'OK'ボタンで保存します。
レポートも適用
ボタンで保存し、ビュー
ボタンで実際のレポートがどのように表示されるか見てみます。少しお化粧直しが必要そうですが、ここまではこれで良しとします。
ChannelLinkを利用した例
ChannelLinkの使用では、Microsoft Teams側でメッセージを受け取るチャンネルのURLリンクを取得し、そのURLを使用する必要があります。今回は数チャンネルのURLを準備しておいて、Webレポートのプロンプトでどのチャンネルを利用するか選択できるようにしたいと思います。
では先ほどのクエリを再度開き、編集を開始します。
送信先チャンネル選択フィルターを作成します。フィルター領域の右クリックメニューからその他 -> テキストを選択しテキスト列を追加します。追加されたフィルター列のオプションを開きます。
フィルター名
をchannelにします。
説明
はチャンネル。
1つの値のみオプションを選択。
ドロップダウンリストの使用および説明を表示オプションを指定。
更にサブクエリーを利用して検索データを準備します。サブクエリーを編集
ボタンでクエリビルダを開きます。
Microsoft Teamsで取得した数個のチャンネルURLをカスタムデータとしてこのように定義します。
URL列
と名称列
を出力します。フィルターとして選択された場合、最初の列が選択値となるので、今回はURLが必要なのでURL列
が一番上になっています。OK
ボタンでチャンネルフィルター用のサブクエリを保存します。
検索リストに使用オプションをONにします。
以上でチャンネルフィルターのオプション設定は完了です。OK
ボタンでオプション設定を保存します。
これでフィルターの設定は終了です。
では次にExpression:拡張表現を使用して実際にメッセージを送る機能を作成します。
出力領域の右クリックメニューから拡張表現を追加
を選びます。関数群の中からMicrosoft Teams - Create Message using Channel Link - MsTeamsCreateMessage(....)を選びます。テンプレートが編集フィールドにコピーされます。
この部分は上記で述べたようにサイトセットアップで既に定義済みなのでそれを利用します。
なのでこの関数AzureGraphAccessTokenSiteSetupに置き換えます。
2番目の引数はチャンネルのURLなので、プロンプトとして設定したチャンネル列の参照名をこのように指定します。
3番目はSubject、送信タイトルみたいなものでしょうか。今回は直接記入します。
4番目がメッセージなので、プロンプトとして設定したメッセージ列の参照名を指定します。
5番目は送信するメッセージがHTML形式の場合はTrue、そうでない場合はFalseをしていします。
6番目は重要度を指定する引数です。
最後にデータ型
をTextに指定して、OK
ボタンでExpression:拡張表現を保存します。
追加したExpression:拡張表現の説明をメッセージの送信と改名します。
これでプロンプトとして選択されたチャンネル、及び入力されたメッセージがこのExpression:拡張表現に渡され、送信関数によって送信されるといった機能が完成しました。
あとは送信結果を表示するために新たにExpression:拡張表現を追加します。
以下の構文は、メッセージを送信する関数を定義したExpression:拡張表現列に、errorという文字列を含んだ返却値が返されるかどうかで送信結果を判断しています。
IIF(Instr({%メッセージの送信}, "error",0)
,"送信エラー"
,"メッセージは正常に送信されました"
)
OK
ボタンで保存します。名称を結果とします。プロダクトId列は意味を持たないので出力領域から削除して完成です。またメッセージの送信列は表示する必要が無いので非表示にします。
OK
ボタンでクエリを保存します。レポートも適用
ボタンで保存し、ビュー
ボタンでレポートを拝見してみます。ちょっと化粧直しが必要そうですね。
でも機能は良さそうです。きちんと送信されていました。
それでは少し化粧直しをします。
レポートの定義を再度開き、オプション
タブのフィルターの複数行表示
をオンにして、1行の項目
を1にします。
次に以下のCSS定義をユーザー設定のスタイル
オプションに設定します。
<style type="text/css">
#promptFieldSet > div.dataEntryItem{
width: 620px;
}
#pi2{
width: 600px !important;
}
input.promptButton.k-button{
display:none !important;
visibility:hidden !important;
}
</style>
Webhookを利用した例
今度はIncoming Webhookを利用した機能を作成していきます。先ほどのChannelLinkを利用した機能で作成したレポートを複製して、その複製されたレポートを編集していきましょう。時間の大幅な短縮になります。
パブリッシャーで先ほどのレポートを選択し、右クリックメニューから複製を選択します。
複製されたレポートを開きます。先ずクエリを編集
ボタンでクエリの編集を開始します。
Webhook方式ではチャンネルが必要ないので、チャンネル
フィルターを削除します。
出力領域に移動しメッセージを送信する関数が定義されているメッセージの送信
列を開きます。前の構文をクリアします。関数群からMicrosoft Teams - Create Message using Webhook Link - MsTeamsCreateMessageWithWebhook(...)を探し出し、テンプレートを表示します。
一度ここでこの拡張表現は保存します。
新たに拡張表現を追加して、構文欄にTeamsから取得したWebhook URLを貼り付けます。参照名をwebhookURLとします。
もう一度メッセージの送信
列を開きます。関数の最初の引数をWebhook URL
列の参照名に置き換えます。
残りの引数もこのように変更します。メッセージはフィルターのmessageを参照しています。
これでこの送信関数は完成です。
最後に結果
列の構文を編集します。このような構文を使用します。メッセージが正常に送信されると数字が戻ってくるので、IIF文を利用して正常な場合は緑のアイコン、異常があった場合は赤のアイコンを表示するようにします。
IIF( IsNumeric({%メッセージの送信})
, "_icon:RadioOptionOn"
,"_icon:RadioOptionOff"
)
最終的に、出力領域はこのようになります。
OK
ボタンでクエリを保存します。
レポートを保存する前に少しCSS定義を編集します。チャンネルフィルターを消したので少し修正が必要です。
この箇所をpi2からpi1に変更します。
適用
ボタンでレポートも保存し、ビュー
ボタンでレポートをチェックします。
メッセージを空白のまま送信すると異常が発生し、赤のアイコンが表示されました。
正常終了の場合はこのようになります。
届いたメッセージは、ほら!この通り。
以上で、Webレポートを利用したMicrosoft Teamsにメッセージを送る機能の検証を終わります。
では、失礼します。