VBおじさん の Power Apps:③Accessのようなアプリを作ってみる
VB/Access に親しんだ方を「 VBおじさん」と呼びます。私も VBおじさん です。共に生き残りましょう!
こんにちはさまのすけです。
さて今回は Access のようなアプリをサクッと作ってみます。ここでは、Dataverseでテーブルを作る場合の素朴な疑問やできた画面の確認をします。
ただ、世の中には動画で詳しく1からアプリを作る手順がたくさんありますので、そちらを見た方が親切です。こんな風に検索でたくさん動画が出てきます。吉田さんのとか。
それでも一応記事を作るのは2つほどポイントがあるためと、最近PowerAppsもCDSをDataverseに変えたりエンティティをテーブルと名称変更していたりするので、手順を追って作成する記事を作りました。
【Accessのようなアプリを作ってみる】
Accessのようなアプリを作ってみる、とは具体的には Dataverse(旧Common Data Service)をバックエンドにしたアプリ、ということです。初めにテーブル(旧エンティティ)を作ってしまえばあとから簡単にフォームが作成できます。本当に簡単に。
今回作るのはベタな日報報告用のアプリです。
【テーブル作成】
まずはテーブルを作成します。以下の通りに作りましょう(雑)
①PowerApps管理ツールから「データ」→「テーブル」→「新しいテーブル」を選択
ここの「テーブル」が、「Dataverse」と言われる領域なんですね。なんかよくわからないテーブルが最初からいっぱい入ってますが、これはCRM的に使えるように用意されたテーブルです。これは気にせずに新しいテーブルを作ります。
※さまのすけ は会社で Power Apps が使えるので画面の説明はプレミアム版になります。 Office 365 に付属する Dataverse for Teams での画面とは異なりますのでご注意ください。
以下の通りにテーブルを作成します。いわゆる日報アプリのサンプルです。
新しいテーブル
- 表示名: DR_DailyReport
- 表示名の複数形:DR_DailyReport
- 名前:DR_DailyReport
- プライマリ名の列
・表示名:Title
・名前:Title
以下入力した画面です。
で、今日のポイント1点目です。まずここで賢明な VBおじさん としては、「プライマリ名の列」をプライマリキーだろうと思いこみます。なるほどでは一意になる値にしないとなぁ、じゃぁオートナンバー型とか選ぶか。あれ、そもそも型選択できないじゃん、なにこれ、どうすればいいんだよ。。と。
実はこのプライマリ名の列とは、プライマリキーとか関係なく、主な列の名前、でございます。同じ値で重複しても全然問題ありません。事実、組み込みの「タスク」テーブルは「件名」がプライマリ列に設定されています。
40代、50代になって責任世代とか呼ばれて、いろいろなものを知らないうちに抱え込んでしまった VBおじさん たち。気が付けば昔のように体は動かず、ジムに行けば2日遅れて筋肉痛が来る。実は簡単なことも難しく考えてしまってはまってしまう。。
そう、難しく考えてはいけません。もっと楽に行きましょう。
また、本日のポイント2つ目ですが、テーブル名はアプリごとにプレフィックスを統一しておいた方が良いです。今回は例として「DR_DailyReport」 としました。日報アプリで複数のテーブルを持つなら 「DR_」で始まるテーブル名にしておくと開発がやりやすいです。Dataverse はその思想上、すべてのデータを統合するという発想なので、テーブルは同じインスタンス(環境)上でまとまっています。
【列の設定】
そして以下の列を作成してください。ちなみにすべて英語の名前にしています。デフォルトで日本語の列が入ってくるので英語にした方が使いやすいですが好みでOKです。英語にすると今度は画面の方を日本語に変更する手間もありますので一長一短です。
- 表示名/名前 : DateTime
- データ型:日時
- 必須:任意
- 表示名/名前 :ReportBy
- データ型:テキスト
- 必須:任意
- 表示名/名前 :Report
- データ型:テキスト領域
- 必須:任意
要するに日報の日時、報告者、タイトル、内容 を含むテーブル、というものです。
最もシンプルな例かと。
列をすべて作成したら、最後に「テーブルの保存」をお忘れなく。
【アプリの作成】
ぶっちゃけこのテーブルが作られればアプリの作成は本当に簡単です。
PowerApps画面で「新規」→ Common Data Serviceの「携帯電話レイアウト」をクリック。
先ほどの「DR_DailyReport」が表示されるので、それを選択して「接続」
なんかこんなアニメーションが出てきて、アプリを作ってくれます。
はい、できたのが下図です。データの追加・更新・削除等、
必要な枠組みがすべてそろってます。本当に簡単です。
これ、Accessのフォームのようなアプリですが、実際フォームコントロールを使っています。
【表示・編集フィールド追加】
そして少し手を入れましょう。DetailScreen1と EditScreen1 という2、3番目のフォームで表示・入力するコントロールを指定する必要があります。
まずは DtailScreen1 の DetailForm1 を選択します。
そしたら右画面に DetailForm1 のプロパティ情報が表示されるので、「フィールドの編集」をクリックします。すると「フィールド」という画面が現れて追加したいフィールドを選択することが可能になります。ここで、「DateTime」「Report」「ReportBy」を追加します。
上記と同じ手順を「EditScreen1 」でも行います。完成画面はこんな感じです。
はい、これで俺 Power Apps 使えるぜ! と言っても良いと思います。ですが真面目な VBおじさん としてはこんな簡単なアプリはおもちゃだ、もっとこだわりを持って作らないとだめだ、となると思いますので、次回以降はそのためのTIPSを紹介します。
ただし、ここでできたアプリがどのように動いているのかを確認していくのは理解の助けになるのでお勧めします。
VBおじさん の Power Apps:②関数なのかコードなのか、それが問題だ
VB/Access に親しんだ方を「 VBおじさん」と呼びます。私も VBおじさん です。共に生き残りましょう!
こんにちは さまのすけ です。Power Apps 使ってます。
さて、VBおじさん が考え方を改める必要があるのは、 Power Apps は関数で書かなければならない、という点です。
例えばボタンのイベントは OnSelect = XXXX という形で書かなければならないので、関数としてまとまっていなければなりません。
いやいや、それじゃボタンを押してからAとBとCという処理をしたいときどうすればいいの?
という疑問が生じますよね。はい。答えは「;」で繋げましょう。セミコロンです。
そうすると、以下のような スパゲッティ プログラムもかけます。
関数の記載ということになっているのでシンプルに書くことが重要な反面、必要に応じて行を追加してコード(のような関数!)を書いていくことができます。 こうなると VBおじさん は水を得た魚のごとく開発ができますね。
ただ、同じではないです。むしろ VBおじさん には使いにくいと思う部分も出てくるはずです。例えば...
- Select Case がない
- Do While Loopループがない
- Exit Sub/Function がない...
という感じです。プログラム言語ではないので、構文制御自体がないのはある意味設計思想というものでそういうものだ、と理解してそれなりの作り方をする必要があります。
例えば、Do While Loopループがない 、に対しては こんな記事 がありますのでご参考まで。英語記事なので機会があれば日本語で書いてみます。
・・・あれ、考え改まってないような(笑)。
やっぱりVBのように使いたい、というのは魂の奥底にあるので、それはそれで奥底に秘めて生きていきましょう。へのツッパリはいらんですよ。
VBおじさんの Power Apps : ①コントロールに値を入れるやり方が分からない!
VB/Access に慣れた人が Power Apps を使う際に陥るパターンが、
コントロールに値を入れるやり方が分からない、というものです。
Power Apps をご存じの方なら初歩ですが、 VBおじさんの最初の関門になります。
ここが分からないと挫折するので丁寧に解説します!
※便宜上、VB/Access に慣れた人を「VBおじさん」、と呼びます。
私もその一人です😀。共に頑張って生き残りましょう!
シンプルな例で説明します。まず、空の新規アプリでボタンとラベルを配置します。
【失敗例① VBの構文で書く】
で、ボタンを押したら "Hello World" と表示させたいのです。
で、ボタンの On Select がボタンのイベントだと気が付くので、そこに以下のように書いてみます。
特にエラーも出ないようなので F5 を押して実行してみるわけです。
で、動きません。まずこれで最初に「あれっ?」ときます。😑
Onselect = 処理の関数 という形にならないといけないので、VBのような書き方はできません。
【失敗例② コントロールに直接代入してみる】
「ああ、これはVBでいうプロパティのようなものだから、ここは値とか関数なんだな」とVBおじさんは気を取り直します。値代入の関数で SET というのがあるようだから、これを使おう、となります。VBおじさんは前向きです。
で、今度は SET を使ってLabelに値を代入します。
んー、なんかエラーが出てるけど気にせず F5 を押して実行します。
でもボタンを押しても思ったように動きません。
「俺は Hello World にもたどり着けないのか」 orz 😪
と、ここが挫折ポイントです。惜しい! 頑張れ VBおじさん!
今までだって力づくで何でもやってきたじゃないか。あきらめたらそこで試合終了ですよ。
【答え】
と、答えは以下のようにグローバル変数を挟む、ということなんですがこれが意外と分かりづらい。そのため逆引きで記事にしてみた次第です。
ボタンの Onselect には例えば以下のように書きます。
Set(strHelloWorld, "Hello World")
この、strHelloWorld はグローバル変数です。宣言なしで使えます。
VBおじさんはプレフィックスが好きなので文字型の str としています。
で、ラベル の Text に この変数を設定します。
で、 F5 を押して実行し、ボタンを押すとちゃんとHello Worldと出ました。
おめでとう VBおじさん!
これで Power Apps はおじさんの手足だよ! 割とマジでw
VBおじさん の Power Apps :⓪VB/Access に親しんだ人が Power Apps を始めるための大事なポイント
こんにちは。さまのすけです。Power Apps 使ってます。
Powe Apps で自分たちに必要なアプリを自分たちで作ろう、という機運が高まってます。で、かつて VB や Access VBA に親しんだという方が実際にやったら
んー、なんか思った通りに行かなくね?
いうことがしばしばあるのではないでしょうか? 私がそうでしたので。
こうしたツールはどんなものでも癖や特性があるので、それが分からないとそこで躓いて終わります。過去のツールに慣れているといろいろな違いに戸惑います。
例えば...
- ボタンを押したらキャプションの値を変えたいのに動かない
- やっぱり(必要に応じて)コード書きたい
- とりあえず最初の一歩は踏み出せたけど、自分がやりたいことと違うし、良いサンプルがない
等々。こうした躓きを少しでもなくせるようにブログを書いてみました。お役に立てば幸いです。
便宜上、VB/Access に親しんだ方を「 VBおじさん」と呼ぶことにします。
私も VBおじさん です。共に頑張って生き残りましょう!
VBおじさん の Power Apps 目次(都度更新予定)
- ⓪Power Apps を始めたい
- ①コントロールに値を入れるやり方が分からない!
- ②関数なのかコードなのか、それが問題だ
- ③Accessのようなアプリを作ってみる
- ④テーブルをいじってデータ更新を直接行いたい
- ⑤それでもスマホアプリを使いたい
- ⑥Formコントロールを使わずにデータ更新したい
- ⑦イベントを理解したい
- ⑧パラメータテーブルを作って初期値を取りたい
- ⑨サブルーチンが欲しい
- ⑪VBの Exit Sub/Function 的なやり方は?
- ⑫VBの Do While/Loop 的なやり方は?
- ⑬VBの Select Case 的なやり方は?
※書きたい順番で書いていきますので必ずしも順番通りになりません。あしからず。