モデル駆動型アプリ内でアプリ内通知を送信する
通知テーブルには、各ユーザーの通知が格納されます。 モデル駆動型アプリは、システムの新しい通知を自動的にポーリングし、通知センターに表示します。 通知の送信者またはシステム管理者は、通知の表示方法と通知の拒否方法を構成できます。 通知は、受信者が通知を却下するか、期限切れになるまで通知センターに表示されます。 既定で、通知は 14 日後に期限切れになりますが、管理者はこの設定を上書きできます。
各通知行は、所有者 列の値によって識別される単一のユーザーを対象としています。 複数のユーザーに通知を送信する必要がある場合は、受信者ごとにレコードを追加する必要があります。 送信者は、所有者 列を介して受信者をコントロールします。
このトピックは、クライアント API を使用して特定のユーザーにアプリ内通知を送信する方法の概要を示しています。
アプリ内通知機能を有効にする
アプリ内通知機能を使用するには、アプリ内通知 設定を有効にする必要があります。 この設定は、モデル駆動型アプリ内に保存されます。
Power Apps にサインインします。
モデル駆動型アプリを含むソリューションを開きます。
モデル駆動型アプリを選択し、編集 の分割メニューをクリックして、最新のアプリ デザイナーを使用して開きます
設定 を開いて、今後の予定 に切り替えます
"アプリ内通知" を有効にします

保存 をクリックして設定の変更を保存します
モデル駆動型アプリで 公開 をクリックする
基本アプリ内通信の送信
通知システムはテーブルを使用するため、任意のテーブル機能を使用して新しい通知を作成できます。

次の例では、通知テーブルと通知レコードを使用して通知を作成します。
アプリ内通知は、createRecord API を使用して送信できます。
var systemuserid = "Guid of the user";
var notificationRecord =
{
"title": "Welcome",
"body": "Welcome to the world of app notifications!",
"ownerid@odata.bind": "/systemusers(" + systemuserid + ")",
"icontype": 100000000, // info
"toasttype": 200000000 // timed
}
// Create notification record
Xrm.WebApi.createRecord("appnotification", notificationRecord).
then(
function success(result) {
console.log("notification created with ID: " + result.id);
},
function (error) {
console.log(error.message);
// handle error conditions
}
);
通知ポーリング
アプリ内通知は、ポーリングを使用して、アプリの実行中に定期的に通知を取得します。 モデル駆動型アプリの開始時、および最後の取得が 1 分以上前である限り、新しい通知はページ ナビゲーションが発生したときに取得されます。 ユーザーがページに長時間滞在すると、新しい通知が取得されます。
通知テーブル
以下は 通知 (appnotification) テーブルの列です。
| 列表示 | 列名 | 説明 |
|---|---|---|
| タイトル | title |
通知のタイトル。 |
| 所有者 | ownerid |
通知を受信するユーザー。 |
| 本文 | body |
通知に関する詳細。 |
| IconType | icontype |
事前定義されたアイコンのリスト。 既定値は Info です。 詳細については、このトピックの後半にある通知アイコンの変更に移動してください。 |
| トーストの種類 | toasttype |
通知動作のリスト。 既定値は Timed です。 詳細については、このトピックの後半にある通知動作の変更に移動してください。 |
| 有効期限 (秒) | ttlinseconds |
通知がまだ却下されていない場合に、通知を削除する必要が生じるまでの秒数。 |
| データ | data |
拡張性と通知へのより豊富なデータの解析に使用される JSON。 最大文字数は 5,000 文字です。 |
重要
appmoduleidフィールドは使用されないため、通知エンティティに設定しないでください。
通知動作の変更
トースト タイプ を次のいずれかの値に設定することで、アプリ内通知の動作を変更できます。
| トーストの種類 | 動作 | 価値 |
|---|---|---|
| タイム | 通知は短時間 (既定は 4 秒) 表示された後、消えます。 | 200000000 |
| 非表示 | 通知は通知センターにのみ表示され、トースト通知としては表示されません。 | 200000001 |
通知アイコンの変更
アイコン タイプ を次のいずれかの値に設定することで、アプリ内通知アイコンを変更できます。 カスタム アイコンを使用する場合は、data パラメーター内の iconUrl パラメーターを指定します。
| アイコンの種類 | 値 | 画像 |
|---|---|---|
| 情報 | 100000000 |
|
| 成功 | 100000001 |
|
| エラー | 100000002 |
|
| 警告 | 100000003 |
|
| 参照投稿 | 100000004 |
|
| カスタム | 100000005 |
タイトルと本文でマークダウンを使用する
データ フィールドは、マークダウン ベースの限定されたサブセットを使用して、タイトルと本文の単純な文字列をオーバーライドすることをサポートします。
以下は、サポートされているマークダウンです。
| テキスト スタイル | Markdown |
|---|---|
| 太字 | **Bold** |
| 斜体 | _Italic_ |
| 箇条書きリスト | - Item 1\r- Item 2\r- Item 3 |
| 番号付きリスト | 1. Green\r2. Orange\r3. Blue |
| ハイパーリンク | [Title](url) |
\n\n\n\n を使用して本文に改行を含めることができます。
通知リンクのナビゲーション ターゲットを変更する
ナビゲーション リンクを開く場所を制御するには、navigationTarget パラメーターを設定します。
| ナビゲーション ターゲット | 動作 | 例 |
|---|---|---|
dialog |
中央ダイアログで開きます。 | "navigationTarget": "dialog" |
inline |
既定。 現在のページで開きます。 | "navigationTarget": "inline" |
newWindow |
新規ブラウザー タブで開きます。 | "navigationTarget": "newWindow" |
通知のセキュリティの管理
アプリ内通知機能では 3 つのテーブルが使用されます。 ユーザーが通知を受信し、自分自身または他のユーザーに通知を送信するには、適切なセキュリティ ロールが必要です。
| 使用状況 | テーブル特権が必要です |
|---|---|
| ユーザーにはアプリ内通知ベルがないため、アプリ内通知を受け取りません | なし: アプリ通知テーブルの読み取り権限。 |
| ユーザーはアプリ内通知を受け取ることができる |
|
| ユーザーはアプリ内の通知を自分に送信できる | 基本: アプリ通知テーブルの作成および読み取り権限。 |
| ユーザーはアプリ内の通知を他のユーザーに送信できる | 受信ユーザーのビジネス ユニットに基づいて、アプリ通知テーブルのローカル、ディープ、またはグローバル アクセス レベルで特権を読み取ります。 |
通知記憶域
アプリ通知テーブルは、組織のデータベース ストレージ容量を使用します。 このため、送信される通知の量と有効期限の設定を考慮することが重要です。 詳細情報: Microsoft Dataverse の記憶域容量
例
次の例は、アクション、カスタム本文定義、およびカスタム アイコンを含む通知を作成する方法を示しています。
タイトルと URL を持つアクションによる通知
この例は、タイトルと URL を アクション パラメーターに追加して、通知を作成する方法を示しています。
{
"data": {
"actions": [
{
"title": "Open Bing",
"data" : {
"url": "https://bing.com"
}
}
]
}
}
1 つのアクションを含む通知
この例は、1 つのアクションを アクション パラメーターに追加して、通知を作成する方法を示しています。

var systemuserid = "<user-guid>";
var notificationRecord =
{
"title": "Congratulations",
"body": "Your customer rating is now an A. You resolved 80% of your cases within SLA thi week and average customer rating was A+",
"ownerid@odata.bind": "/systemusers(" + systemuserid + ")",
"icontype": 100000001, // success
"data": JSON.stringify({
"actions": [
{
"title": "View cases",
"data": {
"url": "?pagetype=entitylist&etn=incident&viewid=00000000-0000-0000-00aa-000010001028&viewType=1039"
}
}
]
})
}
Xrm.WebApi.createRecord("appnotification", notificationRecord).
then(
function success(result) {
console.log("notification created with single action: " + result.id);
},
function (error) {
console.log(error.message);
// handle error conditions
}
);
複数のアクションを含む通知
この例は、複数のアクションを含む通知を作成する方法を示しています。

// Notification with multiple actions as center dialog
var systemuserid = "<user-guid>";
var notificationRecord =
{
"title": "Upcoming Service Reminder",
"body": "This is to inform you that you have an upcoming service request for your vehicle.",
"ownerid@odata.bind": "/systemusers(" + systemuserid + ")",
"icontype": 100000000, // info
"data": JSON.stringify({
"actions": [
{
"title": "Coho Winery",
"data": {
"url": "?pagetype=entityrecord&etn=account&id=b0a19cdd-88df-e311-b8e5-6c3be5a8b200",
"navigationTarget": "dialog"
}
},
{
"title": "Service Appointment",
"data": {
"url": "?pagetype=entityrecord&etn=appointment&id=96db3cf0-e605-ec11-94ef-000d3a36469a",
"navigationTarget": "dialog"
}
}
]
})
}
Xrm.WebApi.createRecord("appnotification",notificationRecord).
then(
function success(result) {
console.log("notification created with multiple actions: " + result.id);
},
function (error) {
console.log(error.message);
// handle error conditions
}
);
カスタム本文定義による通知
この例は、インライン リンクを含むカスタム本文定義を追加して通知を作成する方法を示しています。

var systemuserid = "<user-guid>";
var notificationRecord =
{
"title": "SLA critical",
"body": "Records assigned to you is critically past SLA.",
"ownerid@odata.bind": "/systemusers(" + systemuserid + ")",
"icontype": 100000002, // failure
"data": JSON.stringify({
"body": "Case record [Complete overhaul required (sample)](?pagetype=entityrecord&etn=incident&id=0a9f62a8-90df-e311-9565-a45d36fc5fe8) assigned to you is critically past SLA and has been escalated to your manager."
})
}
Xrm.WebApi.createRecord("appnotification",notificationRecord).
then(
function success(result) {
console.log("notification created with custom body: " + result.id);
},
function (error) {
console.log(error.message);
// handle error conditions
}
);
次は、カスタム本文定義の別の例です。 これには、インライン リンクと太字の書式が含まれています。

var systemuserid = "<user-guid>";
var notificationRecord =
{
"title": "SLA Missed",
"body": "Records assigned to you is critically past SLA.",
"ownerid@odata.bind": "/systemusers(" + systemuserid + ")",
"icontype": 100000003, // warning
"data": JSON.stringify({
"body": "Case record [Average order shipment time (sample)](?pagetype=entityrecord&etn=incident&id=0a9f62a8-90df-e311-9565-a45d36fc5fe8) **assigned** to you just went out of SLA."
})
}
Xrm.WebApi.createRecord("appnotification",notificationRecord).
then(
function success(result) {
console.log("notification created with custom body and bold styling: " + result.id);
},
function (error) {
console.log(error.message);
// handle error conditions
}
);
カスタム アイコンによる通知
この例は、通知にカスタム アイコンを追加する方法を示しています. 通知内で、iconType に カスタム を設定し、本文には Web リソースを指す値を持つ iconUrl を含めます。 アイコンは、SVG または PNG ファイル タイプのいずれかです。
![]()
var systemuserid = "<user-guid>";
var notificationRecord =
{
"title": "Welcome",
"body": "Welcome to the world of app notifications!",
"ownerid@odata.bind": "/systemusers(" + systemuserid + ")",
"icontype": 100000005, // custom
"data": "{ 'iconUrl': '/WebResources/cr245_AlertOn'}"
}
Xrm.WebApi.createRecord("appnotification", notificationRecord).
then(
function success(result) {
console.log("notification created with custom icon: " + result.id);
},
function (error) {
console.log(error.message);
// handle error conditions
}
);
カスタム タイトルと本文による通知
この例では、複数のリンク、太字の書式設定、および斜体の書式設定を可能にするカスタム タイトルと本文の定義を追加します。

var systemuserid = "<user-guid>";
var notificationRecord =
{
"title": "Complete overhaul required (sample)",
"body": "Maria Campbell mentioned you in a post.",
"ownerid@odata.bind": "/systemusers(" + systemuserid + ")",
"icontype": 100000004, // mention
"data": JSON.stringify({
"title": "[Complete overhaul required (sample)](?pagetype=entityrecord&etn=incident&id=0a9f62a8-90df-e311-9565-a45d36fc5fe8)",
"body": "[Maria Campbell](?pagetype=entityrecord&etn=contact&id=43m770h2-6567-ebm1-ob2b-000d3ac3kd6c) mentioned you in a post: _\"**[@Paul](?pagetype=entityrecord&etn=contact&id=03f770b2-6567-eb11-bb2b-000d3ac2be4d)** we need to prioritize this overdue case, [@Robert](?pagetype=entityrecord&etn=contact&id=73f970b2-6567-eb11-bb2b-000d3ac2se4h) will work with you to engage with engineering team ASAP.\"_",
"actions": [
{
"title": "View record",
"data": {
"url": "?pagetype=entityrecord&etn=incident&id=0a9f62a8-90df-e311-9565-a45d36fc5fe8"
}
}
]
})
}
Xrm.WebApi.createRecord("appnotification",notificationRecord).
then(
function success(result) {
console.log("notification created with custom title and body: " + result.id);
},
function (error) {
console.log(error.message);
// handle error conditions
}
);
アプリ内通知とプッシュ通知
Power Apps 通知コネクタは、アプリ内通知とは別のプッシュ通知用です。 プッシュ通知は、アプリを開くためにモバイル デバイスの通知リストにのみ表示されます。 アプリを開くと、アプリ内通知が表示されます。 ユーザーが圧倒されないように、プッシュ通知の使用を優先度の高いアイテムに制限することをお勧めします。 詳細については、次に移動してください。
関連記事
フィードバック
フィードバックの送信と表示