オートナンバー列を作成する
Microsoft Dataverse では、任意のテーブルにオートナンバー列を追加することができます。 Power Apps でオートナンバー列を作成するには、オートナンバー列を参照してください。
このトピックでは、プログラムでオートナンバー列を作成してシーケンシャル要素のシード値を設定する方法を説明します。 また、後からシードをリセットする必要がある場合はいつでも、次のレコードにシーケンス番号を設定する方法についてのトピックを表示します。
注意
エンティティとテーブルの違いがわかりませんか? Microsoft Dataverse で「開発者: 用語を理解する」を参照してください。
注意
シードの設定は任意です。 リシードする必要がない場合、シードを呼び出す必要はありません。
オートナンバー列は、AutoNumberFormat Property を使用することを除いては、StringAttributeMetadata Class を使用して文字列を作成するのと同じ方法で作成することができます。 プレースホルダーを構成することにより、シーケンス番号およびランダム文字列を含むパターンを定義するために、AutoNumberFormat プロパティを使用します。これにより生成される値の長さと種類を表示します。 特にオフラインのクライアントが自動付番を作成しようとしている場合、ランダム文字列は重複または競合を回避するのに役立ちます。
オートナンバー列を作成する場合、FormatName Property または Format Property 値は Text である必要があります。 これらは既定値であるため、通常、このプロパティは設定されません。 Email、Phone、TextArea、Url またはその他の existing formats などの、他の特殊なフォーマットを使用するオートナンバー列を作成することはできません。
シーケンシャル セグメントは SQL で生成されるため、一意性は SQL で保証されます。
注意
既存の形式テキスト列をオートナンバー形式に変更することができます。
モデル駆動型アプリの場合、レガシ Web クライアントでは、オートナンバー列にバインドされたフォームにコントロールを追加すると、コントロールは自動的に無効になり、エンド ユーザーがコントロールを編集できないフォームでは読み取り専用として動作します。 統一インターフェイスでは、オートナンバー列にバインドされたコントロールを明示的に無効に設定する必要があります。 フォーム上で列の初期値を設定しなかった場合、テーブルを保存した後にのみ値が設定されます。 オートナンバー処理は、ビューやグリッドなどの列の値に適用することができます。
例
次の例では、Web API と .NET 用 Dataverse SDK を使用して、new_Widget という名前のカスタム テーブル用の new_SerialNumber という名前の新しいオートナンバー列の作成方法を示します。次のような値になります: WID-00001-AB7LSFG-20170913070240。
Web API を使用してテーブル定義を作成・更新することができます。 詳細情報: Web API を使用してテーブルの定義を作成・更新する。
要求
POST [Organization URI]/api/data/v9.0/EntityDefinitions(LogicalName='new_widget')/Attributes HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
{
"AttributeType": "String",
"AttributeTypeName": {
"Value": "StringType"
},
"Description": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Serial Number of the widget.",
"LanguageCode": 1033
}
]
},
"DisplayName": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Serial Number",
"LanguageCode": 1033
}
]
},
"RequiredLevel": {
"Value": "None",
"CanBeChanged": true,
"ManagedPropertyLogicalName": "canmodifyrequirementlevelsettings"
},
"SchemaName": "new_SerialNumber",
"AutoNumberFormat": "WID-{SEQNUM:5}-{RANDSTRING:6}-{DATETIMEUTC:yyyyMMddhhmmss}",
"@odata.type": "Microsoft.Dynamics.CRM.StringAttributeMetadata",
"FormatName": {
"Value": "Text"
},
"MaxLength": 100
}
応答
HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [Organization URI]/api/data/v9.0/EntityDefinitions(402fa40f-287c-e511-80d2-00155d2a68d2)/Attributes(f01bef16-287c-e511-80d2-00155d2a68d2)
注意
オートナンバー値は、レコードの開始時にデータベースによって事前に選択されます。 レコードを開始してからキャンセルした場合、割り当てられた番号は使用されません。 この間に次の連続番号を持つ別のレコードが完了した場合は、レコードの自動付番にギャップが生じます。
AutoNumberFormat オプション
これらの例は、異なる結果を取得するための AutoNumberFormat Property の設定方法を示します:
| AutoNumberFormat 値 | 値の例 |
|---|---|
CAR-{SEQNUM:3}-{RANDSTRING:6} |
CAR-123-AB7LSF |
CNR-{RANDSTRING:4}-{SEQNUM:4} |
CNR-WXYZ-1000 |
{SEQNUM:6}-#-{RANDSTRING:3} |
123456-#-R3V |
KA-{SEQNUM:4} |
KA-0001 |
{SEQNUM:10} |
1234567890 |
QUO-{SEQNUM:3}#{RANDSTRING:3}#{RANDSTRING:5} |
QUO-123#ABC#PQ2ST |
QUO-{SEQNUM:7}{RANDSTRING:5} |
QUO-0001000P9G3R |
CAS-{SEQNUM:6}-{RANDSTRING:6}-{DATETIMEUTC:yyyyMMddhhmmss} |
CAS-002000-S1P0H0-20170913091544 |
CAS-{SEQNUM:6}-{DATETIMEUTC:yyyyMMddhh}-{RANDSTRING:6} |
CAS-002002-2017091309-HTZOUR |
CAS-{SEQNUM:6}-{DATETIMEUTC:yyyyMM}-{RANDSTRING:6}-{DATETIMEUTC:hhmmss} |
CAS-002000-201709-Z8M2Z6-110901 |
ランダム文字列のプレースホルダーは任意です。一つ以上のランダム文字列のプレースホルダーを含めることができます。 標準日付と時刻のフォーマット文字列 の datetime プレースホルダーのフォーマット値のいずれかを使用します。
文字列の長さ
次の表は、ランダムおよびシーケンスプレースホルダーの文字列の長さの値を示します。
| プレースホルダー | 文字列の長さ | シナリオを出力 |
|---|---|---|
{RANDSTRING:MIN_LENGTH} |
MIN_LENGTH の値は1 ~ 6の間です。 |
行を保存する際に、値が1 ~ 6の間の場合、オートナンバー列は定義された長さの任意の文字列を生成します。 7または7を超える場合に MIN_LENGTH 値を使用すると、「無効な引数」エラーが発生します。 |
{SEQNUM:MIN_LENGTH} |
MIN_LENGTH の最小値は1です。 数は、最小長を超えて増加し続けます。 |
行を保存する際に、MIN_LENGTH の数値がより大きい場合に、オートナンバー列は良好に動作し、かつ良好に動作し続けます。 |
シーケンス値のプレースホルダーの場合、MIN_LENGTH が最小長です。 2 になるように値を設定する場合、初期値は 01 で、100 番目の行の値は 100 です。 数は、最小長を超えて増加し続けます。 シーケンス値の長さの設定する際は、初期値に追加の 0 を追加することにより、自動生成された値に対して一定の長さを確立します。 絶対値は制限されません。 ランダム値のプレースホルダーは常に同じ長さです。
シーケンス値が割り当てられた最小長より大きくなるため、StringAttributeMetadata.MaxLength Property を調整してフォーマットされた値の長さに合わせる必要はありません。 値が MaxLength 値を超える場合、これを行う際に小さい値となり、将来エラーを生じさせる可能性があります。 シーケンス値の現実的な範囲に対して十分な余裕を残しているか確認します。
注意
カラムを作成する際は、プレースホルダーの値の検証は行われません。 エラーは、誤って設定されている AutoNumberFormat 値を使用するテーブルを保存しようとするときにのみ表示されます。
たとえば、ランダムな文字列の長さを 6 以上に指定した場合、新しいテーブルを作成したユーザーが、新しいオートナンバー列を含むテーブルを最初に保存しようとすると、無効な引数 エラーが発生します。
オートナンバー列を更新する
正しくない構成でオートナンバー列を作成するか、または既存のオートナンバー列を変更したい場合、AutoNumberFormat 値の列を更新できます。
次のコード スニペットは、.NET 用 SDK を使用してオートナンバー列を取得、変更、および更新するにはどうしたらよいかを説明します。
既存のオートナンバー列を変更するには、RetrieveAttributeRequest Class を使用して列を取得する必要があります。
// Create the retrieve request
var attributeRequest = new RetrieveAttributeRequest
{
EntityLogicalName = entityName.ToLower(),
LogicalName = "new_serialnumber",
RetrieveAsIfPublished = true
};
// Retrieve attribute response
var attributeResponse = (RetrieveAttributeResponse)_serviceProxy.Execute(attributeRequest);
次のコード スニペットでは、オートナンバー列の取得、変更、および更新について説明しています。
//Modify the retrieved autonumber column
AttributeMetadata retrievedAttributeMetadata = attributeResponse.AttributeMetadata;
//Modify the existing column by writing the format as per your requirement
retrievedAttributeMetadata.AutoNumberFormat = "CAR-{RANDSTRING:5}{SEQNUM:6}";
// Update the autonumber column
var updateRequest = new UpdateAttributeRequest
{
Attribute = retrievedAttributeMetadata,
EntityName = "newWidget",
};
// Execute the request
_serviceProxy.Execute(updateRequest);
シード値の設定
既定では、すべての自動付番のシーケンス値は 1000 から始まり、長さに応じて接頭辞は 0 を使います。 このように、値の長さは常に同じです。 初期値を変更したい場合、以下のAPIを使用して最初のシード値を変更し、シーケンスセグメントに使用される次の数を設定する必要があります。
たとえば、シーケンス番号の長さが5の場合、既定値の00001ではなく10000の初期値から開始することができます。 オートナンバリングカラムを作成した後に、別の開始値を選択したい場合は、SetAutoNumberSeed メッセージを使用します。 SDK アセンブリを使用する場合は SetAutoNumberSeedRequest Class を、Web API を使用する場合は SetAutoNumberSeed アクションを使用します。
AutoNumberSeed メッセージには以下のパラメーターがあります:
| 名前 | タイプ | 説明 |
|---|---|---|
EntityName |
文字列 | シードを設定する列を含むテーブルの論理名です。 |
AttributeName |
文字列 | シードを設定する列の論理名です。 |
Value |
int | 列の次のオートナンバーの値です。 |
注意
シードを設定しても、現在の環境では、指定した列の 現在の数値 が変わるだけです。 これは列の共通の 開始値 を意味するものではありません。 異なる環境にインストールされるとき、シード値はソリューションに含まれません。 開始番号をソリューションのインポート後に設定するには、ターゲット環境内の SetAutoNumberSeed メッセージを使用します。
SetAutoNumberSeed の例
次のサンプルでは、new_Widget というカスタム テーブルの new_SerialNumber という名前のオートナンバー列で、シードを 10000 に設定します。
Web API SetAutoNumberSeed アクションを使用します。
要求
POST [Organization URI]/api/data/v9.0/SetAutoNumberSeed HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
{
"EntityName": "new_Widget",
"AttributeName": "new_Serialnumber",
"Value": 10000
}
応答
HTTP/1.1 204 No Content
OData-Version: 4.0
コミュニティ ツール
自動付番マネージャ
XrmToolBox 用 自動付番マネージャ は、新規または既存の列にオートナンバー フォーマットを設定、更新、削除する UI を提供する Dataverse 用のコミュニティ駆動のツールです。
自動付番マネージャの詳細については、コミュニティ開発ツールの開発者ツールのトピックおよび anm.xrmtoolbox.com を参照してください。
注意
コミュニティ ツールは Dataverse の製品ではなく、コミュニティ ツールのサポートを拡張するものではありません。 このツールに関するご質問は、その発行元にお問い合わせください。 詳細: XrmToolBox。
関連項目
コードを使ってテーブル定義を操作する
テーブルの定義をカスタマイズする
注意
ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)
この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。
フィードバック
フィードバックの送信と表示