イメージ列またはファイル列を使用して、Microsoft Dataverse にイメージ データを格納できます。 Dataverse のイメージ列には、アプリケーション内でのイメージの表示をサポートするように設計された特別な動作と制限があり、イメージ列を含むファイル列に同じ API の多くを使用できます。
次の表は、画像列とファイル列の違いの一部を示しています。
| Image | File | |
|---|---|---|
| ファイル サイズ | 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 メソッドは、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.");
}
}
詳細情報:
画像ファイルの種類
イメージ列には、次のバイナリ イメージ タイプが格納されます。
| ファイル形式 | MIME の種類 | ファイル拡張子 |
|---|---|---|
| グラフィックス交換形式 | 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列の値を使用して、フルサイズのイメージをサポートするイメージ列の一覧を取得できます。
static 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"]}");
}
}
出力
account.sample_sampleimage
スキーマ定義のクエリを実行して、 ImageAttributeMetadata.CanStoreFullImage プロパティ が true の列を返すこともできます。 詳細については、「 クエリ スキーマ定義」を参照してください。
サムネイル サイズの画像のサイズ変更ルール
サムネイル サイズの画像を生成するために、Dataverse は次の規則に従って画像をトリミングし、四角形にサイズ変更します。
- 画像の少なくとも 1 つの辺が 144 ピクセルを超える場合、Dataverse は中央の画像を 144 x 144 ピクセルにトリミングします。
- 画像の両側が 144 ピクセルより小さい場合、Dataverse は画像の四角形を最小の辺にトリミングします。
次の表に2つの例を示します。
| 選択前 | 選択後 |
|---|---|
300x428 |
144x144 |
91x130 |
91x91 |
プライマリ イメージ
各テーブルには複数のイメージ列を含めることができますが、 プライマリ イメージとして定義できるのは 1 つのイメージ列のみです。 プライマリ イメージは、作成操作を使用してのみ設定できます。 詳細については、「 作成操作のプライマリ イメージのみを設定する」を参照してください。
プライマリ イメージを表すイメージ列を表す、ImageAttributeMetadata.IsPrimaryImage プロパティ コントロール。
EntityMetadata.PrimaryImageAttribute プロパティ は、テーブルのプライマリ イメージである画像れるの論理名を返します。
と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"]}");
}
}
出力
account.sample_sampleimage
URL のダウンロード
各画像列には次のコンパニオン列がありますが、いずれも Power Apps デザイナー内には現れません。
| Column | タイプ | 名前付け規則 | Description |
|---|---|---|---|
| 画像 ID | 一意識別子 | <image column name>Id |
イメージの一意の識別子。 |
| タイム スタンプ | BigInt | <image column name>_Timestamp |
イメージが最後に更新した時を表します。 この値は、クライアントが以前に取得されたキャッシュ バージョンを使用するのではなく、最新バージョンのイメージがダウンロードされるようにするのに役立ちます。 |
| URL | 文字列 | <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 に設定することで、画像を削除できます。
image 属性の値を null に設定し、エンティティを更新します。 詳細については、「 基本的な更新プログラム」を参照してください。
参照
ファイルおよび画像の概要
コードを使って画像列定義を操作する
サンプル: Dataverse .NET 用 SDK を使用した画像操作
サンプル: Dataverse Web API を使用した画像操作
ファイル列のデータを使用する