自訂全域選項組
發行︰ 2016年11月
適用於: Dynamics CRM 2015
通常您會使用全域選項組設定欄位,讓不同的欄位共用在同一個位置維護的同一組選項。 您可以重複使用全域選項組。 您也會在要求參數中看見類似列舉的選項組使用方式。
當您使用 OptionMetadata 定義選項值時,建議您讓系統指派值。 您可以在建立新的 OptionMetadata 執行個體時,透過傳遞 null 值達到此目的。 當您定義選項時,選項中會包含選項值首碼,該首碼是專為選項組建立所在的解決方案設定之發行者內容特有的。 此首碼有助於減少建立重複的受管理解決方案選項組的機會,包括在安裝受管理解決方案的組織中所定義的任何選項組內也一樣。 如需詳細資訊,請參閱合併選項組選項。
本主題內容
擷取全域選項組
建立全域選項組
建立使用全域選項組的挑選清單
更新全域選項組
擷取所有全域選項組
刪除全域選項組
擷取全域選項組
下列範例將說明如何使用 RetrieveOptionSetRequest 訊息依名稱擷取全域選項組:
// Use the RetrieveOptionSetRequest message to retrieve
// a global option set by it's name.
RetrieveOptionSetRequest retrieveOptionSetRequest =
new RetrieveOptionSetRequest
{
Name = _globalOptionSetName
};
// Execute the request.
RetrieveOptionSetResponse retrieveOptionSetResponse =
(RetrieveOptionSetResponse)_serviceProxy.Execute(
retrieveOptionSetRequest);
Console.WriteLine("Retrieved {0}.",
retrieveOptionSetRequest.Name);
// Access the retrieved OptionSetMetadata.
OptionSetMetadata retrievedOptionSetMetadata =
(OptionSetMetadata)retrieveOptionSetResponse.OptionSetMetadata;
// Get the current options list for the retrieved attribute.
OptionMetadata[] optionList =
retrievedOptionSetMetadata.Options.ToArray();
' Use the RetrieveOptionSetRequest message to retrieve
' a global option set by it's name.
Dim retrieveOptionSetRequest As RetrieveOptionSetRequest = New RetrieveOptionSetRequest With {
.Name = _globalOptionSetName
}
' Execute the request.
Dim retrieveOptionSetResponse As RetrieveOptionSetResponse =
CType(_serviceProxy.Execute(retrieveOptionSetRequest), RetrieveOptionSetResponse)
Console.WriteLine("Retrieved {0}.", retrieveOptionSetRequest.Name)
' Access the retrieved OptionSetMetadata.
Dim retrievedOptionSetMetadata As OptionSetMetadata =
CType(retrieveOptionSetResponse.OptionSetMetadata, OptionSetMetadata)
' Get the current options list for the retrieved attribute.
Dim optionList() As OptionMetadata = retrievedOptionSetMetadata.Options.ToArray()
建立全域選項組
使用 CreateOptionSetRequest 訊息可建立新的全域選項組。 將 IsGlobal 屬性設定為 true,表示選項組是全域的。 下列程式碼範例將建立稱為「範例選項組」的全域選項組:
#region How to create global option set
// Define the request object and pass to the service.
CreateOptionSetRequest createOptionSetRequest = new CreateOptionSetRequest
{
// Create a global option set (OptionSetMetadata).
OptionSet = new OptionSetMetadata
{
Name = _globalOptionSetName,
DisplayName = new Label("Example Option Set", _languageCode),
IsGlobal = true,
OptionSetType = OptionSetType.Picklist,
Options =
{
new OptionMetadata(new Label("Open", _languageCode), null),
new OptionMetadata(new Label("Suspended", _languageCode), null),
new OptionMetadata(new Label("Cancelled", _languageCode), null),
new OptionMetadata(new Label("Closed", _languageCode), null)
}
}
};
// Execute the request.
CreateOptionSetResponse optionsResp =
(CreateOptionSetResponse)_serviceProxy.Execute(createOptionSetRequest);
' #Region "How to create global option set"
' Define the request object and pass to the service.
Dim createOptionSetRequest As CreateOptionSetRequest = New CreateOptionSetRequest()
Dim createOptionSetOptionSet As OptionSetMetadata = New OptionSetMetadata() With {
.Name = _globalOptionSetName,
.DisplayName = New Label("Example Option Set", _languageCode),
.IsGlobal = True,
.OptionSetType = OptionSetType.Picklist
}
createOptionSetOptionSet.Options.AddRange(
{
New OptionMetadata(New Label("Open", _languageCode), Nothing),
New OptionMetadata(New Label("Suspended", _languageCode), Nothing),
New OptionMetadata(New Label("Cancelled", _languageCode), Nothing),
New OptionMetadata(New Label("Closed", _languageCode), Nothing)
}
)
createOptionSetRequest.OptionSet = createOptionSetOptionSet
' Create a global option set (OptionSetMetadata).
' Execute the request.
Dim optionsResp As CreateOptionSetResponse =
CType(_serviceProxy.Execute(createOptionSetRequest), CreateOptionSetResponse)
建立使用全域選項組的挑選清單
下列範例將說明如何利用 CreateAttributeRequest 建立使用全域選項組的挑選清單屬性:
// 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", _languageCode),
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
}
}
};
_serviceProxy.Execute(createRequest);
' Create a Picklist linked to the option set.
' Specify which entity will own the picklist, and create it.
Dim createRequest As CreateAttributeRequest = New CreateAttributeRequest With {
.EntityName = Contact.EntityLogicalName,
.Attribute = New PicklistAttributeMetadata With {
.SchemaName = "sample_examplepicklist", .LogicalName = "sample_examplepicklist",
.DisplayName = New Label("Example Picklist", _languageCode),
.RequiredLevel = New AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
.OptionSet = New OptionSetMetadata With {
.IsGlobal = True,
.Name = _globalOptionSetName
}
}
}
' 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.
_serviceProxy.Execute(createRequest)
更新全域選項組
下列範例將說明如何使用 UpdateOptionSetRequest 更新全域選項組的標籤:
// Use UpdateOptionSetRequest to update the basic information of an option
// set. Updating option set values requires different messages (see below).
UpdateOptionSetRequest updateOptionSetRequest = new UpdateOptionSetRequest
{
OptionSet = new OptionSetMetadata
{
DisplayName = new Label("Updated Option Set", _languageCode),
Name = _globalOptionSetName,
IsGlobal = true
}
};
_serviceProxy.Execute(updateOptionSetRequest);
//Publish the OptionSet
PublishXmlRequest pxReq1 = new PublishXmlRequest { ParameterXml = String.Format("<importexportxml><optionsets><optionset>{0}</optionset></optionsets></importexportxml>", _globalOptionSetName) };
_serviceProxy.Execute(pxReq1);
' Use UpdateOptionSetRequest to update the basic information of an option
' set. Updating option set values requires different messages (see below).
Dim updateOptionSetRequest As UpdateOptionSetRequest = New UpdateOptionSetRequest With {
.OptionSet = New OptionSetMetadata With {
.DisplayName = New Label("Updated Option Set", _languageCode),
.Name = _globalOptionSetName,
.IsGlobal = True
}
}
_serviceProxy.Execute(updateOptionSetRequest)
'Publish the OptionSet
Dim pxReq1 As PublishXmlRequest = New PublishXmlRequest With {
.ParameterXml = String.Format("<importexportxml><optionsets><optionset>{0}</optionset></optionsets></importexportxml>", _globalOptionSetName)
}
_serviceProxy.Execute(pxReq1)
排列選項
下列範例將說明如何使用 OrderOptionRequest 排列全域選項組中的選項:
// 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.
OptionSetName = _globalOptionSetName,
// 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
_serviceProxy.Execute(orderOptionRequest);
//Publish the OptionSet
PublishXmlRequest pxReq4 = new PublishXmlRequest { ParameterXml = String.Format("<importexportxml><optionsets><optionset>{0}</optionset></optionsets></importexportxml>", _globalOptionSetName) };
_serviceProxy.Execute(pxReq4);
' 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:
Dim updateOptionList = optionList.OrderBy(Function(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.
Dim orderOptionRequest As OrderOptionRequest =
New OrderOptionRequest With {
.OptionSetName = _globalOptionSetName,
.Values = updateOptionList.Select(Function(x) x.Value.Value).ToArray()
}
' Set the properties for the request.
' Set the changed order using Select linq function
' to get only values in an array from the changed option list.
' Execute the request
_serviceProxy.Execute(orderOptionRequest)
'Publish the OptionSet
Dim pxReq4 As PublishXmlRequest =
New PublishXmlRequest With {
.ParameterXml = String.Format("<importexportxml><optionsets><optionset>{0}</optionset></optionsets></importexportxml>",
_globalOptionSetName)
}
_serviceProxy.Execute(pxReq4)
擷取所有全域選項組
下列範例將說明如何使用 RetrieveAllOptionSetsRequest 擷取所有全域選項組:
// Use RetrieveAllOptionSetsRequest to retrieve all global option sets.
// Create the request.
RetrieveAllOptionSetsRequest retrieveAllOptionSetsRequest =
new RetrieveAllOptionSetsRequest();
// Execute the request
RetrieveAllOptionSetsResponse retrieveAllOptionSetsResponse =
(RetrieveAllOptionSetsResponse)_serviceProxy.Execute(
retrieveAllOptionSetsRequest);
// Now you can use RetrieveAllOptionSetsResponse.OptionSetMetadata property to
// work with all retrieved option sets.
if (retrieveAllOptionSetsResponse.OptionSetMetadata.Count() > 0)
{
Console.WriteLine("All the global option sets retrieved as below:");
int count = 1;
foreach (OptionSetMetadataBase optionSetMetadata in
retrieveAllOptionSetsResponse.OptionSetMetadata)
{
Console.WriteLine("{0} {1}", count++,
(optionSetMetadata.DisplayName.LocalizedLabels.Count >0)? optionSetMetadata.DisplayName.LocalizedLabels[0].Label : String.Empty);
}
}
' Use RetrieveAllOptionSetsRequest to retrieve all global option sets.
' Create the request.
Dim retrieveAllOptionSetsRequest As New RetrieveAllOptionSetsRequest()
' Execute the request
Dim retrieveAllOptionSetsResponse As RetrieveAllOptionSetsResponse =
CType(_serviceProxy.Execute(retrieveAllOptionSetsRequest), RetrieveAllOptionSetsResponse)
' Now you can use RetrieveAllOptionSetsResponse.OptionSetMetadata property to
' work with all retrieved option sets.
If retrieveAllOptionSetsResponse.OptionSetMetadata.Count() > 0 Then
Console.WriteLine("All the global option sets retrieved as below:")
Dim count As Integer = 1
For Each optionSetMetadata As OptionSetMetadataBase In retrieveAllOptionSetsResponse.OptionSetMetadata
Console.WriteLine("{0} {1}",
count,
If(optionSetMetadata.DisplayName.LocalizedLabels.Count > 0,
optionSetMetadata.DisplayName.LocalizedLabels(0).Label,
String.Empty))
count += 1
Next optionSetMetadata
End If
刪除全域選項組
下列範例將說明如何使用 RetrieveDependentComponentsRequest 查看是否有另一個解決方案元件正在使用全域選項組,以及如何使用 DeleteOptionSetRequest 將它刪除:
// Create the request to see which components have a dependency on the
// global option set.
RetrieveDependentComponentsRequest dependencyRequest =
new RetrieveDependentComponentsRequest
{
ObjectId = _optionSetId,
ComponentType = (int)componenttype.OptionSet
};
RetrieveDependentComponentsResponse dependencyResponse =
(RetrieveDependentComponentsResponse)_serviceProxy.Execute(
dependencyRequest);
// Here you would check the dependencyResponse.EntityCollection property
// and act as appropriate. However, we know there is exactly one
// dependency so this example deals with it directly and deletes
// the previously created attribute.
DeleteAttributeRequest deleteAttributeRequest =
new DeleteAttributeRequest
{
EntityLogicalName = Contact.EntityLogicalName,
LogicalName = "sample_examplepicklist"
};
_serviceProxy.Execute(deleteAttributeRequest);
Console.WriteLine("Referring attribute deleted.");
#endregion How to delete attribute
#region How to delete global option set
// Finally, delete the global option set. Attempting this before deleting
// the picklist above will result in an exception being thrown.
DeleteOptionSetRequest deleteRequest = new DeleteOptionSetRequest
{
Name = _globalOptionSetName
};
_serviceProxy.Execute(deleteRequest);
' Create the request to see which components have a dependency on the
' global option set.
Dim dependencyRequest As RetrieveDependentComponentsRequest =
New RetrieveDependentComponentsRequest With {
.ObjectId = _optionSetId,
.ComponentType = componenttype.OptionSet
}
Dim dependencyResponse As RetrieveDependentComponentsResponse =
CType(_serviceProxy.Execute(dependencyRequest), RetrieveDependentComponentsResponse)
' Here you would check the dependencyResponse.EntityCollection property
' and act as appropriate. However, we know there is exactly one
' dependency so this example deals with it directly and deletes
' the previously created attribute.
Dim deleteAttributeRequest As DeleteAttributeRequest =
New DeleteAttributeRequest With {
.EntityLogicalName = Contact.EntityLogicalName,
.LogicalName = "sample_examplepicklist"
}
_serviceProxy.Execute(deleteAttributeRequest)
Console.WriteLine("Referring attribute deleted.")
'#End Region ' How to delete attribute
'#Region "How to delete global option set"
' Finally, delete the global option set. Attempting this before deleting
' the picklist above will result in an exception being thrown.
Dim deleteRequest As DeleteOptionSetRequest =
New DeleteOptionSetRequest With {
.Name = _globalOptionSetName
}
_serviceProxy.Execute(deleteRequest)
另請參閱
Microsoft Dynamics CRM 2015 開發人員自訂指南
擴充中繼資料模型
插入、更新、刪除以及排列全域選項組選項
全域選項組訊息
全域選項組中繼資料值
範例:建立全域選項組
範例:使用全域選項組
範例:將全域選項組資訊傾印至檔案
© 2017 Microsoft. 著作權所有,並保留一切權利。 著作權