スポンサーリンク

【pleasanter/PowerQuery】プリザンターの情報をパワークエリで取得する③上限値以上のレコードを連続で取得する

プリザンター
スポンサーリンク
※当サイトは広告を含みます

前回、前々回とパワークエリでプリザンターの情報を取得する、をやりました。
【pleasanter/PowerQuery】プリザンターの情報をパワークエリで取得する①
【pleasanter/PowerQuery】プリザンターの情報をパワークエリで取得する②取得条件の指定方法

私のところの環境ではパワークエリでテーブルの情報を取得したところ1回に200レコードが上限でした。なので、ループみたいな感じで200レコード以上もいっぺんに取ってこれるようにやってみた、の記録です。

※おことわり
2024年3月時点の情報です。プリザンターのバージョンは 1.3.50.2 です。Google Chrome でやっています。
javascript,html,cssともに初心者です。調べながら、やってみながら、きっとこうすればいいんだ!という感じで書いていますので、間違っている場合、効率的な書き方ではない可能性が大いにあります。間違ってるよ!とか、こうしたほうがいいよ!ということがありましたら、コメント等で教えていただけると大変ありがたいです。

1.使用するテーブル

サイトID151。251レコードあります。

2.201レコード以上を取得するにはOffsetを利用する

VBAとプリザンター連携でもやりましたが、Offsetを使用して次のカタマリをとります。
【pleasanter/VBA】エクスポート⑦200件超のデータを出力する方法 Offset

おなじみのコードで、requestJson の部分に Offset を追加します。
結果がわかりやすいようにResultIdの昇順にしたいので ColumnSorterHash = [ResultId = “asc” ] も追加しました。(このテストサイトはレコードID順にタイトルが「タイトル1」~「タイトル250」となっています。何かの間違いでタイトル100がダブっているのでちょっとはなしがおかしくなりますが、気にしないでください)

let
    //※サーバー名とサイトID、apiキーは実際のものに変更する
    url = "http://localhost/api/items/151/get",
    api = "abc12345",
    requestJson = Json.FromValue([
        ApiKey = api,
        Offset = 0,
        View = [
            ColumnSorterHash = [ResultId = "asc" ]
        ]
    ]),
    
    res = Web.Contents(url,[
        Headers = [#"Content-Type" = "application/json"],
        Content = requestJson
    ]),
    res_json = Json.Document(res),
    Response = res_json[Response],
    Data = Response[Data]
in
    Data

ますは Offset = 0 でやってみます。
リスト型で出力されるので、テーブルに変換し、展開ボタンでResultId、タイトルを表示します。

タイトルがテスト1~199と200レコード表示されました。

次に、 Offset = 0 を Offset = 200 に変更して実行します。
詳細エディターを開いて 0 の部分を 200 に変更します。

「完了」をクリックします。
結果、タイトル200以降の残りの51レコードが表示されました。

3.ループみたいな感じでいっぺんに取得する

(1)大まかな流れ

①サイト情報を取得する部分を関数化します。関数はオフセット値を引数に取ります。
②リストを作成します。リストにはOffsetに指定する数値(1,200,400…)をセットします。
③リストのオフセット値に従って①の関数を実行するようにします

(2)関数を作成する

先ほど作成したクエリを詳細エディターを開いて一部変更して関数化します。

//オフセット値を入力
(v as number) =>
let
    //※サーバー名とサイトID、apiキーは実際のものに変更する
    url = "http://localhost/api/items/151/get",
    api = "abc12345",
    requestJson = Json.FromValue([
        ApiKey = api,
        Offset = v,
        View = [
            ColumnSorterHash = [ResultId = "asc" ]
        ]
    ]),
    
    res = Web.Contents(url,[
        Headers = [#"Content-Type" = "application/json"],
        Content = requestJson
    ]),
    res_json = Json.Document(res),
    Response = res_json[Response],
    Data = Response[Data],
    テーブルに変換済み = Table.FromList(Data, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    returnTable = Table.ExpandRecordColumn(テーブルに変換済み, "Column1", {"ResultId", "Title"}, {"ResultId", "Title"})
in
    returnTable

すると、パラメーターを入力する関数の装いになります。
クエリ名を「テーブル情報取得」としました。
0とか200とか入力してみて試してみたりして、ちゃんと動くことを確認します。

コードの変更した箇所は、
①一番上に (v as number) => を追加
②jsonRequest のOffsetのところを引数名に変更
 Offset = v,
③最後のステップ名をreturnTableとした(なんとなくかっこよくしただけ)。

(3)リストを利用してループみたいな処理のクエリを作成する

リストを作成します。

①空のクエリを作成する

②数式バーに = {0..3} と入力する。すると、縦方向に0,1,2,3と数字が並んだ「リスト」ができます。
※ここは対象とするテーブルが大きい場合はもっと大きくする。今回はこんなもんで。

④「テーブルへの変換」ボタンをクリックして、テーブルに変換します。

③オフセット値の列を作成します。
リボン「列の追加」の「カスタム列」をクリック
= [Column1] * 200
と入力します。
すると、0,200,400…の200の倍数の列ができます。

④ここで(2)で作成したカスタム関数を使用します。
リボン「列の追加」の「カスタム列」をクリック。
= テーブル情報取得([カスタム])
と入力します。
列名は「情報取得」としました。

⑤エラーが出ている行を削除します。
情報取得の列のところで右クリック>「エラーの削除」

⑥展開します。
展開ボタンクリックで、必要な列を展開します。
※今回カスタム関数でResultIdとタイトルしか持ってきていないので、寂しい状況となっています。

⑦展開されました。Column1とカスタムの列を削除します。

⑧「閉じて読み込む」をクリックし、ワークシートに出力します。

⑨ワークシートに出力されました。
テスト1~テスト250まで出力されています。

4.最後に

おもにこちらの記事を参考とさせていただいています。
[Power Query] for ループのような処理を Power Query で行う方法

ありがとうございました。

作りたてほやほやで実践では使っていないので、後日追記するかもしれません。お読みいただきありがとうございました。

5.参考文献、記事

プリザンター公式より

開発者向け機能:API:APIキーの作成

★開発者向け機能:JSONデータレイアウト:View

項目名とデータベース上のカラム名の対応

参考とさせていただいた記事。ありがとうございました。

VBAは嫌なのでPleasanter APIからPower QueryでExcelに割振りたいと思います。(+Power BI連携も)

[Power Query] for ループのような処理を Power Query で行う方法

[Power BI] Power Query の Web.Contents 関数でREST APIを使う(仮)

内部リンク

プリザンターPowerQuery連携シリーズ
【pleasanter/PowerQuery】プリザンターの情報をパワークエリで取得する①
【pleasanter/PowerQuery】プリザンターの情報をパワークエリで取得する②取得条件の指定方法
【pleasanter/PowerQuery】プリザンターの情報をパワークエリで取得する③上限値以上のレコードを連続で取得する
【pleasanter/PowerQuery】プリザンターの情報をパワークエリで取得する④ユーザーテーブルとマージ

プリザンザンターVBAエクスポートシリーズ
【pleasanter/VBA】エクセルからプリザンターのデータを取得する
【pleasanter/VBA】エクセルからプリザンターのデータを取得する②絞り込み条件の指定
【pleasanter/VBA】エクセルからプリザンターのデータを取得する③変数で絞り込み条件を指定する
【pleasanter/VBA】エクスポート④絞り込み条件で〇〇を含むを指定する
【pleasanter/VBA】エクスポート⑤並べ替え
【pleasanter/VBA】エクスポート⑥表示名を出したい
【pleasanter/VBA】エクスポート⑦データがちょん切れる時の対応 Offset
【pleasanter/VBA】エクスポート⑧出力される日付を文字列ではなく日付時刻型で出したい
【pleasanter/VBA】エクスポート⑨汎用ツールを作ってみた
【pleasanter/VBA】エクスポート⑩汎用ツール完全版

VBAでインポート
【pleasanter/VBA】エクセルからプリザンターへデータを追加、更新する~import~

コメント

タイトルとURLをコピーしました