次の方法で共有


サンプル: Dataverse SDK for .NET を使用したファイル操作

この .NET 6.0 のサンプルでは、Dataverse SDK for .NET を使用してファイル列の操作を実行する方法を説明します。

このサンプルでは、Microsoft.PowerPlatform.Dataverse.Client.ServiceClient を使用します。

前提条件

  • Microsoft Visual Studio 2022
  • システム管理者権限またはシステムカスタマイザー権限を持つ Dataverse へのアクセス。

サンプルを実行する方法

  1. PowerApps-サンプル リポジトリをクローンまたはダウンロードします。

  2. Visual Studio 2022 を使用して PowerApps-Samples\dataverse\orgsvc\C#-NETCore\FileOperations\FileOperations.sln ファイルを開きます。

  3. appsettings.json ファイルを編集します。 接続文字列 UrlUsername のパラメーターをテスト環境に応じて適切に設定します。

    環境の Url は、Power Platform 管理センターで確認することができます。 形式は https://<environment-name>.crm.dynamics.com です。

  4. ソリューションをビルドし、目的のプロジェクトを実行します。

サンプルを実行すると、既定のブラウザーで、環境ユーザー アカウントを選択してパスワードを入力するように求められます。 サンプルを実行するたびにこの操作を行う必要がないように、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 静的メソッドを使用します。

  1. InitializeFileBlocksUploadRequest Class でアップロードを初期化する
  2. 応答を InitializeFileBlocksUploadResponse Class で処理し、以降のすべてのリクエストで使用される FileContinuationToken を取得します。
  3. UploadFile メソッドは fileColumnMaxSizeInKb というパラメータを受け取り、その値を使ってファイルサイズをテストします。 ファイルがファイル列の構成された制限よりも大きい場合、エラーがスローされます。
  4. ファイルを 4MB のブロックに分割し、各ブロックを UploadBlockRequest Class で送信します。 各インスタンスには、ブロックを一意に識別するために base64 でエンコードされた文字列が含まれている必要があります。 このリクエストには、処理するレスポンス値がありません。
  5. すべてのブロックが送信された後、base64 エンコードされた文字列値の配列で CommitFileBlocksUploadRequest Class を使用し、処理を確定します。
  6. 応答を CommitFileBlocksUploadResponse Class で処理し、ファイルの削除に使用する FileId 値を取得します。

ファイルのダウンロード

取引先企業レコードの sample_FileColumn ファイル列にアップロードされた 25MB.pdf という名前の PDF ファイルをダウンロードするために、このサンプルでは、次の要求を行うために必要なすべてのパラメータを受け入れる DownloadFile 静的メソッドを使用しています。

  1. ファイルのアップロードに成功した場合、InitializeFileBlocksDownloadRequest Class でダウンロードを初期化します
  2. 応答を InitializeFileBlocksDownloadResponse クラス で処理し、以降のすべてのリクエストで使用される FileContinuationToken を取得します。
  3. ダウンロードされるファイルの部分を取り込むために List<byte> 変数をインスタンス化します。
  4. DownloadBlockRequest Class を使用した複数回のリクエストで、4MB のブロック単位でファイルをダウンロードします。
  5. 各応答を DownloadBlockResponse クラス で処理し、Data プロパティから部分 byte[] を取得します。 その一部を List<byte> に追加します。
  6. すべてのブロックを受信した後、List<byte> を配列として返します。
  7. 現在のディレクトリに保存されます。 ファイルを開いて、正しくアップロードおよびダウンロードされたことを確認できます。

ファイルの削除

ファイルが正常にアップロードされた場合は、DeleteFileRequest クラス を使用して、CommitFileBlocksUploadResponse が返す FileId の値を使ってファイルを削除します。 このリクエストには、処理するレスポンス値がありません。

クリーンアップ

サンプルを実行する前の状態にするために、次の処理を行います:

  • 取引先企業レコードの削除
  • ファイル列の削除

関連情報

ファイル列のデータを使用する
サンプル: Dataverse Web API を使用したファイル操作
ファイル列のデータを使用する
サンプル: Dataverse SDK for .NET を使用したファイル操作