接触記録
会計記録
MainContextコンポーネントは、1つ以上のRecordContexts、SubGrids、またはManyToManyLookupEditorsをカプセル化し、それらすべてにわたる保存、更新、検証、ダーティステートの追跡を座標化するために使われます。
MainContextは以下の子コンポーネントのいずれかの組み合わせを含みます。
RecordContext — 編集のために単一のDataverseレコードをラップします。SubGrid — 関連記録のコレクションを表示・管理します。ManyToManyLookupEditor — 多対多の関係を管理。<MainContext>
<RecordContext table="contact" id={contactId}>
<TextEdit columnName="firstname" />
<TextEdit columnName="lastname" />
</RecordContext>
<RecordContext table="account" id={accountId}>
<TextEdit columnName="name" />
</RecordContext>
</MainContext><MainContext>
<RecordContext Record="@_contact">
<TextEdit ColumnName="firstname" />
<TextEdit ColumnName="lastname" />
</RecordContext>
<RecordContext Record="@_account">
<TextEdit ColumnName="name" />
</RecordContext>
</MainContext>MenuBar内に変更を永続化できるSaveContextButtonを含めること。保存ボタンをクリックすると、すべての子コンポーネントにわたるすべてのダーティレコードがDataverseへの単一のトランザクションリクエストにまとめて保存されます。もしレコードが保存に失敗した場合、トランザクション全体がロールバックされ、変更は永続化されません。
<MainContext>
<MenuBar>
<SaveContextButton />
<RefreshContextButton />
</MenuBar>
<RecordContext table="contact" id={contactId}>
<TextEdit columnName="firstname" />
</RecordContext>
<RecordContext table="account" id={accountId}>
<TextEdit columnName="name" />
</RecordContext>
</MainContext><MainContext>
<MenuBar>
<SaveContextButton />
<RefreshContextButton />
</MenuBar>
<RecordContext Record="@_contact">
<TextEdit ColumnName="firstname" />
</RecordContext>
<RecordContext Record="@_account">
<TextEdit ColumnName="name" />
</RecordContext>
</MainContext>保存されていない変更を破棄し、Dataverseからレコードを再ロードできる RefreshContextButton を含めること。保存されていない変更がある場合は、リフレッシュが行われる前に確認ダイアログが表示されます。
デフォルトでは、 MainContext は保存前にすべての子コンポーネントを検証します。 ForceSuccessfulValidationBeforeSave を false に設定してこの動作を無効にしてください。
<MainContext forceSuccessfulValidationBeforeSave={false}>
<SaveContextButton />
<RecordContext table="account" id={accountId}>
<TextEdit columnName="name" />
</RecordContext>
</MainContext><MainContext ForceSuccessfulValidationBeforeSave="false">
<MenuBar>
<SaveContextButton />
</MenuBar>
<RecordContext Record="@_record">
<TextEdit ColumnName="name" />
</RecordContext>
</MainContext>MainContextは、IsDirtyプロパティを通じて、子コンポーネントに保存されていない変更があるかどうかを自動的に追跡します。保存されていない変更がある状態でユーザーがページから離れようとすると、確認ダイアログが表示されます。DisableUnsavedChangesWarningをtrueに設定して、ナビゲーション変更時にこのダイアログを抑制してください。この設定に関係なく、リフレッシュ時に常に警告が表示されます。
<MainContext warnOnUnsavedChanges={false}>
<MenuBar>
<SaveContextButton />
<RefreshContextButton />
</MenuBar>
<RecordContext table="account" id={accountId}>
<TextEdit columnName="name" />
</RecordContext>
</MainContext><MainContext DisableUnsavedChangesWarning="true">
<MenuBar>
<SaveContextButton />
<RefreshContextButton />
</MenuBar>
<RecordContext Record="@_record">
<TextEdit ColumnName="name" />
</RecordContext>
</MainContext>OnBeforeSaveコールバックを使って、セーブ操作前にカスタムロジックを実行してください。セーブを進めないようにCancelEventArgs.Cancelをtrueに設定してください。
function MyPage() {
const onBeforeSave = async () => {
// カスタム検証やロジックを実行してください。
// セーブを中止するために投げる:
// 新しいエラー('Validation failed')を投げる;
};
return (
<MainContext onBeforeSave={onBeforeSave}>
<SaveContextButton />
<RecordContext table="account" id={accountId}>
<TextEdit columnName="name" />
</RecordContext>
</MainContext>
);
}<MainContext OnBeforeSave="OnBeforeSave">
<MenuBar>
<SaveContextButton />
</MenuBar>
<RecordContext Record="@_record">
<TextEdit ColumnName="name" />
</RecordContext>
</MainContext>
@code {
private async Task OnBeforeSave(CancelEventArgs eventArgs)
{
// カスタム検証やロジックを実行する
// 必要に応じてセーブをキャンセルしてください:
// eventArgs.Cancel = true;
}
}以下の例は、2つのRecordContexts、保存・リフレッシュボタンを備えたMenuBar、そしてカスタムOnBeforeSaveハンドラーを持つMainContextを示しています。
名称 | 種類 | デフォルト | 概要 |
|---|---|---|---|
ChildContent | RenderFragment? | この文脈でレンダリングされる子コンポーネント。 | |
DisableUnsavedChangesWarning | bool? | trueに設定すると、ページから離れる際に未保存の変更警告ダイアログが表示されません。 この設定に関係なく、リフレッシュ時に常に警告が表示されます。 明示的に設定されていない場合、その値は親コンテキストから継承されます。 | |
ForceSuccessfulValidationBeforeSave | bool | True | 記録の検証が成功してから保存を許可した場合、 |
IsDirty | bool | False | このコンテキストや登録済みの子に保存されていない変更があるかどうかを示します。 |
ParentContext | MainContext? | 最も近い祖先であるMainContextにより、ネストされたコンテキスト階層が可能になりました。 |
ChildContentDisableUnsavedChangesWarningForceSuccessfulValidationBeforeSaveIsDirtyParentContext名称 | 種類 | 概要 |
|---|---|---|
OnBeforeSave | EventCallback<CancelEventArgs> | コールバックから電話がかかってきて、セーブ前に電話がかかってきた。セーブ操作をキャンセルすることが可能です。 |
OnBeforeSave名称 | パラメータ | 種類 | 概要 |
|---|---|---|---|
GetRequests | List<OrganizationRequest> | このコンテキストおよびその子コンテキストからの保留中のセーブリクエストをすべて収集し、返します。 | |
RefreshAsync | bool forceRefresh | Task | このコンテキストと登録済みのすべての子コンポーネントを更新します。 |
ResetState | void | このコンテキストおよび登録されたすべての子の変更をリセットします。 | |
SaveAsync | bool? refresh | Task<bool> | コンテキストと子コンテキスト(グリッド、レコードなど)を保存してください。 |
Validate | bool | このコンテキストと登録済みのすべての子コンポーネントを検証します。 |
GetRequestsRefreshAsyncResetStateSaveAsyncValidate