サンプル: Dataverse SDK for .NET を使用したファイル操作
この .NET 6.0 のサンプルでは、Dataverse SDK for .NET を使用してファイル列の操作を実行する方法を説明します。
このサンプルでは、Microsoft.PowerPlatform.Dataverse.Client.ServiceClient を使用します。
前提条件
- Microsoft Visual Studio 2022
- システム管理者権限またはシステムカスタマイザー権限を持つ Dataverse へのアクセス。
サンプルを実行する方法
PowerApps-サンプル リポジトリをクローンまたはダウンロードします。
Visual Studio 2022 を使用して
PowerApps-Samples\dataverse\orgsvc\C#-NETCore\FileOperations\FileOperations.sln
ファイルを開きます。appsettings.json ファイルを編集します。 接続文字列
Url
とUsername
のパラメーターをテスト環境に応じて適切に設定します。環境の Url は、Power Platform 管理センターで確認することができます。 形式は https://<environment-name>.crm.dynamics.com です。
ソリューションをビルドし、目的のプロジェクトを実行します。
サンプルを実行すると、既定のブラウザーで、環境ユーザー アカウントを選択してパスワードを入力するように求められます。 サンプルを実行するたびにこの操作を行う必要がないように、appsettings.json ファイルの接続文字列にパスワードパラメータを挿入してください。 例:
{
"ConnectionStrings": {
"default": "AuthType=OAuth;Url=https://myorg.crm.dynamics.com;Username=someone@myorg.onmicrosoft.com;Password=mypassword;RedirectUri=http://localhost;AppId=51f81489-12ee-4a9e-aaae-a2591f45987d;LoginPrompt=Auto"
}
}
アプリケーション コードでの接続文字列の使用については、次の重要な情報をお読みください。
重要
Microsoft では、利用可能な最も安全な認証フローを使用することをお勧めします。 この記事で説明する認証フローは、アプリケーションに対する非常に高い信頼を必要とし、他のフローには存在しないリスクを伴います。 このフローは、マネージド ID など、他のより安全なフローが実行できない場合にのみ使用してください。
チップ
DATAVERSE_APPSETTINGS というユーザー環境変数に、コンピューターの任意の場所に保存されている appsettings.json ファイルのパスを設定することができます。 環境変数が存在し、null でない場合、サンプルはその appsettings ファイルを使用します。 変数を有効にするには、変数を定義した後、必ずログアウトして再度ログインしてください。 環境変数を設定するには、設定 > システム > 概要にアクセスし、高度なシステム設定を選択し、環境変数を選択します。
サンプル出力
出力のサンプル次のようになります:
Creating file column named 'sample_FileColumn' on the account table ...
Created file column named 'sample_FileColumn' in the account table.
Created account record with accountid:5fb4f993-7c55-ed11-bba3-000d3a9933c9
Uploading file Files\25mb.pdf ...
Uploaded file Files\25mb.pdf
Downloading file from accounts(5fb4f993-7c55-ed11-bba3-000d3a9933c9)/sample_filecolumn ...
Downloaded the file to E:\GitHub\PowerApps-Samples\dataverse\webapi\C#-NETx\FileOperations\FileOperationsWithActions\bin\Debug\net6.0//downloaded-25mb.pdf.
Deleted the file using FileId.
Deleted the account record.
Deleting the file column named 'sample_filecolumn' on the account table ...
Deleted the file column named 'sample_filecolumn' in the account table.
実際の動作
このサンプルのコードは、Program.cs ファイルに含まれています。
プロジェクトは Utility
クラスを使用して、スキーマ データの作成または取得を含む操作を実行します。 このクラスは Utility.cs ファイルにあります。
このプロジェクトは、次の操作を実行します:
ファイル列の作成
Utility.CreateFileColumn
関数は、取引先企業テーブルに sample_FileColumn
という名前のファイル列を 10MB の MaxSizeInKb
値で作成します。
ファイル列の更新
Utility.UpdateFileColumnMaxSizeInKB
関数は、sample_FileColumn
ファイル列の MaxSizeInKb
値を 100MB に更新します。
ヒント: ファイルの列サイズが小さすぎるために何らかのエラー シナリオを作成する場合は、この行をコメント アウトしてください。
ファイル列の MaxSizeInKb 値を取得します
Utility.GetFileColumnMaxSizeInKb
は、sample_FileColumn
ファイル列の MaxSizeInKb
値を取得し、fileColumnMaxSizeInKb
という変数に格納する。
取引先企業レコードを作成する
ファイル列にファイルをアップロードする前に、レコードが存在している必要があります。
ファイルのアップロード
25MB.pdf
という名前の PDF ファイルを取引先企業レコードの sample_FileColumn
ファイル列にアップロードするために、このサンプルでは、以下のリクエストに必要なすべてのパラメータを受け付ける UploadFile
静的メソッドを使用します。
- InitializeFileBlocksUploadRequest Class でアップロードを初期化する
- 応答を InitializeFileBlocksUploadResponse Class で処理し、以降のすべてのリクエストで使用される FileContinuationToken を取得します。
UploadFile
メソッドはfileColumnMaxSizeInKb
というパラメータを受け取り、その値を使ってファイルサイズをテストします。 ファイルがファイル列の構成された制限よりも大きい場合、エラーがスローされます。- ファイルを 4MB のブロックに分割し、各ブロックを UploadBlockRequest Class で送信します。 各インスタンスには、ブロックを一意に識別するために base64 でエンコードされた文字列が含まれている必要があります。 このリクエストには、処理するレスポンス値がありません。
- すべてのブロックが送信された後、base64 エンコードされた文字列値の配列で CommitFileBlocksUploadRequest Class を使用し、処理を確定します。
- 応答を CommitFileBlocksUploadResponse Class で処理し、ファイルの削除に使用する
FileId
値を取得します。
ファイルのダウンロード
取引先企業レコードの sample_FileColumn
ファイル列にアップロードされた 25MB.pdf
という名前の PDF ファイルをダウンロードするために、このサンプルでは、次の要求を行うために必要なすべてのパラメータを受け入れる DownloadFile
静的メソッドを使用しています。
- ファイルのアップロードに成功した場合、InitializeFileBlocksDownloadRequest Class でダウンロードを初期化します
- 応答を InitializeFileBlocksDownloadResponse クラス で処理し、以降のすべてのリクエストで使用される
FileContinuationToken
を取得します。 - ダウンロードされるファイルの部分を取り込むために
List<byte>
変数をインスタンス化します。 - DownloadBlockRequest Class を使用した複数回のリクエストで、4MB のブロック単位でファイルをダウンロードします。
- 各応答を DownloadBlockResponse クラス で処理し、
Data
プロパティから部分byte[]
を取得します。 その一部をList<byte>
に追加します。 - すべてのブロックを受信した後、
List<byte>
を配列として返します。 - 現在のディレクトリに保存されます。 ファイルを開いて、正しくアップロードおよびダウンロードされたことを確認できます。
ファイルの削除
ファイルが正常にアップロードされた場合は、DeleteFileRequest クラス を使用して、CommitFileBlocksUploadResponse
が返す FileId
の値を使ってファイルを削除します。 このリクエストには、処理するレスポンス値がありません。
クリーンアップ
サンプルを実行する前の状態にするために、次の処理を行います:
- 取引先企業レコードの削除
- ファイル列の削除
関連情報
ファイル列のデータを使用する
サンプル: Dataverse Web API を使用したファイル操作
ファイル列のデータを使用する
サンプル: Dataverse SDK for .NET を使用したファイル操作