この記事では、 クライアント API を使用してモデル駆動型アプリ ページからカスタム ページに移動する例を示します。 モデル駆動型アプリでカスタム ページをフル ページ、ダイアログ、またはペイン ビューとして開く方法について説明します。
この記事では、クライアント API を使用して、フル ページ、ダイアログ、またはウィンドウとしてカスタム ページを開く手順について説明します。
navigateTo (クライアント API リファレンス) のpageType値としてのカスタムの例を示します。
Important
カスタム ページは、製品が大幅に変更された新機能です。 現在、 カスタム ページの既知の問題に関するページで説明されているいくつかの既知の制限があります。
論理名を検索する
次の各クライアント API の例では、必要なパラメーターとしてカスタム ページの論理名を受け取ります。 論理名は、ソリューション エクスプローラーのページの Name 値です。
コンテキストなしでインライン フル ページとして開く
モデル駆動型アプリ クライアント API イベント ハンドラー内で、次のコードを呼び出し、 name パラメーターをページの論理名に更新します。
// Inline Page
var pageInput = {
pageType: "custom",
name: "<logical name of the custom page>",
};
var navigationOptions = {
target: 1
};
Xrm.Navigation.navigateTo(pageInput, navigationOptions)
.then(
function () {
// Called when page opens
}
).catch(
function (error) {
// Handle error
}
);
レコード コンテキストを含むインライン フル ページとして開く
この例では、recordId 関数内の パラメーターを使用して、使用するレコードをカスタム ページに提供します。
// Inline Page
var pageInput = {
pageType: "custom",
name: "<logical name of the custom page>",
entityName: "<logical name of the table>",
recordId: "<record id>",
};
var navigationOptions = {
target: 1
};
Xrm.Navigation.navigateTo(pageInput, navigationOptions)
.then(
function () {
// Called when page opens
}
).catch(
function (error) {
// Handle error
}
);
カスタム ページ内の Param 関数は値を取得し、Lookup 関数を使用してレコードを取得します。
App.OnStart=Set(RecordItem,
If(IsBlank(Param("recordId")),
First(<entity>),
LookUp(<entity>, <entityIdField> = GUID(Param("recordId"))))
)
Important
recordId パラメーターは GUID である必要があります。URL が更新され、URL からアプリが開始されると、recordIdが GUID であることが検証されるためです。
中央に配置されたダイアログとして開く
モデル駆動型アプリ クライアント API イベント ハンドラー内で、次のコードを呼び出し、 name パラメーターをカスタム ページの論理名に更新します。 このモードでは、 メイン フォーム ダイアログと同様のサイズ設定パラメーターがサポートされます。
// Centered Dialog
var pageInput = {
pageType: "custom",
name: "<logical custom page name>",
};
var navigationOptions = {
target: 2,
position: 1,
width: {value: 50, unit:"%"},
title: "<dialog title>"
};
Xrm.Navigation.navigateTo(pageInput, navigationOptions)
.then(
function () {
// Called when the dialog closes
}
).catch(
function (error) {
// Handle error
}
);
サイド ダイアログとして開く
モデル駆動型アプリ クライアント API イベント ハンドラー内で、次のコードを呼び出し、 name パラメーターをカスタム ページの論理名に更新します。
// Side Dialog
var pageInput = {
pageType: "custom",
name: "<logical page name>",
};
var navigationOptions = {
target: 2,
position: 2,
width: {value: 500, unit: "px"},
title: "<dialog title>"
};
Xrm.Navigation.navigateTo(pageInput, navigationOptions)
.then(
function () {
// Called when the dialog closes
}
).catch(
function (error) {
// Handle error
}
);
レコード ID を持つ完全なページとしてグリッドのプライマリ フィールド リンクから開く
この例では、recordId 関数内の パラメーターを使用して、使用するレコードをカスタム ページに提供します。 カスタム ページ内の Param 関数は値を取得し、 Lookup 関数を使用してレコードを取得します。
より完全な例については、「 エンティティ バインド グリッド内のデータ行の既定の開いている動作をオーバーライドする」を参照してください。
JScript 型の Web リソースを作成し、name パラメーターを論理ページ名に更新します。 Web リソースに次のコードを追加します。
function run(selectedItems) { let selectedItem = selectedItems[0]; if (selectedItem) { let pageInput = { pageType: "custom", name: "<logical page name>", entityName: selectedItem.TypeName, recordId: selectedItem.Id, }; let navigationOptions = { target: 1 }; Xrm.Navigation.navigateTo(pageInput, navigationOptions) .then( function () { // Handle success } ).catch( function (error) { // Handle error } ); } }テーブル リボン CommandDefinition をOpenRecordItem用にカスタマイズして、関数をより早く呼び出し、値 SelectedControlSelectedItemReferences を持つ CrmParameter を含めます。
<CommandDefinition Id="Mscrm.OpenRecordItem"> <Actions> <JavaScriptFunction FunctionName="run" Library="$webresource:cr62c_OpenCustomPage"> <CrmParameter Value="SelectedControlSelectedItemReferences" /> </JavaScriptFunction> </Actions> </CommandDefinition>カスタム ページで、 app の OnStart プロパティをオーバーライドして、
Param関数を使用してrecordIdレコードとlookupレコードを取得します。App.OnStart=Set(RecordItem, If(IsBlank(Param("recordId")), First(<entity>), LookUp(<entity>, <entityIdField> = GUID(Param("recordId")))) )注
OnStartプロパティを変更した後、アプリのコンテキスト メニューからOnStartを実行する必要があります。 この関数は、セッション内で 1 回だけ実行されます。その後、カスタム ページで RecordItem パラメーターをレコードとして使用できます。 次の例は、 EditForm で使用する方法を示しています。
EditForm.Datasource=<datasource name> EditForm.Item=RecordItem
編集可能グリッド内で選択したレコードから、レコード ID の中央に表示されるダイアログとして開く
編集可能なグリッドを使用して、ビュー内の特定のレコードを選択した後にアクションを実行する場合に OnRecordSelect イベントをトリガーします。 この例では、recordId 関数内の パラメーターを使用して、使用するレコードをカスタム ページに提供します。
getId オブジェクトの メソッドは、レコード ID を取得します。 カスタム ページ内の Param 関数は値を取得し、 lookup 関数を使用してレコードを取得します。
テーブルで編集可能なグリッド コントロールを有効にします。
JScript 型の Web リソースを作成し、name パラメーターを論理ページ名に更新します。 Web リソースに次のコードを追加します。
function RunOnSelected(executionContext) { // Retrieves the record selected in the editable grid var selectedRecord = executionContext.getFormContext().data.entity; var Id = selectedRecord.getId().replace(/[{}]/g, ""); // Centered Dialog var pageInput = { pageType: "custom", name: "<logical page name>", recordId: Id, }; var navigationOptions = { target: 2, position: 1, width: { value: 50, unit: "%" }, title: "<dialog title>" }; Xrm.Navigation.navigateTo(pageInput, navigationOptions) .then( function () { // Called when the dialog closes } ).catch( function (error) { // Handle error } ); }カスタム ページで、 app の OnStart プロパティをオーバーライドして、
Param関数を使用してrecordIdレコードとlookupレコードを取得します。App.OnStart=Set(RecordItem, If(IsBlank(Param("recordId")), First(<entity>), LookUp(<entity>, <entityIdField> = GUID(Param("recordId")))) )注
OnStartプロパティを変更した後、アプリのコンテキスト メニューからOnStartを実行する必要があります。 この関数は、セッション内で 1 回だけ実行されます。その後、カスタム ページで RecordItem パラメーターをレコードとして使用できます。 次の例は、 EditForm で使用する方法を示しています。
EditForm.Datasource=<datasource name> EditForm.Item=RecordItem
関連資料
モデル駆動型アプリのカスタム ページの概要
モデル駆動型アプリにカスタム ページを追加する
navigateTo (クライアント API リファレンス)