ユーザマニュアル





2024/07/12

MANUAL

FAQ:バッチ処理で複数レコードの添付ファイルを一括ダウンロードしたい

## 回答 [複数レコード取得API](/ja/manual/api-record-get-multi)[添付ファイル取得API](/ja/manual/api-attachment-get)を使用してください。 --- ## 概要 バッチ処理であるテーブルの複数レコードに添付された添付ファイルをダウンロードしたい場合は、[複数レコード取得API](/ja/manual/api-record-get-multi)と[添付ファイル取得API](/ja/manual/api-attachment-get)を使用します。本ページではPowerShellでのバッチ処理を紹介します。 ## 制限事項 1. 指定可能なテーブルは1つです。 1. 取得可能な添付ファイル項目は1つです。 ## 操作手順 1. テーブルを作成し、レコードにファイルを添付してください。 1. Windows PowerShellを開き、以下のスクリプトを記載してください。ご利用環境に合わせて、「変数定義箇所」を修正してください。 1. 作成したPowerShellを実行してください。 ### 実行結果 C:WorksにレコードIDが記載されたフォルダが作成され、配下に添付ファイルA項目に添付されているファイルがダウンロードされています。 ![image](https://pleasanter.org/binaries/641b9aad7aed48c38cd285cb2f9bf814) ![image](https://pleasanter.org/binaries/54ff1f3e6e1140079014409c36724852) ## サンプルコード ##### PowerShell ``` <# ***************************** 変数定義箇所 ユーザは変更する必要がある ***************************** #> # ダウンロード先Path(「C:\work」のように指定) $toPath = '****' # Pleasanter上の(プロトコル+ドメイン「https://pleasanter.net/fs」のように指定) $baseUri = '****' # APIキー $apiKey = '****' # テーブルのサイトID $siteId = '9999' # Offsetを初期化 $offSet = 0 # ApiVersionを設定 $apiVersion = 9999 # Methodを設定 $method = '****' # ContentTypeを設定 $contentType = '****' # 取得したい添付ファイル項目を選択する $attachmentItem = '****' <# ***************************** ロジック定義箇所 ユーザは変更する必要がない ***************************** #> try { # ファイルをダウンロードする処理 do { # JSONの中身 $jsonData = @{ 'ApiVersion' = $apiVersion 'ApiKey' = $apiKey 'Offset' = $offSet } # テキスト形式に変換 $json = $jsonData|ConvertTo-Json # URIを設定 $itemUri = $baseUri + '/api/items/' + $siteId + '/get' # WEBページにアクセスし応答を代入 $responseData = Invoke-WebRequest -Uri $itemUri -ContentType $contentType -Method $method -Body $json # 処理で使う情報の1階層上までを代入 $response = ($responseData.Content|ConvertFrom-Json).Response # 1ページあたりに保有できるレコード数を代入 $pageSize = $response.PageSize # テーブルに記録されている全レコード数を代入 $totalCount = $response.TotalCount # レコード情報を代入 $records = $response.Data # レコード単位の反復処理 foreach ($record in $records) { # レコードのResultIdを代入 $id = $record.ResultId # ダウンロード先フォルダパスを代入 $folderPath = $toPath + '\' + $id # フォルダが存在しない場合処理を続行 if (-not(Test-Path $folderPath)) { # ダウンロード先フォルダを作成 New-Item -Path $folderPath -Type Directory # フォルダが存在する場合 } else { write-host 'フォルダが存在します' } # 応答のAttachmentsHashの中身を代入 $recordLinks = $record.AttachmentsHash # データ単位の反復処理 foreach ($recordLink in $recordLinks){ # AttachmentsAの中身を代入 $attachments = $recordLink.$attachmentItem # ファイル単位の反復処理 foreach ($attachment in $attachments) { # ファイル名を代入 $name = $attachment.Name # Guidを代入 $guId = $attachment.Guid # ダウンロード元にファイルが存在していれば処理を続行 if (-not($name -eq $null)) { # GUIDをもとにダウンロード元Pathを代入 $uri = $baseUri + '/api/binaries/' + $guId + '/get' # WEBページにアクセスし応答を代入 $responseData = Invoke-WebRequest -Uri $uri -ContentType $contentType -Method $method -Body $json # 各ファイルのBase64を代入 $base64 = ($responseData.Content|ConvertFrom-Json).Response.Base64 # $base64をデコード $byte = [System.Convert]::FromBase64String($base64) # 出力先のファイル名を代入 $toFileName = $toPath + '\' + $id + '\' + $name # ファイルが存在しない場合処理を続行 if (-not(Test-Path $toFileName)) { # ファイルをダウンロード先に作成 New-Item -Path $folderPath -Name $name -Type File # ダウンロード先のファイルに$srcを書き込む [System.IO.File]::WriteAllBytes($folderPath + '\' + $name,$byte) # ファイルが存在する場合 } else { Write-Host 'ファイルが存在します' } } } } } $offSet = $offSet + $pageSize } while ($totalCount -ge $offSet) write-host 'ダウンロードが完了いたしました' } catch { $_.Exception.Response } ``` ## 関連情報 <div id="ManualList"><ul><li><a href="/ja/manual/api-record-get-multi">開発者向け機能:API:テーブル操作:複数レコード取得</a><span>2023/12/14 up</span></li> <li><a href="/ja/manual/api-attachment-get">開発者向け機能:API:テーブル操作:添付ファイル取得</a><span>2023/08/17 up</span></li></ul></article></div><input id="SearchTextHidden" type="hidden" value="" />
TOP
このページをシェアする
記載された商品名、各製品名は各社の登録商標または商標です。 © Implem Inc.