using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Metadata;
using System;
using System.Collections.Generic;
namespace ConsoleApplication1
{
/// <summary>
/// 全局选项集
/// </summary>
public class OptionSetMetadataHelper
{
public IOrganizationService service = null;
public Guid optionSetId = Guid.Empty;
public int languageCode = 2052;//Microsoft区域设置ID值,https://docs.microsoft.com/zh-cn/previous-versions/windows/embedded/ms912047(v=winembedded.10)
/// <summary>
/// 创建全局选项集
/// </summary>
public Guid Create(OptionModel model)
{
#region OptionMetadataCollection
OptionMetadataCollection opCollection = new OptionMetadataCollection();
if (model.Items != null)
{
foreach (var item in model.Items)
{
opCollection.Add(new OptionMetadata(new Label(item.Value, languageCode), item.Key));
}
}
#endregion
OptionSetMetadata optionSet = new OptionSetMetadata(opCollection);
optionSet.Name = model.Name;
optionSet.Description = new Label(model.Description, languageCode);//说明
optionSet.DisplayName = new Label(model.DisplayName, languageCode);//显示名称
optionSet.IsGlobal = model.IsGlobal;
optionSet.OptionSetType = model.OptionSetType;
CreateOptionSetRequest request = new CreateOptionSetRequest();
request.OptionSet = optionSet;
CreateOptionSetResponse response = (CreateOptionSetResponse)service.Execute(request);
return response.OptionSetId;
}
/// <summary>
/// 插入新全局选项集选项
/// </summary>
public void InsertOptionValue(OptionModel model)
{
InsertOptionValueRequest request = new InsertOptionValueRequest();
request.OptionSetName = model.Name;
if (model.Items != null)
{
foreach (var item in model.Items)
{
request.Label = new Label(item.Value, languageCode);
request.Value = item.Key;
}
InsertOptionValueResponse response = (InsertOptionValueResponse)service.Execute(request);
}
}
/// <summary>
/// 更改选项集中选项的相对顺序
/// </summary>
public void OrderOption(string name,int[] Values)
{
OrderOptionRequest request = new OrderOptionRequest();
request.OptionSetName = name;
request.Values = Values;
OrderOptionResponse response = (OrderOptionResponse)service.Execute(request);
}
/// <summary>
/// 检索所有全局选项集
/// </summary>
/// <returns></returns>
public OptionSetMetadataBase[] RetrieveAllOptionSets()
{
RetrieveAllOptionSetsRequest request = new RetrieveAllOptionSetsRequest();
request.RetrieveAsIfPublished = true;
RetrieveAllOptionSetsResponse response = (RetrieveAllOptionSetsResponse)service.Execute(request);
OptionSetMetadataBase[] optionSetMetadata = response.OptionSetMetadata;
return optionSetMetadata;
}
/// <summary>
/// 检索全局选项集
/// </summary>
/// <param name="name">选项集的名称</param>
public OptionSetMetadataBase RetrieveOptionSet(string name)
{
RetrieveOptionSetRequest request = new RetrieveOptionSetRequest();
request.Name = name;
request.RetrieveAsIfPublished = true;
RetrieveOptionSetResponse response = (RetrieveOptionSetResponse)service.Execute(request);
OptionSetMetadataBase optionSetMetadata = response.OptionSetMetadata;
return optionSetMetadata;
}
/// <summary>
/// 删除全局选项集中的项
/// </summary>
/// <param name="model"></param>
public void DeleteItem(OptionModel model)
{
DeleteOptionValueRequest request = new DeleteOptionValueRequest();
request.OptionSetName = model.Name;
if (model.Items != null)
{
foreach (var item in model.Items)
{
request.Value = item.Key;
DeleteOptionValueResponse response = (DeleteOptionValueResponse)service.Execute(request);
}
}
}
/// <summary>
/// 删除全局选项集
/// </summary>
/// <param name="name">选项集的名称</param>
public void Delete(string name)
{
DeleteOptionSetRequest request = new DeleteOptionSetRequest();
request.Name = name;
DeleteOptionSetResponse response = (DeleteOptionSetResponse)service.Execute(request);
}
}
public class OptionModel
{
public Dictionary<int,string> Items { get; set; }
public string Name { get; set; }
public string Description { get; set; }//说明
public string DisplayName { get; set; }//显示名称
public bool IsGlobal { get; set; }
public OptionSetType? OptionSetType { get; set; }
}
}