列定義を使って作業する
このトピックは、列定義 (属性メタデータ) に適用できるいくつかの一般的な操作について説明しています。
列を作成する
AttributeMetadata タイプの 1 つを定義、それを CreateAttributeRequest メッセージに渡すことで列 (属性) を作成します。
次のコード サンプルは、さまざまな種類の列に対して AttributeMetadata を定義し、それらを List<AttributeMetadata>
に追加します。 コードの最後で、列定義が CreateAttributeRequest クラスのインスタンスに渡され、その列は IOrganizationService.Execute を使用して作成されます メソッド。
次のサンプル コードでは現在のカスタマイズ接頭辞が「new」であると仮定しています。それが組織のソリューション発行者の既定のカスタマイズ接頭辞だからです。 実際には現実のソリューション コンテキストに沿ったソリューション発行者のカスタマイズ接頭辞を使うようにしてください。
// Create storage for new being created
var addedColumns = new List<AttributeMetadata>();
int languageCode = 1033; //English
// Create a yes/no column
var boolColumn = new BooleanAttributeMetadata
{
// Set base properties
SchemaName = "new_Boolean",
LogicalName = "new_boolean",
DisplayName = new Label("Sample Boolean", languageCode),
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
Description = new Label("Boolean Column", languageCode),
// Set extended properties
OptionSet = new BooleanOptionSetMetadata(
new OptionMetadata(new Label("True", languageCode), 1),
new OptionMetadata(new Label("False", languageCode), 0)
)
};
// Add to list
addedColumns.Add(boolColumn);
// Create a date time column
var dateTimeColumn = new DateTimeAttributeMetadata
{
// Set base properties
SchemaName = "new_Datetime",
LogicalName = "new_datetime",
DisplayName = new Label("Sample DateTime", languageCode),
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
Description = new Label("DateTime Column", languageCode),
// Set extended properties
Format = DateTimeFormat.DateOnly,
ImeMode = ImeMode.Disabled
};
// Add to list
addedColumns.Add(dateTimeColumn);
// Create a decimal column
var decimalColumn = new DecimalAttributeMetadata
{
// Set base properties
SchemaName = "new_Decimal",
LogicalName = "new_decimal",
DisplayName = new Label("Sample Decimal", languageCode),
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
Description = new Label("Decimal Column", languageCode),
// Set extended properties
MaxValue = 100,
MinValue = 0,
Precision = 1
};
// Add to list
addedColumns.Add(decimalColumn);
// Create a integer column
var integerColumn = new IntegerAttributeMetadata
{
// Set base properties
SchemaName = "new_Integer",
LogicalName = "new_integer",
DisplayName = new Label("Sample Integer", languageCode),
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
Description = new Label("Integer Column", languageCode),
// Set extended properties
Format = IntegerFormat.None,
MaxValue = 100,
MinValue = 0
};
// Add to list
addedColumns.Add(integerColumn);
// Create a memo column
var memoColumn = new MemoAttributeMetadata
{
// Set base properties
SchemaName = "new_Memo",
LogicalName = "new_memo",
DisplayName = new Label("Sample Memo", languageCode),
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
Description = new Label("Memo Column", languageCode),
// Set extended properties
Format = StringFormat.TextArea,
ImeMode = ImeMode.Disabled,
MaxLength = 500
};
// Add to list
addedColumns.Add(memoColumn);
// Create a money column
var moneyColumn = new MoneyAttributeMetadata
{
// Set base properties
SchemaName = "new_Money",
LogicalName = "new_money",
DisplayName = new Label("Sample Money", languageCode),
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
Description = new Label("Money Column", languageCode),
// Set extended properties
MaxValue = 1000.00,
MinValue = 0.00,
Precision = 1,
PrecisionSource = 1,
ImeMode = ImeMode.Disabled
};
// Add to list
addedColumns.Add(moneyColumn);
// Create a choice column
var picklistColumn =
new PicklistAttributeMetadata
{
// Set base properties
SchemaName = "new_Picklist",
LogicalName = "new_picklist",
DisplayName = new Label("Sample Picklist", languageCode),
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
Description = new Label("Picklist Attribute", languageCode),
// Set extended properties
// Build local picklist options
OptionSet = new OptionSetMetadata
{
IsGlobal = false,
OptionSetType = OptionSetType.Picklist,
Options =
{
new OptionMetadata(
new Label("Created", languageCode), null),
new OptionMetadata(
new Label("Updated", languageCode), null),
new OptionMetadata(
new Label("Deleted", languageCode), null)
}
}
};
// Add to list
addedColumns.Add(picklistColumn);
// Create a string column
var stringColumn = new StringAttributeMetadata
{
// Set base properties
SchemaName = "new_String",
LogicalName = "new_string",
DisplayName = new Label("Sample String", languageCode),
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
Description = new Label("String Column", languageCode),
// Set extended properties
MaxLength = 100
};
// Add to list
addedColumns.Add(stringColumn);
//Multi-select column requires version 9.0 or higher.
if (_productVersion > new Version("9.0"))
{
// Create a multi-select Choices column
var multiSelectChoiceColumn = new MultiSelectPicklistAttributeMetadata()
{
SchemaName = "new_MultiSelectOptionSet",
LogicalName = "new_multiselectoptionset",
DisplayName = new Label("Choices column", languageCode),
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
Description = new Label("Choices columndescription", languageCode),
OptionSet = new OptionSetMetadata()
{
IsGlobal = false,
OptionSetType = OptionSetType.Picklist,
Options = {
new OptionMetadata(new Label("First Option",languageCode),null),
new OptionMetadata(new Label("Second Option",languageCode),null),
new OptionMetadata(new Label("Third Option",languageCode),null)
}
}
};
// Add to list
addedColumns.Add(multiSelectChoiceColumn);
// Create a BigInt column
var bigIntColumn = new BigIntAttributeMetadata
{
// Set base properties
SchemaName = "new_BigInt",
LogicalName = "new_bigint",
DisplayName = new Label("Sample Big Int", languageCode),
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
Description = new Label("Big Int Column", languageCode)
};
// Add to list
addedColumns.Add(bigIntColumn);
}
foreach (AttributeMetadata aColumn in addedColumns)
{
// Create the request.
var createAttributeRequest = new CreateAttributeRequest
{
EntityName = Contact.EntityLogicalName,
Attribute = aColumn
};
// Execute the request using IOrganizationService instance
service.Execute(createAttributeRequest);
Console.WriteLine($"Created the {aColumn.SchemaName} column.");
}
列を取得する
このサンプルは AttributeMetadata.RetrieveAttributeRequest を使用して、組織用のロールを取得する方法を説明します。 このサンプルは、列の作成で作成された取引先担当者テーブルから、「new_string」と呼ばれるカスタム StringAttributeMetadata 列の定義を取得します。
注意
なぜならRetrieveAsIfPublishedtrueの場合、この要求はこの列の現在の未公開の定義を返します。 これは、列エディターを作成していて、未公開の列の定義を取得する場合に使用できます。 そうでなければ、RetrieveAsIfPublished
は指定しないでください。 詳細: 未公開の定義の取得。
// Create the request
RetrieveAttributeRequest attributeRequest = new RetrieveAttributeRequest
{
EntityLogicalName = Contact.EntityLogicalName,
LogicalName = "new_string",
RetrieveAsIfPublished = true
};
// Execute the request using IOrganizationService instance
RetrieveAttributeResponse attributeResponse =
(RetrieveAttributeResponse)service.Execute(attributeRequest);
Console.WriteLine("Retrieved the attribute {0}.",
attributeResponse.AttributeMetadata.SchemaName);
列の更新
このコードサンプルコードは、列 (属性) を更新する方法を示しています。 このサンプルでは、UpdateAttributeRequest を使用して AttributeMetadata.DisplayName 以前に取得した Contact
テーブルのカスタム列。
// Modify the retrieved attribute
AttributeMetadata retrievedAttributeMetadata =
attributeResponse.AttributeMetadata;
retrievedAttributeMetadata.DisplayName =
new Label("Update String Attribute", 1033); // English
// Update an attribute retrieved via RetrieveAttributeRequest
UpdateAttributeRequest updateRequest = new UpdateAttributeRequest
{
Attribute = retrievedAttributeMetadata,
EntityName = Contact.EntityLogicalName,
MergeLabels = false
};
// Execute the request using IOrganizationService instance
service.Execute(updateRequest);
Console.WriteLine("Updated the attribute {0}.",
retrievedAttributeMetadata.SchemaName);
新しいルックアップ列を作成する
ルックアップ列は、を使用して作成されますCreateOneToManyRequest。
CreateOneToManyRequest req = new CreateOneToManyRequest()
{
Lookup = new LookupAttributeMetadata()
{
Description = new Label("The referral (lead) from the bank account owner", 1033),
DisplayName = new Label("Referral", 1033),
LogicalName = "new_parent_leadid",
SchemaName = "New_Parent_leadId",
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.Recommended)
},
OneToManyRelationship = new OneToManyRelationshipMetadata()
{
AssociatedMenuConfiguration = new AssociatedMenuConfiguration()
{
Behavior = AssociatedMenuBehavior.UseCollectionName,
Group = AssociatedMenuGroup.Details,
Label = new Label("Bank Accounts", 1033),
Order = 10000
},
CascadeConfiguration = new CascadeConfiguration()
{
Assign = CascadeType.Cascade,
Delete = CascadeType.Cascade,
Merge = CascadeType.Cascade,
Reparent = CascadeType.Cascade,
Share = CascadeType.Cascade,
Unshare = CascadeType.Cascade
},
ReferencedEntity = "lead",
ReferencedAttribute = "leadid",
ReferencingEntity = _customEntityName,
SchemaName = "new_lead_new_bankaccount"
}
};
// Execute the request using IOrganizationService instance
service.Execute(req);
顧客検索列を作成する
ルックアップ列とは異なり、顧客ルックアップ列は CreateCustomerRelationshipsRequest メッセージを使用して作成されます。これはルックアップ列に 2 つのリレーションシップを追加します (1 つが Account
テーブルへ、もう1つが Contact
テーブルへ)。 顧客ルックアップ列の Account
と Contact
を除いて、他のテーブルにリレーションシップを追加することはできません。
CreateCustomerRelationshipsRequest createCustomerReq = new CreateCustomerRelationshipsRequest
{
Lookup = new LookupAttributeMetadata
{
Description = new Label("The owner of the bank account", 1033),
DisplayName = new Label("Account owner", 1033),
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.ApplicationRequired),
SchemaName = "new_customerid"
},
OneToManyRelationships = new OneToManyRelationshipMetadata[]
{
new OneToManyRelationshipMetadata()
{
ReferencedEntity = "account",
ReferencingEntity = _customEntityName,
SchemaName = "new_bankaccount_customer_account",
},
new OneToManyRelationshipMetadata()
{
ReferencedEntity = "contact",
ReferencingEntity = _customEntityName,
SchemaName = "new_bankaccount_customer_contact",
}
},
};
// Execute the request using IOrganizationService instance
service.Execute(createCustomerReq);
グローバルな選択肢を使用する選択列を作成する
こののサンプル コードは、グローバル選択に関連する PicklistAttributeMetadata 選択列を作成する方法について示します。
次のサンプルは、CreateAttributeRequest を使用して、文字列変数 _globalOptionSetName
によって表される名前を持つグローバル選択を使用するためにPicklistAttributeMetadata 列のオプションを設定します。 詳細: 選択肢をカスタマイズする
// Create a Picklist linked to the option set.
// Specify which entity will own the picklist, and create it.
CreateAttributeRequest createRequest = new CreateAttributeRequest
{
EntityName = Contact.EntityLogicalName,
Attribute = new PicklistAttributeMetadata
{
SchemaName = "sample_examplepicklist",
LogicalName = "sample_examplepicklist",
DisplayName = new Label("Example Picklist", 1033), //English
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
// In order to relate the picklist to the global option set, be sure
// to specify the two attributes below appropriately.
// Failing to do so will lead to errors.
OptionSet = new OptionSetMetadata
{
IsGlobal = true,
Name = _globalOptionSetName
}
}
};
// Execute the request using IOrganizationService instance
service.Execute(createRequest);
新しいステータス値の挿入
このサンプル コードは、StatusAttributeMetadata 列に新しい ステータス 選択を挿入する方法を示します。
次のサンプル コードは、InsertStatusValueRequest を使用して、Contact.StateCode
が 0 (アクティブ) の場合に有効な Contact
テーブル Contact.StatusCode
列に新しい選択を指定します。 IOrganizationService.Execute メソッドが要求を処理します。
次のサンプル コードは、アクティブな連絡先: アクティブ と 休眠2 つの有効な 休止 に対して 2 つの有効な ステータス 選択肢を可能にします。
// Use InsertStatusValueRequest message to insert a new status
// in an existing status attribute.
// Create the request.
InsertStatusValueRequest insertStatusValueRequest =
new InsertStatusValueRequest
{
AttributeLogicalName = "statuscode",
EntityLogicalName = Contact.EntityLogicalName,
Label = new Label("Dormant", 1033), //English
StateCode = 0
};
// Execute the request using IOrganizationService instance and store newly inserted value
// for cleanup, used later part of this sample.
_insertedStatusValue = ((InsertStatusValueResponse)service.Execute(
insertStatusValueRequest)).NewOptionValue;
Console.WriteLine("Created {0} with the value of {1}.",
insertStatusValueRequest.Label.LocalizedLabels[0].Label,
_insertedStatusValue);
状態値の更新
このサンプル コードは、StateAttributeMetadata 列の選択肢のラベルを変更する方法を示しています。
次のサンプル コードは、UpdateStateValueRequest を使用して、Contact.StateCode
選択ラベルを アクティブ から オープン に変更します。
// Modify the state value label from Active to Open.
// Create the request.
UpdateStateValueRequest updateStateValue = new UpdateStateValueRequest
{
AttributeLogicalName = "statecode",
EntityLogicalName = Contact.EntityLogicalName,
Value = 1,
Label = new Label("Open", 1033) //English
};
// Execute the request using IOrganizationService instance
service.Execute(updateStateValue);
Console.WriteLine(
"Updated {0} state attribute of {1} entity from 'Active' to '{2}'.",
updateStateValue.AttributeLogicalName,
updateStateValue.EntityLogicalName,
updateStateValue.Label.LocalizedLabels[0].Label
);
StateCode
選択肢を追加または削除することはできませんが、選択肢のラベルを変更できます。
ローカルの選択肢に新しい選択肢を挿入します
このサンプル コードは、ローカルの選択肢に新しい選択肢を追加する方法を示しています。 次のサンプルは、InsertOptionValueRequest を使用して、Contact
テーブルに大してカスタム PicklistAttributeMetadata に新しい選択肢を追加します。
// Create a request.
InsertOptionValueRequest insertOptionValueRequest =
new InsertOptionValueRequest
{
AttributeLogicalName = "new_picklist",
EntityLogicalName = Contact.EntityLogicalName,
Label = new Label("New Picklist Label", 1033) //English
};
// Execute the request using IOrganizationService instance
int insertOptionValue = ((InsertOptionValueResponse)service.Execute(
insertOptionValueRequest)).NewOptionValue;
Console.WriteLine("Created {0} with the value of {1}.",
insertOptionValueRequest.Label.LocalizedLabels[0].Label,
insertOptionValue);
ローカル選択の選択肢の順序を変更する
このサンプル コードは、ローカル選択の選択肢の順序を変更する方法を示しています。 次のサンプルはカスタム PicklistAttributeMetadata 列を取得し、ラベルテキストの昇順でアイテムを並べ替える OrderByLINQ 関数を使用して元の選択肢の順序を変更します。 その後、OrderOptionRequest を使用して、列の選択肢の新しい順序を設定します。
アイテムを降順で並べ替えるには、OrderByDescending linq 関数を使用します。
// Use the RetrieveAttributeRequest message to retrieve
// a attribute by it's logical name.
RetrieveAttributeRequest retrieveAttributeRequest =
new RetrieveAttributeRequest
{
EntityLogicalName = Contact.EntityLogicalName,
LogicalName = "new_picklist",
RetrieveAsIfPublished = true
};
// Execute the request using IOrganizationService instance
RetrieveAttributeResponse retrieveAttributeResponse =
(RetrieveAttributeResponse)service.Execute(
retrieveAttributeRequest);
// Access the retrieved attribute.
PicklistAttributeMetadata retrievedPicklistAttributeMetadata =
(PicklistAttributeMetadata)
retrieveAttributeResponse.AttributeMetadata;
// Get the current options list for the retrieved attribute.
OptionMetadata[] optionList =
retrievedPicklistAttributeMetadata.OptionSet.Options.ToArray();
// Change the order of the original option's list.
// Use the OrderBy (OrderByDescending) linq function to sort options in
// ascending (descending) order according to label text.
// For ascending order use this:
var updateOptionList =
optionList.OrderBy(x => x.Label.LocalizedLabels[0].Label).ToList();
// For descending order use this:
// var updateOptionList =
// optionList.OrderByDescending(
// x => x.Label.LocalizedLabels[0].Label).ToList();
// Create the request.
OrderOptionRequest orderOptionRequest = new OrderOptionRequest
{
// Set the properties for the request.
AttributeLogicalName = "new_picklist",
EntityLogicalName = Contact.EntityLogicalName,
// Set the changed order using Select linq function
// to get only values in an array from the changed option list.
Values = updateOptionList.Select(x => x.Value.Value).ToArray()
};
// Execute the request using IOrganizationService instance
service.Execute(orderOptionRequest);
Console.WriteLine("Option Set option order changed");
列を削除する
このコード サンプルは、列を作成 で Contact
テーブルのために作成された List<
AttributeMetadata>
に保存されている列を削除する方法を示しています。 各 AttributeMetadata に対して、DeleteAttributeRequest は、IOrganizationService.Execute で処理される要求を準備します。
// Delete all attributes created for this sample.
foreach (AttributeMetadata anAttribute in addedAttributes)
{
// Create the request object
DeleteAttributeRequest deleteAttribute = new DeleteAttributeRequest
{
// Set the request properties
EntityLogicalName = Contact.EntityLogicalName,
LogicalName = anAttribute.SchemaName
};
// Execute the request using IOrganizationService instance
service.Execute(deleteAttribute);
}
注意
ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)
この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。