ファイル列のデータを使用する
画像列またはファイル列を使用して、Dataverse に画像データを保存できます。 画像列を含むファイル列には、多くの API を使用できます。 画像列には、アプリケーション内でのイメージの表示をサポートするために、いくつかの特別な動作と制限があります。
次の表は、画像列とファイル列の違いの一部を示しています。
Image | File | |
---|---|---|
File Size | 30 MB に制限されています。 | 最大 10 GB。 API は最大 10 GB のサイズのファイルを処理できますが、 Power Apps クライアント コントロールは現在、最大128 MBのファイルのみをサポートしています。 これらのコントロールを使用するときに128 MBの値を超えると、ファイルのアップロードまたはダウンロードでエラーが発生します。 |
ファイルの種類 | 画像ファイルの種類 のみ | Organization.BlockedAttachments 値 で許可されているすべてのファイルの種類。 詳細: Dataverse のテーブルの種類 |
更新で設定 | 更新を使用して、画像列データを他のレコード データと一緒に設定できます。 | ファイル列のプロパティには、ファイルを個別にアップロードすることしかできません。 |
更新で削除 | 属性またはプロパティを null に設定して画像列データを削除し、レコードを更新できます。 詳細: イメージの削除 |
DeleteFile メッセージを使用するか、Web API を使用して特定の列に DELETE リクエストを送信することによってのみ、ファイル列データを削除できます。 詳細: ファイルの削除 |
作成で設定 | 画像列が 主画像 の場合、作成で他のレコードデータと画像データをセットすることができます。 詳細: 主画像 | レコードが作成された後、ファイル列のプロパティには、ファイルを個別にアップロードすることしかできません。 |
取得で返す | 取得を使用して、他のレコード データと一緒にサムネイル サイズの画像を取得できます。 | 返された値はファイル ID です。 詳細: 取得時の動作 |
ダウンロード URL | 各画像列には、画像ファイルをダウンロードできるアプリケーションに含めることができる相対 URL を含む文字列列があります。 詳細: URL をダウンロードする | ダウンロード URL を含む文字列列はありませんが、Web API から直接ファイルをダウンロードする URL を作成できます。 詳細: Web API を使用して 1 回のリクエストでファイルをダウンロードする |
画像の最大サイズ
ファイル列と同様に、MaxSizeInKb
プロパティを使用して画像列に格納されるデータの最大サイズを指定できます。 しかし、許可される最大バッチ サイズは 30 MB です。
大きすぎるファイルをアップロードしようとすると、次のエラーが発生します:
名前:
ProcessImageFailure
コード:0x80072553
番号:-2147015341
メッセージ:Error occured when processing image. Reason: File size is too big. MaxSize: 0 MB, Uploaded filesize: 0 MB.
次の例を使用して、最大ファイル サイズを確認できます:
次の静的 GetImageColumnMaxSizeInKb
メソッドは、ImageAttributeMetadata 列の MaxSizeInKB
値を返します。
/// <summary>
/// Retrieves the MaxSizeInKb property of an image column.
/// </summary>
/// <param name="service">IOrganizationService</param>
/// <param name="entityLogicalName">The logical name of the table that has the column</param>
/// <param name="imageColumnLogicalName">The logical name of the image column.</param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public static int GetImageColumnMaxSizeInKb(
IOrganizationService service,
string entityLogicalName,
string imageColumnLogicalName)
{
RetrieveAttributeRequest retrieveAttributeRequest = new() {
EntityLogicalName = entityLogicalName,
LogicalName = imageColumnLogicalName
};
RetrieveAttributeResponse retrieveAttributeResponse;
try
{
retrieveAttributeResponse = (RetrieveAttributeResponse)service.Execute(retrieveAttributeRequest);
}
catch (Exception)
{
throw;
}
if (retrieveAttributeResponse.AttributeMetadata is ImageAttributeMetadata imageColumn)
{
return imageColumn.MaxSizeInKB.Value;
}
else
{
throw new Exception($"{entityLogicalName}.{imageColumnLogicalName} is not a image column.");
}
}
詳細情報:
画像ファイルの種類
イメージ列には、次のバイナリ イメージ タイプが格納されます。
File Format | MIME の種類 | ファイル拡張子 |
---|---|---|
JPEグラフィックス交換形式 | image/gif |
.gif |
共同写真専門家グループのイメージ | image/jpeg |
.jpg , .jpeg |
ビットマップ ファイル | image/bmp |
.bmp |
ポータブル ネットワーク グラフィックス | image/png |
.png |
これらのタイプ以外のファイルを保存しようとすると、次のエラーが発生します。
名前:
ProcessImageFailure
コード:0x80072553
番号:-2147015341
メッセージ:Error occured when processing image. Reason: Update image properties failed for objectid: <id of record>, logicalName: <logical name of table>, attribute: <logical name of image column
フルサイズとサムネイルサイズの画像
画像列の値が設定されると、Dataverse は、アプリケーションでアイコンとして使用するのに適したサムネイル サイズの画像を自動的に生成します。
画像列がフルサイズの画像を保存するように構成されている場合、構成された MaxSizeInKb
までのファイルを、サムネイル サイズの画像とは別に保存およびダウンロードできます。 ImageAttributeMetadata.CanStoreFullImage プロパティ は、画像列にフルサイズの画像を保存するかどうかを制御します。
フルサイズの画像をサポートする画像列を検出する
画像属性構成 (AttributeImageConfig) テーブル をクエリして、parententitylogicalname
、attributelogicalname
、および canstorefullimage
列の値を使用して、フルサイズの画像をサポートする画像列のリストを取得できます。
静的 PrintFullSizedImageColumns
メソッドは、フルサイズの画像を格納できるテーブルと画像列の名前を書き込みます。
static void PrintFullSizedImageColumns(IOrganizationService service)
{
QueryExpression query = new QueryExpression("attributeimageconfig")
{
ColumnSet = new ColumnSet("parententitylogicalname", "attributelogicalname"),
Criteria = new FilterExpression(LogicalOperator.And)
{
Conditions =
{
new ConditionExpression(
attributeName: "canstorefullimage",
conditionOperator: ConditionOperator.Equal,
value: true)
}
}
};
EntityCollection response = service.RetrieveMultiple(query);
foreach (Entity record in response.Entities)
{
Console.WriteLine($"{record["parententitylogicalname"]}.{record["attributelogicalname"]}");
}
}
Output
account.sample_sampleimage
スキーマ定義をクエリして、ImageAttributeMetadata.CanStoreFullImage プロパティ が true のある列を返すこともできます。 詳細: セグメントクエリの定義
サムネイル サイズの画像のサイズ変更ルール
サムネイル サイズの画像を生成するには、Dataverse は次のルールに従って、画像をトリミングして正方形にサイズ変更します。
- 少なくとも 1 つの側面が 144 ピクセルより大きいイメージは中心で 144x144 に切り取られます。
- 両側が144未満のイメージは最小のサイドに正方形に切り取られます。
次の表に2つの例を示します。
次の日付より前 | 後 |
---|---|
300x428 |
144x144 |
91x130 |
91x91 |
プライマリ イメージ
各テーブルには複数の画像列を含めることができますが、プライマリ イメージ として定義できるのは 1 つの画像列のみです。 作成操作で設定できるのはプライマリ イメージのみです。 詳細: プライマリ イメージのみを作成用に設定できます
プライマリ イメージを表すイメージ列を表す、ImageAttributeMetadata.IsPrimaryImage プロパティ コントロール。
EntityMetadata.PrimaryImageAttribute プロパティ は、テーブルのプライマリ イメージである画像れるの論理名を返します。
エンティティ イメージ構成 (EntityImageConfig) テーブル を使用して、parententitylogicalname
と primaryimageattribute
列の値を使用して、現在のプライマリ イメージを表すイメージ列を特定します。
静的 PrintPrimaryImageColumns
以下のメソッドは、すべてのプライマリ イメージ列のテーブルとイメージの列名を書き込みます。
static void PrintPrimaryImageColumns(IOrganizationService service)
{
QueryExpression query = new QueryExpression("entityimageconfig")
{
ColumnSet = new ColumnSet("parententitylogicalname", "primaryimageattribute"),
};
EntityCollection response = service.RetrieveMultiple(query);
foreach (Entity record in response.Entities)
{
Console.WriteLine($"{record["parententitylogicalname"]}.{record["primaryimageattribute"]}");
}
}
Output
account.sample_sampleimage
Download URL
各画像列には次のコンパニオン列がありますが、いずれも Power Apps デザイナー内には現れません。
Column | タイプ | 名前付け規則 | Description |
---|---|---|---|
画像 ID | 一意識別子 | <image column name>Id |
イメージの一意の識別子。 |
タイム スタンプ | BigInt | <image column name>_Timestamp |
イメージが最後に更新した時を表します。 この値は、クライアントが以前に取得されたキャッシュ バージョンを使用するのではなく、最新バージョンのイメージがダウンロードされるようにするのに役立ちます。 |
[URL] | string | <image column name>_URL |
画像のサムネイル サイズ バージョンをダウンロードするための相対 URL |
イメージ ID とタイム スタンプの列の値には、URL 文字列の列の値内で使用される場合を除いて、使用例はありません。
レコードの列にデータが含まれている場合、ダウンロード URL は次の形式を使用した相対 URL になります。
/Image/download.aspx?Entity=<entity logical name>&Attribute=<image column logical name>&Id=<image id value>&Timestamp=<time stamp value>
この値を組織の URI に追加して、サムネイル サイズの画像ファイルのダウンロードに使用できるURLを作成できます。 例:
https://yourorg.crm.dynamics.com/Image/download.aspx?Entity=account&Attribute=sample_imagecolumn&Id=7a4814f9-b0b8-ea11-a812-000d3a122b89&Timestamp=637388308718090885
フルサイズの画像をダウンロードする URL
画像列がフルサイズの画像を保存するように構成されている場合、URLに &Full=true
を追加すると、リンクからフルサイズの画像がダウンロードされます。 例:
https://yourorg.crm.dynamics.com/Image/download.aspx?Entity=account&Attribute=sample_imagecolumn&Id=7a4814f9-b0b8-ea11-a812-000d3a122b89&Timestamp=637388308718090885&Full=true
フルサイズの画像を格納するように列が構成されていない場合、データは返されません。
レコードで画像データを使用する
レコードを操作する場合、画像データを操作する方法は、SDK と Web API のどちらを使用しているかによって異なります。
次の静的 RetrieveAndUpdateImageColumn
メソッドは、列から byte[]
イメージの値を取得し、それをローカルに保存して、新しいイメージをアップロードします。
static void RetrieveAndUpdateImageColumn(
IOrganizationService service,
Guid accountid,
string imageColumnLogicalName)
{
// Retrieve account with image
Entity account = service.Retrieve(
entityName: "account",
id: accountid,
columnSet: new ColumnSet(imageColumnLogicalName));
// Save the image retrieved
File.WriteAllBytes(
path: "original_image.png",
bytes: account.GetAttributeValue<byte[]>(imageColumnLogicalName));
// Instantiate a new entity for update with new image
Entity accountForUpdate = new("account") {
Attributes = {
{ "accountid", accountid },
{ imageColumnLogicalName , File.ReadAllBytes("new_image.png")}
}
};
// Update the account
service.Update(accountForUpdate);
}
注意
ColumnSet.AllColumns プロパティ を true に設定すると、画像列は含まれません。 パフォーマンス上の理由から、イメージ データを取得することを明示的に指定する必要があります。
詳細情報:
プライマリ イメージのみを作成用に設定できます
レコードを作成するときは、現在のプライマリ イメージ列の値のみを設定できます。 他の画像列の値を設定しようとすると、次のエラーが発生します。
名前:
CannotUploadNonPrimaryImageAttributeOnCreate
コード:0x80090487
番号:-2146892665
メッセージ:Non-primary image attribute <image column logical name> of entity <table logical name> is not allowed to upload during Create operation.
詳細: 主画像
サムネイル画像のみ取得可能
レコード プロパティを介してアクセスする画像データは、常にサムネイル サイズの画像になります。 フルサイズの画像にアクセスするには、ダウンロードする必要があります。 詳細: イメージをダウンロードする
画像のアップロード
ファイルのアップロードに使用するのと同じ API を使用して、画像を個別にアップロードします。 詳細: ファイルの更新
イメージのダウンロード
ファイルのダウンロードに使用するのと同じ API を使用して画像をダウンロードしますが、次の違いに注意してください。
Dataverse メッセージの使用
InitializeFileBlocksDownload
メッセージと DownloadBlock
メッセージを使用すると、画像列がフルサイズの画像をサポートしていれば、常にフルサイズの画像がダウンロードされます。 この方法を使用してサムネイル サイズの画像をダウンロードすることはできません。 詳細: Dataverse メッセージを使用してファイルをダウンロードする
画像列がフルサイズの画像をサポートしていない場合、または画像がアップロードされたときに ImageAttributeMetadata.CanStoreFullImage プロパティ が false であった場合、次のエラーが返されます。
名前:
ObjectDoesNotExist
コード:0x80040217
番号:-2147220969
メッセージ:No FileAttachment records found for imagedescriptorId: <guid> for image attribute: <image column logical name> of <entity logical name> record with id <guid>.
Web API の使用
Dataverse メッセージを使用せずに Web API を使用して画像をダウンロードすると、デフォルトでサムネイル サイズの画像がダウンロードされます。 フルサイズの画像をダウンロードするには、このパラメーターを URL に追加する必要があります: ?size=full
。
画像列がフルサイズの画像をサポートしていない場合、または画像がアップロードされたときに ImageAttributeMetadata.CanStoreFullImage プロパティ が false であった場合、204 No Content
が返されます。
詳細: ファイルをダウンロードする
画像を削除する
他のプロパティの場合と同様に、レコードの画像列の値を null に設定することで、画像を削除できます。
単に画像属性の値を null に設定して、エンティティをアップロードします。 詳細情報: 基本アップデート
参照
ファイルおよび画像の概要
コードを使って画像列定義を操作する
サンプル: Dataverse SDK for .NET を使用したファイル操作
サンプル: Dataverse Web API を使用したファイル操作
ファイル列のデータを使用する