

記事の監修
S.Sato
記事の監修
S.Sato
マネジメント&イノベーション事業部 開発部/2グループ グループマネージャー
資格:Microsoft Offiece Specialist Master 2007、ITパスポートなど
2022年よりMicrosoft365とPowerPlatformの案件を担当。
それ以前は業務・Web系システムを要件定義からリリースまでの開発に従事。
IT業界歴15年の経験を活かし、PJを牽引し後続の育成にも力を注ぐ。
趣味は散歩で、思考が煮詰まった際には、近所の緑道を散歩し、新たな発見や自然からのインスピレーションを受けている。
Contents
目次
0.はじめに
私(K.Yoshida)は入社後、主に.Net系言語(VB.Net、C#.Net)で開発・保守・運用するエンジニアとして十数年従事していました。2024年からMS系のローコード開発に従事しています。
10年以上オープン系言語に携わっていたので、MS系のローコード開発スタート直後は慣れないこともあり、いろいろな失敗がありました。
今回はその中の一例をご紹介しようと思います。
普通のプログラム言語だと思って設計・開発に臨むと、とっても痛い目を見たので反面教師として参考にしてください。
10年以上オープン系言語に携わっていたので、MS系のローコード開発スタート直後は慣れないこともあり、いろいろな失敗がありました。
今回はその中の一例をご紹介しようと思います。
普通のプログラム言語だと思って設計・開発に臨むと、とっても痛い目を見たので反面教師として参考にしてください。
1.データフローの使い勝手
Power AppsでExcelファイルをアップロードし、Power Platformのデータフロー機能を用いてDataverse に Excelシートの入力値を登録する仕組みを構築したい。
オープン言語で考えるならば、Excel操作にはC#で「Microsoft.Office.Interop.Excel」ライブラリなどを一般的に利用します。
Excelシートからデータを取得し、DataTableに保存することで入力チェックやDBへの登録など実装者がある程度自由に構築可能です。
しかし、Power Platformではそう簡単にはいきません。
複雑な入力チェックを Power Platform で実現することが困難でした。
Excelシートからデータを取得し、複数行組み合わせてチェックする必要がある場合、何を使うのがよいのか?
データを集計してチェックする必要があるため、データフロー(Power Query)を利用できると考えて実装を進めました。
何とか入力チェック自体は実現できました。しかし、ここで別の問題が生じました。
データフローは別々のユーザが同時に起動することができません。
ユーザAがExcelをアップロードしている間にBがアップロードすると、Aのファイルをデータフローでチェックしている間、Bはずっと処理待ちになってしまいます。
データフローをクラスと同じものと考えていたので呼び出し元が異なればそれぞれで動くことを期待していたが無理でした。
これでは、ABCD…と複数人のユーザが一斉にExcelをアップロードした場合、最後の人は人数分の待ち時間が積み重なってしまうため、実運用には耐えられないでしょう。
(実際には同時に複数人が実行することはまれだと思いますが・・・)
オープン言語で考えるならば、Excel操作にはC#で「Microsoft.Office.Interop.Excel」ライブラリなどを一般的に利用します。
Excelシートからデータを取得し、DataTableに保存することで入力チェックやDBへの登録など実装者がある程度自由に構築可能です。
しかし、Power Platformではそう簡単にはいきません。
複雑な入力チェックを Power Platform で実現することが困難でした。
Excelシートからデータを取得し、複数行組み合わせてチェックする必要がある場合、何を使うのがよいのか?
データを集計してチェックする必要があるため、データフロー(Power Query)を利用できると考えて実装を進めました。
何とか入力チェック自体は実現できました。しかし、ここで別の問題が生じました。
データフローは別々のユーザが同時に起動することができません。
ユーザAがExcelをアップロードしている間にBがアップロードすると、Aのファイルをデータフローでチェックしている間、Bはずっと処理待ちになってしまいます。
データフローをクラスと同じものと考えていたので呼び出し元が異なればそれぞれで動くことを期待していたが無理でした。
これでは、ABCD…と複数人のユーザが一斉にExcelをアップロードした場合、最後の人は人数分の待ち時間が積み重なってしまうため、実運用には耐えられないでしょう。
(実際には同時に複数人が実行することはまれだと思いますが・・・)
2.その問題への回避策
一般的なアプリと同じようにファイルアップロードから入力チェックや登録処理を並列で動作させることは難しいので別々の処理にすることで回避しました。
まず、Power Apps の画面からファイルアップロードだけを実行するように仕様を変更します。
このとき、ファイルをアップロードした操作ユーザの情報と併せて保存することで誰がアップロードしたかを後から追いかけることができるようにしておいてください。
その後、アップロードしたファイルを Power Automateなどで作業フォルダに移動し、作業フォルダにて入力チェック用のデータフローを実行します。
もしくは、そもそもアップロード画面を作成せず、 SharePoint リストなどでファイルを添付し、 Power Automate を実行するフローにしても良いかもしれません。
次は、入力チェック用のデータフローを実行し、入力チェックの結果をエラー情報のDataverseに格納してください。
エラーが無かった場合は登録用のデータフローを実行するように Power Automateを組んでみましょう。
これにより、データフローの処理完了後、Dataverse にエラー情報が登録されている場合、エラー内容を伝えるメッセージを Teams やメールに送信することができます。
また、Dataverse にエラー情報の登録件数が0件の場合、本来登録するデータの登録結果件数などをTeams やメール送信することができます。
よって、アップロードしたユーザを画面の前で長時間待たせることなくファイルアップロードから入力チェック及びデータ登録が可能になります。
まず、Power Apps の画面からファイルアップロードだけを実行するように仕様を変更します。
このとき、ファイルをアップロードした操作ユーザの情報と併せて保存することで誰がアップロードしたかを後から追いかけることができるようにしておいてください。
その後、アップロードしたファイルを Power Automateなどで作業フォルダに移動し、作業フォルダにて入力チェック用のデータフローを実行します。
もしくは、そもそもアップロード画面を作成せず、 SharePoint リストなどでファイルを添付し、 Power Automate を実行するフローにしても良いかもしれません。
次は、入力チェック用のデータフローを実行し、入力チェックの結果をエラー情報のDataverseに格納してください。
エラーが無かった場合は登録用のデータフローを実行するように Power Automateを組んでみましょう。
これにより、データフローの処理完了後、Dataverse にエラー情報が登録されている場合、エラー内容を伝えるメッセージを Teams やメールに送信することができます。
また、Dataverse にエラー情報の登録件数が0件の場合、本来登録するデータの登録結果件数などをTeams やメール送信することができます。
よって、アップロードしたユーザを画面の前で長時間待たせることなくファイルアップロードから入力チェック及びデータ登録が可能になります。
3.まとめ
ファイルアップロードからデータチェック、エラー有無に応じた処理などはオープン言語開発では基本的な考えですが、ローコード開発においてはそのまま実現することは困難かつ、制約などが多くあるため現実的ではありません。
複雑な仕様を構築せず、単純な機能単位に分散して作り上げることを考えてみてください。
複雑な仕様を構築せず、単純な機能単位に分散して作り上げることを考えてみてください。

Microsoftを導入して
コスト効率をよくしたい

Microsoftに関して
気軽に聞ける相談相手が欲しい

Microsoftを導入したが、うまく活用できていない・浸透していない

社内研修を行いたいが
社内に適任者がいない
Bizwindでは、Microsoft導入支援事業などを中心に
IT・DX推進に関する様々なご相談を承っております。
ご相談・お見積りは無料です。まずはお気軽にお問い合わせください。