🎃

Power Apps モデル駆動型アプリの編集可能グリッドの中のサブグリッドのセルを JavaScript で操作する

2022/10/30に公開

編集可能グリッドの中のサブグリッドのセルを読み取り専用にしたかったけど、すんなりできなかったのでメモとして記載する。

やりたかったこと

  • 編集可能グリッドの中のサブグリッドのセルを

  • JavaScript で読み取り専用に変える。

困ったこと

  • 以下のページにある通り、表示しているフォームのなにかを JavaScript で操作するときには、フォームコンテキストを利用する。
    https://learn.microsoft.com/ja-jp/power-apps/developer/model-driven-apps/clientapi/clientapi-form-context

  • 今回も同様に、と考えたが編集可能グリッドの中のサブグリッドのレコードが選択状態になったときの OnRecordSelected のイベントでは設定してもフォームコンテキストが取得できず(Null で渡される)、対象の処理を実行できない。

やったこと

  • 参考に記載したフォーラムの情報から、フォームコンテキスト相当のものを別の手段で取得することができたため、それを使った処理とした。
編集可能グリッドに設定するコード
const OnRecordSelectEsgrColRead =
  window.OnRecordSelectEsgrColRead || {}

function GridColRead(executionContext) {
  const myFormContext = executionContext.getFormContext()

  if (myFormContext) {

    const targetEsgrCol01 = myFormContext.getData().getEntity().attributes.getByName('ex_name').controls.getByName('ex_name') // 対象のコントロールを取得
    targetEsgrCol01.setDisabled(true) // 読み取りに変更

    const targetEsgrCol02 = myFormContext.getData().getEntity().attributes.getByName('ex_ref_account').controls.getByName('ex_ref_account') // 対象のコントロールを取得
    targetEsgrCol02.setDisabled(true) // 読み取りに変更

  }else {
    
    const targetEsgrSubCol01 = executionContext.getEventSource().attributes.getByName('ex_name').controls.getByName('ex_name') // 対象のコントロールを取得
    targetEsgrSubCol01.setDisabled(true) // 読み取りに変更

    const targetEsgrSubCol02 = executionContext.getEventSource().attributes.getByName('ex_dt_start_date').controls.getByName('ex_dt_start_date') // 対象のコントロールを取得
    targetEsgrSubCol02.setDisabled(true) // 読み取りに変更

  }

}
OnRecordSelectEsgrColRead.GridColRead = GridColRead

参考

https://community.dynamics.com/365/f/dynamics-365-general-forum/439725/executioncontext-getformcontext-returns-null-value

余談

プレビューになってる Power Apps グリッドコントロールには、グリッドの中のサブグリッドの設定はなさそう。
なくなるのかな。。。
と思ったらありました。忘れられてるかもだけど。
https://learn.microsoft.com/ja-jp/power-platform-release-plan/2022wave2/power-apps/grid-control-support-grouping-aggregation-nested-grids

Discussion