PowerApps|JSで未保存時のみ保存する方法~モデル駆動型・OnLoad~

PowerAppsのモデル駆動型アプリで、
組み込みのJavaScriptを使用しているときに、フォームが未保存時のみ保存して、保存されているときは保存しないようにしたいことがあります。

ただ、壁となるのが

OnLoad時に実行している関数である場合、保存すると再びOnLoadでトリガーされた関数が実行されてしまうということです。(無限ループ)

これを回避するためには、未保存時のみフォームを保存することによって、
常にOnLoadにトリガーされた関数の無限ループを回避することができます。

今回は、フォームが未保存時のみに保存する処理を入れるJavaScriptのコードの記述方法について紹介していきます。

目次(クリックで読みたい部分にジャンプできます)

【結論】未保存を検出して、保存処理を行う

では、早速結論のコードです。

今回は、未保存を検出して「未保存だった場合のみ」に保存処理を行います。

// この関数をイベントハンドラーとして設定することで、特定のアクション時に自動的に実行されます
function saveFormIfDirty(executionContext) {
    const formContext = executionContext.getFormContext();
    // フォームが変更されているかをチェックします
    if (formContext.data.entity.getIsDirty()) {
        // 変更されている場合、フォームを保存します
        formContext.data.save()
            .then(
                function () {
                    console.log("フォームは正常に保存されました。");
                },
                function (error) {
                    console.log("フォームの保存中にエラーが発生しました: " + error.message);
                }
            );
    } else {
        console.log("変更がないため、フォームは保存されませんでした。");
    }
}

formContext.data.entity.getIsDirty()

formContext.data.entity.getIsDirty()では、対象のフォームに変更状態があるのか(未保存なのか)を検出します。

ある場合は、trueを返します。

なので、ある場合のみに保存処理を入れることができ、ループを回避できるのです。

まとめ

今回は、モデル駆動型でのJavaScriptで、未保存時のみ保存する処理を書く方法について紹介しました。

特定の関数では、保存されていないと実行できない処理もあります。

そのときに今回の未保存時のみ実行する処理を設置してもらえると、処理がうまくいくと思いますので、参考にしてみてください。

(Visited 76 times, 1 visits today)