カテゴリー別アーカイブ: Power Apps

Uploadしたエクセルファイルを直接コレクションにする~Power Apps~

【エクセルファイルをSharepointリストなどを経由せず、直接Power Apps内で編集できるようにします】

エクセルファイルの内容をSharepointリストに反映する前に、一旦編集したいケースもあると思います

その場合、一旦Sharepointリストに反映してしまうと「削除」を行う必要がでてくるなど、やたらと時間がかかることがあります

今回はJSON形式を経由して、直接エクセルファイルの内容をPower Appsに取り込みます

記事の解説は大きく分けると、次の3つになります

・エクセルをPower Appsから始動して一旦、OneDriveに名前を変えて保存する

・エクセルファイルをJSON形式に変えてPower Appsに送信する

・Power AppsでJSON形式を通常のコレクションにする

上記のうち「エクセルをPower Appsから始動して一旦、OneDriveに名前を変えて保存する」については、お手数ですが過去の記事をご参照願います

前提条件

・Uploadするエクセルファイルの中身は最初からテーブル形式になっていること

*OfficeScriptでPower Automateのフロー内で自動的にテーブル形式にすることもできます⇒過去記事

・Uploadするエクセルファイルの列は固定であること

ファイルのアップロード及びPower Automateの起動

フォームのパーツを使用してファイルをUploadする方法は過去の記事を参照してください

今回はファイルのアップロードしてコレクションを作成するまでの間は「処理中」と表示します

この「処理中」を表示するためには、ボタンの「OnSelect」プロパティにてUpdateContext関数を組み込みます

UpdateContext関数で更新する変数はラベルのVisibleプロパティに組み込んでおきます

そして、Power Automateフローを起動する時には変数:myflowで受け取れるようにします

UpdateContext({myflow: 

             エクセルインポート.Run(

                                         {

                                         contentBytes: First(DataCardValue.Attachments).Value,                                                              

             name: First(DataCardValue.Attachments).Name

                                    }

              )

});

Power Automate内でのJSON形式への変換

ファイルの作成

Power Automateフロー内ではPower Appsから受け取ったファイルの内容を基にして、まずはOneDrive内に新たなファイルを作成します

作成されるファイル名は過去に作成したものと同じにならないように、現在時刻をファイル名に入れます

*OneDrive内では作成したファイルを削除したり、ファイル自体を上書き更新するには一定期間を空けなくてはなりません。その為、このような処理を行います

JSON形式への変更

選択アクション

UploadしたエクセルファイルをJSON形式に変換するには、データ操作コネクタの選択アクションを使用します

「表内に存在する行を一覧表示」アクションで読み込んだ内容を「選択」アクションでJSON形式に当てはめていきます

この時に「日時」と「数値」形式の内容については、関数を使用してきちんと該当の形式に変換しておきます

・日時形式 ⇒例:formatDateTime(item()[‘Date’],’yyyy/MM/dd’)

・数値 ⇒例:int(item()?[‘Sales’])

注意

「選択」アクション内で、うまく動的コンテンツでエクセルの内容を拾えないことがあります

この時は2つ対応方法があります

・動的コンテンツの工夫

通常「表内に存在する行を一覧表示」アクション内では下の画像のように、ファイルの指定内容は動的コンテンツにて指定します

選択アクションにて動的コンテンツを使用するまでは「パス」ではなく、実際のファイルパスを指定しておきます

選択アクション内で動的コンテンツを設定したら、元通り「パス」を設定し直しておきます

・式での指定

一度、コードのプレビューを見てみましょう

上の画像を見ると、開始の「value」で処理する内容は<item()?[‘列の中身’]>で抽出できることがわかります

実際に<item()?[‘列の中身’]>を使用する時は、下の画像のように「式」の中で@を入れないことも大きなポイントです

JSONの解析

JSONの形式変更の最後では「JSONの解析」アクションを使用します

スキーマは「サンプルから生成」から作成しますが、こちらは一旦「””」で設定してフローを動かして設定します

*あまりUploadするファイルの行数が多いと取得できませんので、その場合は行数が少ないサンプルファイルを使用します

フロー動かした後の出力結果をコピーし、どこかメモ帳にでもコピーしておきます

その後、サンプルから生成をクリックし、次に表示される画面にコピーしてスキーマを作成します

Power Appsへの受け渡し

作成したJSONはPower Appsに受け渡します

上の画像では「msg」としてPower Appsに受け渡しますが、Power Apps内ではそのまま「msg」では抽出できませんので注意が必要です

Power Apps内でのコレクションの作成

Power Automateから受け取ったJSONの内容は、次の画像のようになっています

コンテキスト変数内で更に「msg」を経由することで「JSONの内容」を抽出できるようになっています

このJSONからコレクションを作成するには、2つの関数を使用します

ParseJSON関数」と「ForAll関数」です

最初のParseJSON関数では、受け取ったJSON形式の内容を解析します

解析した内容には形式がありませんので、次の画像のようにTable関数でTable形式にします

Table(ParseJSON(myflow.msg))

Table関数で作成したテーブルの内容は、ForAll関数でコレクションにします

ここで注意点です

ParseJSONで解析した内容はValueで抽出します

しかも、Valueで抽出しても形式が無いので、次のようにText関数やValue関数で形式を付与します

 {  

              Product:Text(Value.Product),  

              Date:Text( Value.Date),  

              Customer:Text( Value.Customer),  

              Sales: Value(Value.Sales)   

 }

ここで、JSON形式をコレクションにする内容を全てみてみましょう

 Clear(myJson);

ForAll(

        Table(ParseJSON(myflow.msg)),

          Collect(

                    myJson,

                    {

                      Product:Text(Value.Product),

                      Date:Text( Value.Date),

                      Customer:Text( Value.Customer),

                     Sales: Value(Value.Sales)

                   }

        )

)

 まず最初に作成するコレクション:myJSONをクリアしておきます

その後に、前述のようにParseJSON関数で解析しながら、JSONの内容を全てコレクションにします

<まとめ>

今回はエクセルファイルをアップロードしてコレクションにする方法を解説しました

具体的な内容としては①エクセル⇒JSON、②JSON⇒コレクションというように2段階で変換を行うので少し重い内容となっています

但し、意外と躓きやすい箇所が他にあります

「表内に存在する行を一覧表示」のアクションです

既存の設定だと2つ注意点があります

1.出力される行数が256行に限定される

こちらは設定を変えておきましょう!

上の画像の設定をクリックすると次の画面が開きます

こちらで「しきい値」を変えると出力する行数の上限を引き上げられます

2.DateTime形式

こちらは「ISO 8601」にしておかないと、日付形式の箇所はエラーになります

「ISO 8601」の他に「Serial Number」というのもありますが、その場合は日付形式の内容を設定するには「addDays関数」を使用します

こちらについては後日、別途詳細な記事を書きたいと思います

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

ファイルのアップロードを行えるようにするアプリ作成~Power Apps~

【どうしても煩雑になりがちなファイルの管理をPower Appsで行いましょう!】

今回の記事では、Power AppsからSharepointサイトのドキュメントにファイルをアップロードするアプリを作成します

このアプリを使用することで、ファイルの保存場所を管理しやすくなります

また、手間なファイルのアップロードの処理を簡略化できます

アプリ作成はそんなに手間暇かかりません

ただし注意点がが幾つかあります

記事の中でそちらについては明記してありますので、都度ご確認の程よろしくお願いします

ポイント

今回のアプリはPower Automateのフローと連携します

添付ファイルの内容をPower AppsからPower Automateフローに渡します

Power Automateフローでは、Power Appsから受けとった添付ファイルの内容を基にして指定Sharepointサイトのドキュメントにファイルを作成します

このファイルの受け渡し方が少々、とっつきにくいです

ファイルを添付する仕組みの作成~Power Apps~

最初にPower Appsでスクリーンを2つ用意します

そのうちの1つのスクリーンでフォームを作成します

フォームのデータソースは何でも構いません

欲しいのは「添付ファイル」のパーツです

下の画像のパーツを切り取り、別のスクリーンに貼ります

別のスクリーンにパーツを貼り付けた後は、元のスクリーンは削除しましょう

次に貼り付けたパーツのプロパティを以下のように設定します

・Items ⇒Blank()
・DisplayMode ⇒DisplayMode.Edit               ・MaxAttachments ⇒1

*パーツには扱いやすい名前を付けましょう!

ファイル作成をするフローの作成~Power Automate~

トリガー

ここからPower Automateフローを作成します

トリガーはPower Appsからファイルの中身を受け取れるように「ファイルコンテンツ」を指定します

ここで重要な注意点があります

必ず3点リーダーから「フィールドを必須にします」を指定しておきます

この設定が抜けるとうまく行きませんので確実に指定しましょう!

ファイル作成

次にファイル作成アクションを作成します

サイトのアドレスとフォルダーのパスには、ファイルの保管先を指定します

問題は次からです

まずファイル名です

こちらはそのまま以下をコピーしてください

triggerBody()[‘file’][‘name’]

コピー先は下の画像の「」の箇所ですので、間違いがないように注意をお願いします

コピー後は下のOKボタンを押します

すると以下のようになります

OKボタンを押した瞬間は上の画像のように、ファイル名が関数の表示になっています

こちらはフローを実行後は表示が変わるようになっています

画像に alt 属性が指定されていません。ファイル名: image-34.png

最後にファイルコンテンツを指定します

こちらはトリガーで受け取った内容を動的コンテンツから指定します

仕上げ~Power Apps~

それでは最後にPower Appsを仕上げます

Power Automateフローを動かすボタンを作成します

こちらのボタンでは、Power Automateフローに添付ファイルの内容を渡せるようにします

添付ファイルの内容は2つあります

こちらの2つの内容の渡し方が少し癖があります

下のように{}を使用します

UploadFile_Ver1.Run(   

     {     

      ①contentBytes:First( AttachmentFile.Attachments).Value,     

      ②name:First( AttachmentFile.Attachments).Name   

}

)

上記の①②の中身ですが、下の画像の名前を使用します

①contentBytes:First( AttachmentFile.Attachments).Value

②name:First( AttachmentFile.Attachments).Name

こちらの内容については、上記の内容をそのままコピーし、パーツ名だけを変更することをおすすめします

これで指定した箇所に、Power Appsを通じてファイルを保管できるようになります

<まとめ>

今回はPower Appsを通じてファイルを指定箇所にアップロードできるようにしました

そんなにアプリ作成には時間がかからないはずですが、何点か注意点があります

・Power Automate ⇒トリガーで必ず「必須」を指定する

・Power Automate ⇒ファイル作成アクションでファイル名を記事のコピーで作成する

・Power Apps ⇒Power Automateにファイル内容を渡す際、{}を使用して2つ引数を指定する

そのままアップロードしたエクセルファイルの内容をPower Apps内で使用する場合には、テーブルを事前に作成しておけば大丈夫です!

これでファイルの管理も楽になります

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

フォームに追加、編集、登録ボタンを設定する~Gallery連携~

【DisplayModeを使いこなして、表示が可変のプロっぽいボタン作成を行う】

Power Appsのフォームにはなかなか奥深い機能があります

何回かに分けてフォーム機能について記事を書いていきたいと思います

今回やりたいことはフォームに追加、編集、登録ボタンを設定することです

新規にデータを追加したいときは登録ボタンのみが表示されます

データを編集したい時には編集ボタンのみが表示されます

但し、編集ボタンを押すと登録ボタンのみが表示されます

上記の機能を作成するには、Display.Mode属性が特に重要になります

ポイント

今回はGalleryとフォーム(以降、Form)の連携の中で機能を追加します

*Gallery:名称/Gallery_Sales、Form:名称/Form_Sales

GalleryがあるページからFormのあるページに移動する時などに、Formの表示モード/DisplayMode切り分けることがとても重要になります

View:表示のみ

New:新規

Edit:編集

FormのDefultModeは「FormMode.New」を設定しておきます

ですので、+の追加ボタンを押したときにはFormのDisplayModeは各フォームコントロールに値がない新規モードになります

Galleryからレコード/行を選択したい場合は「FormMode」を「View」にします

登録ボタンの作成

こちらはOnSelectプロパティに定番のSubmitForm関数を設定します

但し、Visibleプロパティを工夫します

Formを閲覧するだけのViewモード以外の時に表示されるようにします

この時、数式内のIF式は省略できます

Form_Sales.DisplayMode<>DisplayMode.View

追加ボタンの作成

追加ボタンの機能はGalleryがあるページから移動するだけでなく、Fomをリセットします

ResetForm(Form_Sales);Navigate(Screen2)

編集ボタンの作成

編集ボタンの作成ですが、その前にGalleryとFormのItemプロパティに追加が必要です

GalleryからFormに表示するレコードを選択する際に、ViewForm関数を設定し、FormのDisplayModeを閲覧のみのViewに設定できるようにします

ViewForm(Form_Sales);Navigate(Screen2)

そして、編集ボタンはFormがViewモードの時のみ表示されるようにVisibleプロパティを設定します

Form_Sales.DisplayMode=DisplayMode.View

更に、編集ボタンのOnSelectプロパティにて、FormのDisplayModeを編集/Editモードに変更できるようにします

EditForm(Form_Sales)

これで追加や編集時にボタンが必要な時に表示されるようになります

<まとめ>

今回はFormに追加や編集ボタンを設定できるようにしました

Formの表示モードがとても重要になります

登録ボタン:FormのDisplayModeがView以外の時のみ表示

*Formを閲覧する時は登録ボタン不要

編集ボタン:FormのDisplayModeがViewの時のみ表示 

⇒OnSelectプロパティにはEditFormを設定⇒登録ボタン表示

少しややこしいですが、整理しながら設定すると必要な時に必要なボタンのみが表示されるようになります

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

Power AppsでSharepointリストを扱う時の注意点

【Sharepointリストの参照列、複数行のテキストを扱う時は文法が違ってきます】

Sharepointリストはエクセルのように扱えて手軽で便利なのですが、列の種類に応じて対応の仕方が違ってくるのが少しややこしいです

今回の記事では実際の例を交えて「対応の仕方」を解説していきます

参照列

参照列とは?

こちらはエクセルのワークシートで言えば、VLOOKUP関数で取得した列のような形です

次の画像は今回の解説で使用する参照列です

CustomerName列は他のリストを参照しています

実は参照元のIDを基にして参照が成り立つようになっています

取得

参照列を下の画像のように、そのまま内部名で取得しようとするとエラーになります

この場合は、下の画像のように1つ加えます

CustomerName列「値/Value」を取得する形になります

更新

IDが5の行のCustomerName列を「C001」から「C002」に変更するとします

通常ですとこの場合は、下の画像のようにPatch関数を書きます

これだと実はエラーになりますので、第三引数の{}の中を次のように書き換えます

{}が入れ子になる形になります

ここで「Id」は参照元のIDを指定します

複数行テキスト

複数行テキストとは?

1行テキストの場合は文字数等に255までの制限があります

複数行テキストの場合は「63,999」まで文字が入ります

そして、設定を変えると「HTML」での設定になります

そうすると文字の色なども設定できます

取得/HTML形式にて

複数行テキストを「HTML形式」で設定すると、取得する場合は通常のラベルですと以下のようになってしまいます

ですので、通常のラベルではなくHTMLテキストを指定しています

そうすれば、通常のテキストのように取得できます

この時、プロパティも通常と違いますので注意が必要です

更新

複数行テキストをHTML形式で更新するには、リッチテキストエディターを使用します

リッチテキストエディタ―はPower Apps上にて、通常のエクセルのワークシート上のような操作ができる優れものです

取得はTextプロパティがないので「Default」プロパティで行います

更新は通常の「テキスト入力」と同じ要領で行います

<まとめ>

今回はPower AppsでSharepointリストの参照列、複数行テキストを扱う際の注意点を解説しました

参照列の場合は参照元リストの「ID」の扱い、複数行テキストの場合はHTML形式の扱いがポイントになります

やはりSharepointリストは癖があるので注意が必要ですね

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

Power AppsでSUM関数を使う~落とし穴にも注意~

【Power Appsでもエクセルと同じようにSUM関数が使えますが注意が必要です】

今回の記事では、Power AppsでSUM関数を使うポイントを各種解説します

結構、Power Appsで集計を行う場合にはSUM関数に限らず注意点があります

Sharepoint リストの全ての行が集計されないことがあるからです

この集計されないポイントについても解説します

SUM関数による合計処理

ワークシート関数ではSum関数の()内に合計範囲を指定しますが、Power Appsでは次のように指定します

Sum(テーブル名,列名)

こちらのテーブル名に指定するものは、データ追加したものになります

実際にSUM関数を使用すると次のような形になります

条件付き合計処理

ワークシート関数のSUMIFS関数のような処理を行うには、SUM関数内でFILTER関数を併せて使用します

Sum(

   Filter(
          T_SUM,
          ProductID="A"           
),
SalesAmount

)

上記の場合には、FILTER関数内でテーブル内の「ProductID列」がAのもののみを抽出しています

委任問題

前述の数字ですが、条件付き合計の数字の方が全体よりも大きくなっています

これは、委任問題により500行までしか集計されていないからです

Power Appsではこの問題がつきものです

一番簡単に解決できる方法がこちらです

設定からデフォルトの設定では500行になっているところを2000行に引き上げます

表示を桁区切りにする方法

Power Appsで数値の表示を桁区切りにする場合には、TEXT関数を使います

TEXT関数の第二引数で”#,###”を指定します

ギャラリーを合計する場合

ギャラリーの内容を「.AllItems」を使用して合計する場合は注意が必要です

上の画像では、スクロールバーがの位置にあります

実はスクロールバーを下に下げていくと合計額が上がっていきます

つまり、必ずしもギャラリーの内容をAllItemsで集計する場合は、SUM関数の出力値は正しくありません

この点は注意が必要です

<まとめ>

今回は、Power AppsでSUM関数を使用する方法を解説しました

ワークシート関数と違い、条件を指定できるのが便利です

但し、データ行数が大きいと正しく集計されない可能性があります

やはり、数値集計はPower BIなどで行うのがおすすめです

Power BIで作成したダッシュボードをPower Apps内でタイルとして共有するなどの方法もあります

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

GroupBy関数を使用をして集約したテーブルをキャンバスに表示する

【テーブルの内容を集約したGalleryを作成しよう!】

Power Appsのキャンバスに、集約したテーブルを表示したい時にはGroupBy関数を使用します

とても簡単なのでぜひ覚えておきましょう!

使用データ

今回使用するのはSharepointリストです

商品や客先別に売上金額が表示されています

1階層での集計

GroupBY関数の文法は次の通りとなります

GroupBy(テーブル名,①列名,②新列名)

①の列名でグループ化の切り口となる列を指定します

②の新列名で集約された内容の表示の仕方を指定します

最初は②の扱いが少し分かりにくいかもしれません

さて、

このGroupBy関数は、下の画像のようにGalleryのItemsで使用します

前述の②の新列名はDATAで指定しています

こちらにSales列を含む「Title」以外の集計される列が含まれる形になります

実はここからが少し工夫が必要となります

①のグループ化の切り口の列をギャラリーに配置するのは、通常と一緒です

ここからTitle別にSalesを集計したいのですが、ここからは少し特殊な方法となります

上の画像のように、②新列名を経由してSales列を指定します

2階層での集計

前述の1階層の集計にもう一つ階層を追加する場合には、GroupBy関数でもう一つ列を追加します

これで新列名の「DATA」が2階層で集計されます

<まとめ>

今回はGroupBy関数を使用して、ピボットテーブルのような集計表をPower Appsのキャンバスに追加する方法を解説しました

ポイントはGroupBy関数をGalleryのItemsで設定した後に、ギャラリー内でGroupBy関数内で新列名にて指定した内容を設定する時です

画像に alt 属性が指定されていません。ファイル名: image-75.png

この場合は、新列名を経由して該当の列を指定します

更なる問題としては、この新列名で設定した内容で並び替えを行う時です

いきなりSortByColumns関数を使用しても、新列名では並び替えができません

この場合には、ボタンを使用してAddColumns関数にて新しい列を追加した方が早いです

変数を2回に分けて設定するのもポイントです

ClearCollect(

myData1,GroupBy(地域データ,"Title","DATA"));
ClearCollect(myData2,
  AddColumns(myData1,"合計",Sum(DATA,Sales)
)

)

実際には、Itemsにて次の関数で並び替えを行います

SortByColumns(myData2,”合計”,SortOrder.Descending)

にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村
にほんブログ村 IT技術ブログ VBAへ

検索ボックスを作成する~委任警告対策含む~

【ギャラリーの中身を検索する検索ボックスを関数を使用して作成します!】

今回の記事では、データを一覧表示するギャラリーを検索する検索ボックスを自作します

検索ボックスは関数を使用します。ただ、よくこんな警告メッセージを見ると思います

こちらの警告メッセージは関数の使い方で回避することができます

部分的ではありますが、こちらのメッセージの回避方法も解説します

ポイント

検索ボックスの仕組みは、検索ボックスとは別にギャラリーの「Items」欄に組み込みます

今回の記事ではこの「Items」にSearch関数、もしくはFilter関数を組み込みます

上記の画像では、警告が出ていますが、こちらが委任警告のメッセージです

データソースがSharepointリストの場合、Sharepointリストが検索にはあまり向いていない仕組みのためにこのメッセージがでます

ですので、通常ですと500件までしか表示されません

今回はこちらの委任警告に対する対策も併せて解説を行います

ちなみに、委任警告についてはこちらに分かりやすい記事がありますので参考までにご紹介しておきます

検索ボックスフォームの作成

検索ボックスは四角とアイコンを組み合わせてフォームを作成します

アイコンを入れるとことで検索ボックスらしくなりますが、通常の設定ですと検索アイコンと入力した検索文字が重なってしまいます

こちらはパティングの「左」の値を調整して、入力位置の間隔をあけます

Search関数

Search関数は以下の文法で作成します

=Search(データソース,検索文字,検索対象文字列)

検索文字は検索フォームのテキストボックスを指定します

単にテキストボックスの名前だけを指定するとエラーになりますので注意が必要です

×:txtSearch ⇒ 〇:txtSearch.Text

Filter関数

Search関数と同様にFILTER関数でも検索が行えます

FILTER関数内にはStartsWith関数も組み合わせます

Filter(地域データ,StartsWith(Title,txtSearch.Text))

FILTER関数関数では、データソースから指定条件のものを絞り込んで抽出します

通常はFilter(データソース、列名=××)という感じで指定します

今回は、指定条件の箇所をStartsWith関数(①列名,②指定文字列)で置き換えることで、指定列①の中で指定文字列②ではじまるものを抽出しています

このFilter関数とStartsWith関数の組み合わせだと、何がいいのかというと、委任警告のメッセージが消えます

この辺の仕組みはMicrosoftのHPにも解説されています

詳しく知りたい方はこちらの記事もぜひご確認ください

<まとめ>

今回はSearch関数、Filter関数を使用して検索ボックスを作成する方法を解説しました

委任警告のメッセージについても触れましたが、この問題はPower Appsでは必ずついてくるものです

対策は今回紹介した関数の工夫が望ましいです

ただ、設定で対策も行えることを最後に紹介しておきます

上の画像の箇所は2000まで増やすことができます

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

独自の入力チェックを導入して、アプリ運営を効率化する方法

【入力チェックを効果的に行うことでアプリ運用を適切に行えるようにしましょう!】

アプリを実際に運用しだすと「こんな風に入力しないで・・・」という問題が必ずおきます。この問題はできるだけアプリ内で事前に防げるようにしましょう

ポイント

実はデータカード内にはエラーメッセージ表示用の仕組みがあります

例えば、入力必須の項目が未入力の場合には上記の画像の箇所/ErrorMessage・・・から表示されます

表示は「Parent.Error」で行われます

この記事ではこのParent.Errorをうまく使いこなせるようにします

Parent.Errorはあくまでエラーが発生した時にだけ表示されます

エラーが発生した時の「Parent.Errorのメッセージ」を活かしつつ、エラーが発生する前にもメッセージを表示するためにCoalesce関数という関数を使用します

この関数は空白でない文字列の最初のものを表示します

つまり、エラーが発生していない時は「Parent.Errorでないもの」を表示します

エラーが発生した時には「Parent.Error」を表示します

ちなみに「parent.Error」は上の画像のようにText欄に設定されます

入力必須の設定

入力チェックの一番の基本は「入力必須」です

こちらは下の画像の「詳細設定」で行います

詳細設定の「Required」をtrueにするとチェックが設定されます

「Required」をtrueにした箇所を空欄にしたままSubmit関数を実行するとエラーメッセージがでます

入力範囲のチェック

入力項目の中には「いくら以上で」とか「いくら未満で」といった風に、範囲を制限するケースがあります

このケースではCoalese関数とIF関数を組み合わせます

下は500以上の入力を必須にするケースです

Coalesce(Parent.Error,If((Value(DataCardValue2.Text)<500) && !IsBlank(DataCardValue2.Text),”500以上で入力してください”))

上の数式ではCoalese関数を使用することにより、エラーが実際には発生していない時にはIf関数の中身を表示します

IF関数内では条件を2つ、AND条件で設定しています

①(Value(DataCardValue2.Text)<500) && ②!IsBlank(DataCardValue2.Text)

①は値が500未満という数字の制限です

②は!(否定)を付けることで値がブランクでない場合という制限です

形式のチェック

数字形式の入力が必須の箇所で、文字列が入力されるとエラーが表示されるようにします

今回もCoalese関数とIf関数を組み合わせます

但し、IsMatch関数という関数も組み合わせて使用します

IsMatch関数では事前定義済みパターンというものを設定します

IsMatch関数内でパターンに一致しない場合にはメッセージを表示できるようにします

Coalesce(Parent.Error,If(!IsMatch(DataCardValue5.Text,Match.MultipleDigits) && !IsBlank(DataCardValue5.Text),”数字のみで入力してください”))

ちなみに上記のIF式内では「!(否定)」を使用して!IsMatch(~、つまり~が一致しない場合としています

今回はMultipleDigitsという事前定義済みパターンを使用しています

こちらのパターンは「1 桁以上の数と一致します」というパターンです

MultipleDigits以外にも様々なパターンがありますのでぜひこちらを確認してみてください⇒詳細

<まとめ>

今回はPower Appsで入力チェックを行う方法を解説しました

Parent.Errorと空欄を無視するCoalese関数をうまく活用するのがポイントです

作成したPower Appsを使用してもらっても、入力されたデータが不完全だとあまり意味がありません

今回の入力チェックの仕組みはぜひうまく使いこなしましょう!

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

コンボボックスを使いこなす~検索、フィルター他~

【Power Appsとエクセルとの違いの一つがこのコンボボックスです】

今回は、Power Appsをうまく使いこなすの一つである「コンボボックス」について深堀し、幾つかコンボボックスの便利機能を紹介します

Power Appsのコンボボックスの機能は多岐にわたるので、知っているか知っていないかで使い方で大きな差がでてきます

特にコンボボックスはマスターデータと組み合わせて使うと大きな効果を生みます

コンボボックスの表示設定

コンボボックスは「挿入」から設定します

コンボボックスの中身は「Item」から設定します

コンボボックスで中身を選択する際は、参照データも表示することができます

上の画像のように、2列のデータを「Item」に設定します

次に「フィールド」をクリックします

次に表示される画面では「二重線」を選択します

そして「副次的なテキスト」にて選択する列とは別の列を指定します

するとコンボボックス内で2列分の内容が表示されます

ただし、表示は2列でもあくまでコンボボックスで設定されるのは「主要なテキスト」の内容です

2列で表示できるようにすることで、顧客マスターなどのマスターデータをコンボボックスで設定する際にとても便利です

「A001・・・」などのコードが表示されても該当のコードがよくわかりませんので、顧客名も同時に表示するといいでしょう!

検索

コンボボックス内で表示される内容が大量になる場合には、検索が行えるようにするのがいいです

まずはプロパティ画面で「検索の許可」をオンにします

その後「SearchField」を設定します

これでコンボボックス内で検索できるようになります

フィルター

マスターデータをコンボボックスで選択する際、使っていないコードは表示したくない場合があります

例えば、下の画像の「Active」列にてFALSEのコードをコンボボックスに表示したくない場合などです

この場合はコンボボックス「Item」にFilter関数を使います

数式は次の通りとなります

Filter(myCustomer,Active=”TRUE”)

これで、マスターの中で「TRUE」のもののみが表示されます

<まとめ>

今回はコンボボックスの便利機能について解説しました

上記の便利機能を使えると、アプリ内でマスターデータをうまく活用できるようになります

ところで、ドロップダウンリストとコンボボックスはどう違うのでしょうか?

ドロップダウンリスト

一見、違いはありません

ドロップダウンリストの場合は、コンボボックスと違い「複数選択」「検索」などの機能がありません

このコンボボックスとドロップダウンリストの違いはぜひ押さえておきましょう

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

Update関数とUpdateIf関数について~レコードの置き換え~

【今回はレコードの置き換えを行うUpdate関数とUpdateIf関数について解説を行います】

過去に解説したPatch関数と今回解説するUpdate関数とUpdateIf関数を組み合わせて活用できるようになると、レコードの扱い格段に強くなれます

Update関数

レコードの全体を置き換える関数になります

この全体の意味合いは、特定の列だけ「置き換えないということがない」といことになります

myCollect

今回はデータソース:myCollect*内で価格が100のもののうち、最初のレコードを置き換えます

*myCollectはGalleryのItemsになり、列は価格:myPriceと数量:myQuantityになります

Update関数の文法は次のようになります

Update(データソース,対象レコード,{列1:値1,列2:値2・・・})

価格が100のもののうち、最初のレコードを対象にするにはFilter関数とFirst関数を使用します

First(Filter(myCollect,myPrice=100))

上記の関数を組み合わせると、今回の関数は次のようになります

Update(myCollect,First(Filter(myCollect,myPrice=100)),{myPrice:0,myQuantity:0})

これで価格が100の最初の行が価格も数量も0に置き換えることができました

UpdateIf関数

UpdateIf関数はエクセルワークシート関数のSumIfs関数と同じように、条件に合うものを一括で処理します

文法は次の通りとなります

UpdateIf(データソース,対象レコード(条件式),{列1:値1,列2:値2・・・})

Update関数とは違い、特定の列だけ置き換えることもできます

今回は価格が100未満のものを一括で0にします

UpdateIf(myCollect,myPrice<100,{myPrice:0,myQuantity:0})

下のGIF画像内で価格が100未満のものが置き換えられています

もちろん、置き換える数量をテキストボックスで指定することもできます

テキストボックス:txtModifyを組み入れたUpdateIf関数の式は次の通りとなります

UpdateIf(myCollect,myPrice<100,{myPrice:0,myQuantity:Value(txtModify.Text)})

価格が100未満のデータがテキストボックスの数字で置き換えられます

<まとめ>

今回はUpdate関数とUpdateIf関数について解説させて頂きました

Patch関数、Update関数、UpdateIf関数はそれぞれ機能が似ているようでそれぞれ違いがあるので注意が必要です

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ