タグ別アーカイブ: Sharepointリスト

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へ

ガッツの日記 第7回 「エクセルとSharepointリスト」それぞれのいいとこどりをする方法

【今回の記事はデスクトップのエクセルの新たな活用方法の提案です】

ここ数年でSharePointリストなどのクラウドサービスを利用する人はかなり多くなってきています

クラウドはネットさえつながればどこでも使うことができ、特にSharepointリストは複数人でデータを共有して仕事するのに便利な機能が満載です

履歴の復元が行えたり、登録者や更新日時が確認できます

何より3000万行を蓄積できるのがいいです

エクセルはあくまで表計算ソフトであり、大量のデータを蓄積していくのには本来は向いてません

蓄積できる行数も1シート100万前後です

一方、使い慣れたデスクトップのエクセルをこれからも使用していきたいという方も多いと思います

特にVBAを使って業務を回してきたケースの場合は、そのままデスクトップのエクセルを継続的に使用せざる負えないです

ここからが本題です

実は、

Sharepointリストとデスクトップのエクセルを組み合わせて使用する方法があります

ADOという仕組みを使うと「Sharepointリストからエクセルへのデータ取得」「エクセルからSharepointリストへのデータ追加・更新」が自動で行えます

以前、私はこのADOを使用して「Accessとエクセル」を連携するシステムを開発したことがあります

この方法ならばAccessにデータを一元管理しながら、利用者各自のエクセルファイルにて作業を行うことができます

何が一番素晴らしいかというと、売上管理や商品管理などの各種エクセルにてマスタを共通利用できる点です

エクセルでデータ管理を行っていると、複数ファイルでのマスタの追加や更新などの処理が煩雑になりがちです

ADOを使用した仕組みの場合は、Accessにてマスタ管理を行えば、利用者の各種エクセルファイルにてマスタを自動でダウンロードして使いまわすことができます

今回の記事では、Accessの代わりにSharepointリストを使用するわけですが、クラウドで利用できる点なども含めてかなり効率的な仕組みができると考えています

VBAを使い込んでいた組織では、VBAを引き続き有効利用しながらクラウドを活用できるのも大きいです

以降の記事では、Sharepointリストの特徴なども交えながらデータ取得・追加・更新のサンプルコードを解説していきます

尚、今回の記事はVBA経験者を主な対象としていますのでその点は予めご了承ください

事前準備

ライブラリーの追加

ADOをVBAで使用する場合には、Visual Basicのツールタブ⇒参照設定からMicrosoft ActiveX Data Objectsライブラリを追加する必要があります

ここが抜けてしまうと、コードをいくら書いても動きませんので注意が必要です

サイトURL及びリストID

ADOを使用してSharepointリストをデータソースとして使用する場合は「サイトURL」と「リストID」を使用します

サイトURLについては分かりやすいと思います

上記画像の「sites」の後と「Lists」の前までがサイトURLです

リストIDは普段聞きなれないと思いますが、Sharepointリストの内部名のことです

今回の記事で使用するSharepointリストのリスト名は「Sales_Test」になりますが、別の名前/IDをADO内では使用します

リストIDの取得はこちらから行います

上の画像の「リストの設定」をクリックすると、次に開く画面でリストIDが取得できます

こちらの「%7B」と「%7D」の間がリストIDになります

共通構文

以下、サンプルコードを実際に解説していくわけですが、共通の部分があります

******

Dim objConnect As Object ‘ADODB.Connection
Dim recordSet As Object ‘ADODB.Recordset
Const Sharepointurl As String = ①”https://xxxx5.sharepoint.com/sites/TEST
Const listid As String = ②”b24faf63-1f23-xxxx-858e-278ead83f878

③Set objConnect = CreateObject(“ADODB.Connection”)
④objConnect.Open “Provider=Microsoft.ACE.OLEDB.16.0;WSS;IMEX=2;RetrieveIds=Yes;DATABASE=” & Sharepointurl & “;LIST=” & listid & “;”
⑤Set recordSet = CreateObject(“ADODB.Recordset”)

******

①②ではサイトURL、リストIDを設定します

③では、ADOとの接続を設定し、④で実際に①②のサイトURLとリストIDを通じて接続を行います

⑤では取得したレコード/行一式を格納する箱を設定します

Sharepointリストの列名を取得

本来であれば、早速データの取得のサンプルコードから紹介したいところなのですが、Sharepointリストの列名の取得から始めたいと思います

何故かと言うと、ここにSharepointリストの特徴の1つがあるからです

******

Sub getFields()
(共通)

With recordSet
①.Open “SELECT * FROM [Sales_TEST];”, objConnect
②.MoveFirst

Dim i As Long

③For i = 0 To recordSet.Fields.Count - 1

    ④Debug.Print recordSet.Fields(i).Name

⑤Next

   .Close

End With

objConnect.Close

End Sub

******

①にてレコードを該当Sharepointリストから取得し、②でレコードの最初に移動します

③~⑤でレコードの列名を繰り返し、イミディエイトウィンドウに表示します

取得した列名を見て頂くと、設定していない列が取得されます

ここがAccessと違うところです

一番上に出ているIDはレコードを追加すると「1,2,3・・・」と自動採番されます

このIDは今回もSharepointリストの更新で使用します

ちなみに、使用した接続やレコード一式は必ず閉じる/Closeするようにします

データの取得

Sharepointリストからデータを取得するには、2つの方法があり、列別に取得する方法とレコードセットを丸ごと取得する方法です。

列別

前述の列名で取得した「列名」をここで使用します

*太字の部分です

******

With recordSet
.Open “SELECT * FROM [Sales_TEST];”, objConnect
.MoveFirst

Dim i As Long

Do Until .EOF
  Debug.Print .Fields.Item("注文NO").Value
  .MoveNext
Loop

.Close

End With

objConnect.Close

******

一括

こちらは一括でSharepointリストからレコード一式をワークシートにコピーします

下のコードではSheet5のA2セルに一括でコピーしています

******

With recordSet
.Open “SELECT * FROM [Sales_TEST];”, objConnect

Worksheets("Sheet5").Range("A2").CopyFromRecordset recordSet

.Close

End With

objConnect.Close

******

もし、データが一行もない場合は「データが無かった旨」を表示できるようにすると便利です

.Open “SELECT * FROM [Sales_TEST];”, objConnect

If recordSet.BOF = True And recordSet.EOF = True Then
   recordSet.Close
   objConnect.Close
   MsgBox "該当するデータはありません。"
   Exit Sub
End If

データの追加

以下の①から⑧までを一式で使います

******

①recordSet.Open “[Sales_Test]”, objConnect, adOpenKeyset, adLockOptimistic

②objConnect.BeginTrans

③recordSet.AddNew
④recordSet.Fields("注文NO").Value = Worksheets("Sheet6").Cells(2, 1).Value
⑤recordSet.Fields("SalesAmount").Value = Worksheets("Sheet6").Cells(2, 2).Value

⑥recordSet.Update

⑦objConnect.CommitTrans

⑧recordSet.Close

******

①のadOpenKeysetadoLockOptimisticは他に指定する方法がありますが、こちらの方法であれば大概は問題ありません

④⑤で追加データをワークシートから読み込んでいます

追加データが複数行ある場合は「For ~ Next」内に③~⑥を入れてコードを書きます

そして最後に⑦を実行します

データの更新

前述のようにSharepointリストのIDを使用し、更新するレコードを指定するのがポイントです

ですので実際には、事前にレコードの取得をしておいてIDを特定できるようにする必要があります

******

objConnect.BeginTrans

①recordSet.Filter = "ID = " & Worksheets("Sheet7").Cells(2, 1).Value
recordSet.Fields("SalesAmount").Value = Worksheets("Sheet7").Cells(2, 2).Value
recordSet.Update

******

データの追加も同様ですが、接続が行えない場合は「ロールバック処理/もとに戻す」を行えるようようにしておくのがよいです

<まとめ>

今回はADOの仕組みにより、Sharepointリストからエクセルにデータ取得したり、エクセルからデータ追加・更新を行う方法を解説しました

今回紹介した内容は基本的な内容であり、実際には条件式を組み合わせるなど様々なパターンが考えられます

実はSharepointリストとADOにて接続する場合、1点厄介なことがあります

ADOで扱うSharepointリストに参照列が存在する場合です

上の画像の一番右、CustomerName列は参照列です

他のSharepointリストから参照しています

参照列をADOで取得すると、次の画像のように参照しているSharepointリストのIDに置き換わってしまいます

ですので、IDを変換する仕組みが必要になります

データ追加の時も、参照列がある場合には同様にIDを変換する仕組みが必要です

とにかくSharepointリストを扱う上では「ID」が非常に重要です

この点は強く意識しておきましょう!

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

にほんブログ村

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

Formsに回答数の上限に達したら、Power Automateからメールをする方法

【Sharepointリストを使用し、簡単いFormsに回答数の上限を設定する方法を解説します!】

回答を集めるのに便利なFormsですが、回答数の上限を設定することはできません

 今回の記事では、回答数が事前に設定した上限数を超えたら取り急ぎPower Automateにてメールを送る対応について解説を行いたいと思います

しかも、かなり簡単な方法で行えるようにしたいと思います

ポイント

Sharepointリスト

事前にSharepointリストを作成しておき、質問別に上限数を設定しておくのが最大のポイントです

回答数についてもこちらのSharepointリストで管理できるようにします

変数

上記のSharepointリストの項目については、Power Automateのフロー内では変数を通じて管理を行います

・質問別上限数

・質問別回答数

後、メール内で「どの質問」が上限数を超えたかを管理するための変数を設定しておきます

Formsデータの取得

Formsの回答情報を取得するには、次の画像にある2つのアクションを組み合わせて使います

返信先の取得

返信先の宛先を取得するには次のアクション/ユーザープロフィールの取得(V2)を使用します

このアクションを使用すると、Formsの回答者のメールアドレスを基にして回答者の様々な情報を取得できます

例えば、「姓」「名前」とかが取得できます。こちらは後で回答者にメールを送る際に使用します

上限数・回答数の取得及び更新

ポイントで前述したように、変数は回答別に設定しておきます

変数を通じて、Sharepointリストの回答数を取得・更新します

Sharepointリストから回答数を取得するには「複数の項目の取得」アクションを使用し、変数に反映します

これは上限数も同様です

そして、Formsで回答があった質問の回答数を更新するには条件アクションの中で「empty関数」を使用します

指定した質問に回答があった場合は「empty」でないので、falseになります

こちらの「empty関数」の中にはFormsで取得した動的コンテンツを設定します

この「false」の場合に、回答数を1つ増やしてSharepointリストに反映します

*「変数の値を増やす」アクションを使用

Sharepointリストへの反映には「項目の更新」アクションを使用します

そして、ポイントで前述したように「どの質問」が上限数を超えたかを変数に設定します

こちらは「条件」アクションで上限数と回答数を比較して条件式を設定します

「はい」の場合は「文字列変数に追加」アクションで該当の質問名を設定します

メールの送信

フローの最後には、回答数が上限数を超えた場合にはメールが送れるように「条件」と「メールの送信」アクションを組み合わせて設定します

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

「条件」アクションは「OR」で設定します

「メールの送信」アクション内では前述の「ユーザープロフィールの取得(V2)」で取得した内容を使用します

これで回答数が上限を超えた場合に、回答者にメールが送信されます

<まとめ>

今回はSharepointリストに上限数と回答数を設定した上で、Formsの回答数が上限数を超えた場合にメールをする方法を解説しました

記事内では触れませんでしたが、各種設定は質問別に行うのもポイントになります

こちらは質問数が多いとかなり手間になるので「スコープ」アクションを使用することをオススメします

「スコープ」アクションを使用すると、複数のアクションを一括で扱えるようになります

「スコープ」アクションをコピーしながら使うと、フローの作成自体が楽になります

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

にほんブログ村

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

MicrosoftのFormsにアップロードされた画像をForms外で共有する

【Forms内の回答以外でも、画像を共有するには2つの方法があります】

MicrosoftのFormsは瞬時に多くの人の情報を集められるのでとても便利です。但し、アップロードされた画像をForms外で共有するにはどうしたらいいか?

意外と頭を悩ませている人も多いのではないでしょうか?

こちらは2つ方法があります

1.FormsからSharepointサイトのドキュメントに共有

2.Power Automateにてメールを添付する

1.FormsからSharepointサイトのドキュメントに共有

Formsの画面下に「マイグループ」という欄があります

こちらのマイグループにはSharepointサイトが並びます

1つ選んでクリックするとグループフォームが作成できます

このグループフォームで画像をアップロードするだけで、該当のShaerpointサイトのドキュメントに画像が直接アップロードされます

この時、Shaerpointサイトのドキュメント内にフォルダ内には該当フォーム専用のフォルダが作成されています

こちらのフォルダ内にも、Forms内にアップロードされた画像がアップロードされます

2.Power Automateにてメールを添付する

Formsにアップロードされた画像をメールにて添付するフローは少し複雑になります

ポイントとしては2つあります

①Forms内にアップロードされた画像はOneDrive内に保存される

②メールを添付するには、ファイルの名前とファイルコンテンツ(中身)が別々に必要

こちらの2つのポイントをまずは押さえておきましょう

Formsの回答を取得

「新しい応答が送信されるとき」と「応答の詳細を取得する」この2つのアクションでFormsの回答を取得します

添付ファイルの名前を取得

添付ファイルの名前を取得するには「データ操作」コネクタを使用します

データ操作コネクタ内の「JSONの解析」アクションを使用するのですが、こちらはコード/スキーマが必要になってきます

「コンテンツ」にFormsの画像での回答を動的コンテンツで設定後、スキーマの欄に一旦「””」を入力してフローを動かします

これでスキーマが取得できます

上記の画像の出力欄/本文の「name」の欄が一番欲しいファイル名です

こちらの本文の内容を前述のスキーマにコピーします

この「JSONの解析」アクションで取得した内容から、「作成」アクションを通じて前述の「name」を抽出します

関数を使用するのですが、関数の中身は以下となります

first(body(‘JSON_の解析’)).name

これでファイル名が抽出できます

メールの送信

これでファイル名が取得できました

今度はファイルの中身/ファイルコンテンツを取得します

ファイルコンテンツの取得には「パスによるファイルコンテンツの取得」アクションを使用します

こちらはOneDrive内の「アプリ/Microsoft Forms」フォルダから取得します

前述したようにOneDriveにFormsのアップロード画像が保存されているのがポイントです

一度、ファイルパスは実際にOneDriveに保存されているファイルを設定し、動的コンテンツの「作成」アクションから出力された内容で置き換えます

これでファイル名とファイルコンテンツが揃ったので、メール作成アクションを設定します

前述したように、ファイル名とファイルコンテンツを分けて設定するのがポイントです

これでFormsに画像がアップロードされたらメールが行われます

<まとめ>

今回はMicrosoftのForms内でアップロードされた画像をForms外で共有する方法を2つ解説しました

解説した2つの方法のうち、2つ目のメールする方法は中々小難しいです

ここで、画像のアップロードが複数ある場合はどうするか?

という疑問を持った方もいらっしゃると思います

この場合は、アレイ.配列を使用します

配列に「ファイル名」「ファイルコンテンツ」を複数格納します

使用するアクションも通常の「変数の設定」ではなく「配列変数に追加」を使用しますし、文法もなかなか間違いやすいので注意が必要です

そして、一番分かりにくいのがメールの添付です

こちらはモードを切り替える必要があります

この画像を複数添付したメールを送付する方法はなかなか難解です

機会があれば詳細に解説したいです

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

にほんブログ村

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

Sharepointリストにエクセルファイルから一括でデータを大量追加する

【Power Automateを使えば、Sharepointリストを一気に操作することができます!】

Sharepointoリストはエクセルのように大量にデータを追加できない?そう思われている方も多くいらっしゃることと思います

実はPower Automate/クラウドフローを使えば簡単にエクセルから大量データを追加できます

但し、注意点も多いです

エクセルからPower Automateを使ってSharepointリストに流す方法を知っていても、256行で処理が止まってしまったという経験をされた方も多いと思います

行数の制限を回避する方法も後ほど解説したいと思います

自動追加フロー

準備するもの

追加するデータが含まれたエクセルファイルをSharepointのドキュメント内、もしくはOneDrive内に用意してください

但し、必ずテーブル化を行っておいてください

名前は後で参照するので、分かりやすいものが良いです

デスクトップの場合と違い、テーブル化の場合はショートカットキー/Ctrl+Tが使えないので挿入タブから操作を行ってください

Power Automateフロー

トリガー

「手動でフローをトリガーする」をトリガーにし、いつでもフローを起動できるようにします

エクセルファイルからデータ取得

「表内に存在する行を一覧表示」アクションにて追加するデータを取得します

アクション内では、ファイルとテーブルを指定します

リストへのデータ追加

取得したエクセルデータのリストへの追加は、Sharepointコネクタの「項目の作成」アクションで行います

こちらのアクションにて、取得したエクセルデータを列単位で指定します

下の画像のように、客期コードにカーソルを置くと現れる動的コンテンツから実際の指定は行います

一つでも動的コンテンツを指定すると、自動的に繰り返し処理/Apply to eachが適用されます

つまり、このアクションではN行エクセルデータを取得したらN回項目の作成を繰り返し、リストに追加を行っていきます

注意点

実は処理行数に制限があり、エクセルの追加行数が256行より多い場合でも処理が「256」で止まります

この場合は設定の変更で上限数を増やすことができます

改ページを「オン」にし、行数を増やします

理論上は10万行までは指定できるようです

但し、制限を外せてもかなりパフォーマンスは落ちるケースがありますのでご注意を

(参考)256行制限のまま大量の行数に対応するフロー

最後に、1度にエクセルから取得する行数を「256」に絞りながら処理するフローを紹介します

下の図のように、うまく取得位置をスキップさせながら制限行数の範囲内で処理を繰り返していきます

スキップ数の箇所は変数にして可変にするのもポイントです

こちらの変数は繰り返し処理/Do Untilの中で、繰り返し256行を増やしていきます

Do until内では別途変数(プール値:trueで初期化)を使用し、falseになるまで処理を継続するようにします

こちらの終了判定する変数は、処理の残り必要行数が256未満の時にfalseにします

処理の残り必要行数は「length関数」を使用して取得します

length(body(‘表内に存在する行を一覧表示’)?[‘value’])

残りの行数を取得し、256行未満であれば最後の「項目作成」を行い、変数をfalseに変えます

<まとめ>

今回はPower Automateを使用してエクセルのテーブルからまとめてSharepointリストにデータを追加する方法を解説しました

フロー自体は簡単なのですが、行数が増えてくると扱える行数に制限がかかったりするのが厄介ですので、そちらの対策も解説させて頂きました

最後に、

フローの実行が長引くと「フローがタイムアウト・・・」と出るケースがあります

但し、下の画面/実行履歴を確認すると実際にはまだ動いていることがありますので注意が必要です

この疑似的なものも含めてタイムアウトを防ぐために、下の設定を変えることで対策が行えます

この設定内に「期間」を設定する箇所があります

以下に記載例も示しておきます
PT1M ー1分

PT1H-1時間

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

にほんブログ村

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

Power Automateでフィルタークエリを使いこなす

【今回は便利だけど何気に難解なフィルタークエリを数パターン解説します】

エクセルでフィルターを使う機会は多いと思います。Power Automateでもフィルターは「フィルタークエリ」という形で使うことができます。ただ文法等が何気に分かりずらいので、今回は陥りやすいパターンになるべく絞って解説します

特にSharepointリストの内部名の指定やシングルクオーテーションの指定は何気に間違えやすいので注意が必要です

///2023年7月19日追加記事///

フィルタークエリに関しては、今現在、次の画像のような機能が活用できます

この機能であれば、フィルタークエリを通常の条件式と同じように扱えます

細かな文法の知識を駆使する必要はなく、直感的な操作で設定が行えます

この機能を活用するには、画面右上の以下の箇所を操作する必要があります

上の画像にて、黄色の箇所をクリックするとこの機能の「オン・オフ」が指定できます

あくまで実験的な機能という風に記されていますので、この点は注意が必要です

//////

使用データ

使用するデータは以下の画像の内容です

等しい:eq(equal)

例えば「名前」の列が「木塚 信之」の行を抽出したい場合には、次のようにeqを使用します

この時「シングルクオーテーション:’」を忘れないようにしてください(数値の場合は別扱い)

このフィルタークエリを実行すると次のように結果が得られます

尚、上記のフィルタークエリは「表内に存在する行を一覧表示」アクション内で使用しています

等しくない:ne(not equal)

次のようにフィルタークエリを書いてみます

名前が「木塚 信之」以外の行が出力されます

以上:ge(greater than equal)

ここからはSharepointリストをデータソースにして「複数の項目の取得」アクション内でフィルタークエリを実行します

~以上を抽出するには「ge」を使用します

では、次のようにフィルタークエリを書いてみます

そうするとエラーになります

これは「年齢」というSharepointリスト内の内部名を指定できていないからです

まずはSharepointリストの「リストの設定」画面にて、内部名をURLから取得します

該当箇所は「=」の次からの文字列になります

これで内部名を取得できたので、フィルタークエリを修正してみます

この時の出力は次の通りとなります

尚、内部名が「_X・・・」となるときがあります

上記で使用していたSharepointリストはエクセルから作成しました

「問合せ日」という列を加えると内部名が次の通りになります

この場合、フィルタークエリの書き方に工夫が必要です

内部名の前に「OData_」という文字を加える必要があります

なお、比較の演算子には「以上:ge」以外にも次のような内容があります

以下:le

~超:gt

未満:lt

startswith他

「文字列が特定の文字から始まる」という指定を行いたい場合はstartswithを使用します

出力される内容は次の通りとなります

「substringof」により文字列内の特定の文字が含まれる行を抽出することもできます

引数が「startswith」と逆なので注意が必要です

and条件やor条件

「且つ」や「又は」を指定することもできます

<まとめ>

今回は便利なフィルタークエリですが、陥りやすいパターンを中心に解説させて頂きました

尚、下の画像のような日付の関数などを使用した場合のシングルクオーテーションなども抜けやすいので注意していきましょう

ぜひフィルタークエリを有効活用してクラウドでの仕事を充実させていきましょう!

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

にほんブログ村

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

管理IDを2段構成で管理できるようにする~Power AppsxPower Automatex~

【エクセルでは簡単に行えなかったことが、Power Platformでは簡単に行えます】

作業を行う際にID管理表をエクセルで作成している方も多いと思います

今回はPower Appsを起点にして、次のような2段構成の管理IDを簡単に発行、管理できるようにします

①230001-②0001

①は新規に発行するIDとなり、発行時に②は自動的に「0001」となります

②は①のIDに紐づく内容で修正があった時に「0001⇒0002・・・」と繰り上がっています

上記のGIF画像では、左上の「NO」が空欄なので、新規にIDを発行しています

上記のGIF画像では、既存の「230008-0001」の最初の6桁をNO欄に入力しているので「0002」が採番されています

今回の記事では、詳細な内容(特にPower Automateのフロー)が多いのでポイントを絞り解説していきます

ポイント

IDの2段構成を実現するために、管理用のSharepointリストを作成しておきます

Sharepointリスト連携

SharepointリストにはNewとOldを記載する列を作成しておきます

こうすることで、IDの構成に応じて最後のIDを抽出しやすくなります

Power Automate連携

Power Automateのフローは「新規用」と「既存用」の2つを作成し、IF式で切り分けて動かせるようにします

Set(myID,TextInput_IN.Text);If(IsBlank(myID),Set(ID,flowNew.Run()),Set(ID,flowOld.Run(myID)))

上記は採番ボタンの「Onselect」の欄の数式になります

Power Apps画面左上のNO欄に入力がある場合とそうでない場合(IsBlankがfalse、true)に分けて、動かすフローを切り分けられるようなっています

Power Automateの起動

前述のように、Power Appsから新規の採番か既存の採番かにより動かすフローを切り分けます

そして、既存の採番の場合にはPower Automateのフローに「既存6桁」を渡します

以下は再び採番ボタンの数式です

Set(A:myID,TextInput_IN.Text);If(IsBlank(B:myID),Set(ID,flowNew.Run()),Set(ID,flowOld.Run(C:myID)))

まずAでSet関数で変数:myIDにNO欄の内容を設定します

もし、BにてIDが空欄の場合には「flowNew」を起動/Runします

そうでない場合は「flowOld」に変数:myIDを渡して起動/Runします

flowOldでは受け取った変数:myIDを基に採番を行います

Power Automateフローの実際

既存

Power Appsを受け取った変数:myID=IDの左側6桁を基にして左側6桁の最終発行情報を取得します

最終発行情報の取得には「複数の項目の取得」アクションを使用します

事前にPower Appsから受け取ったIDの左側6桁は、substring関数を使用して6桁の変数「digit6」に変換しておきます

そして、フィルタークエリを以下のように指定することで「digit6」に一致するものをSharepointリストより抽出します

*ApplyNOは管理IDのことです

抽出といっても最終のものを抽出するだけですので、ID列の最後の行を抽出します

最後は抽出したIDに「1」をadd関数で足します

新規

新規の場合は、Sharepointoリストの「New」のものの中から最終のものを抽出します

例えば、冒頭のGIF画像では「New」の最後「230007」を抽出して「1」を足す形になります

SharepointリストでのID作成及びPower Appsでの受け取り

Power Automateで作成したIDはSharepointリストに「項目の作成」アクションを使用して書き込みます

更にIDはPower Appsに返します

上の画像では変数:ID_FromPAとして値を返しています

値を返されたPower Apps側では更に受け取った値を変数に格納し直します

以下は再び採番ボタンの数式です

Set(myID,TextInput_IN.Text);If(IsBlank(myID),Set(ID,flowNew.Run()),Set(ID,flowOld.Run(myID)));Refresh(ApplyNO)

上記の「Set(ID・・・」の箇所は、フローをRun/起動したことで返ってきた値を変数:IDに格納しています

注意点としては、実際に返ってきた値を表示する際には、次のように「ピリオド.」をうまく使わないと表示ができません

上記の画像ではインプットボックスに「ID.id_Frompa」を設定して、返ってきた値を表示しています

中身としてはPower Apps内で生成した変数:IDの中のPower Automateから返ってきた「id_frompa」というような込み入った表現になっています

<まとめ>

今回の記事ではSharepointリストやPower Apps、Power Automateを使用してIDを2段で管理する方法を解説しました

エクセルではVBAを使用するような内容ですが、Power Platformでは工夫すればかなり簡単に行えます

尚、今回の記事ではPower Automateのフローを細かく解説すると長くなりそうなので、詳細は割愛しました

ポイントだけ解説すると、変数を細かく分けて初期設定するのがポイントになります

上記は1例ですが、管理IDの左2桁部分や6桁部分などを宣言することで柔軟なフローが描けるようになります

例えば、左2桁を切り分けて管理することで「今年/yyyyの右2桁の採番」などの管理も柔軟に行えるようになります

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

にほんブログ村

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