Trabalhar com metadados de atributos
Publicado: novembro de 2016
Aplicável a: Dynamics CRM 2015
Este tópico usa trechos de código de Exemplo: Trabalhar com metadados de atributos para mostrar como executar tarefas comuns ao trabalhar com atributos.
Neste tópico
Criar atributos
Recuperar um atributos
Atualizar um atributo
Criar um atributo de pesquisa
Atualizar um valor de estado
Criar uma lista de seleção que utilize um conjunto de opções globais
Inserir um novo valor de status
Inserir uma nova opção em um conjunto de opções locais
Alterar a ordem de opções em um conjunto de opções locais
Excluir um atributo
Criar atributos
Você cria atributos definindo um dos tipos de AttributeMetadata e depois transmitindo-o para a mensagem CreateAttributeRequest.
O exemplo a seguir define o AttributeMetadata para inúmeros tipos diferentes de atributos e os adiciona a um List<AttributeMetadata>. No final do código, as definições de atributo são passadas para uma instância da classe CreateAttributeRequest e o atributo é criado usando o método Execute.
O exemplo a seguir pressupõe que o prefixo de personalização atual seja “novo” porque é o prefixo de personalização padrão do fornecedor de soluções da organização. Você deve usar o prefixo de personalização do fornecedor de soluções que faça sentido para o contexto da solução.
// Create storage for new attributes being created
addedAttributes = new List<AttributeMetadata>();
// Create a boolean attribute
BooleanAttributeMetadata boolAttribute = new BooleanAttributeMetadata
{
// Set base properties
SchemaName = "new_boolean",
DisplayName = new Label("Sample Boolean", _languageCode),
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
Description = new Label("Boolean Attribute", _languageCode),
// Set extended properties
OptionSet = new BooleanOptionSetMetadata(
new OptionMetadata(new Label("True", _languageCode), 1),
new OptionMetadata(new Label("False", _languageCode), 0)
)
};
// Add to list
addedAttributes.Add(boolAttribute);
// Create a date time attribute
DateTimeAttributeMetadata dtAttribute = new DateTimeAttributeMetadata
{
// Set base properties
SchemaName = "new_datetime",
DisplayName = new Label("Sample DateTime", _languageCode),
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
Description = new Label("DateTime Attribute", _languageCode),
// Set extended properties
Format = DateTimeFormat.DateOnly,
ImeMode = ImeMode.Disabled
};
// Add to list
addedAttributes.Add(dtAttribute);
// Create a decimal attribute
DecimalAttributeMetadata decimalAttribute = new DecimalAttributeMetadata
{
// Set base properties
SchemaName = "new_decimal",
DisplayName = new Label("Sample Decimal", _languageCode),
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
Description = new Label("Decimal Attribute", _languageCode),
// Set extended properties
MaxValue = 100,
MinValue = 0,
Precision = 1
};
// Add to list
addedAttributes.Add(decimalAttribute);
// Create a integer attribute
IntegerAttributeMetadata integerAttribute = new IntegerAttributeMetadata
{
// Set base properties
SchemaName = "new_integer",
DisplayName = new Label("Sample Integer", _languageCode),
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
Description = new Label("Integer Attribute", _languageCode),
// Set extended properties
Format = IntegerFormat.None,
MaxValue = 100,
MinValue = 0
};
// Add to list
addedAttributes.Add(integerAttribute);
// Create a memo attribute
MemoAttributeMetadata memoAttribute = new MemoAttributeMetadata
{
// Set base properties
SchemaName = "new_memo",
DisplayName = new Label("Sample Memo", _languageCode),
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
Description = new Label("Memo Attribute", _languageCode),
// Set extended properties
Format = StringFormat.TextArea,
ImeMode = ImeMode.Disabled,
MaxLength = 500
};
// Add to list
addedAttributes.Add(memoAttribute);
// Create a money attribute
MoneyAttributeMetadata moneyAttribute = new MoneyAttributeMetadata
{
// Set base properties
SchemaName = "new_money",
DisplayName = new Label("Money Picklist", _languageCode),
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
Description = new Label("Money Attribue", _languageCode),
// Set extended properties
MaxValue = 1000.00,
MinValue = 0.00,
Precision = 1,
PrecisionSource = 1,
ImeMode = ImeMode.Disabled
};
// Add to list
addedAttributes.Add(moneyAttribute);
// Create a picklist attribute
PicklistAttributeMetadata pickListAttribute =
new PicklistAttributeMetadata
{
// Set base properties
SchemaName = "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
addedAttributes.Add(pickListAttribute);
// Create a string attribute
StringAttributeMetadata stringAttribute = new StringAttributeMetadata
{
// Set base properties
SchemaName = "new_string",
DisplayName = new Label("Sample String", _languageCode),
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
Description = new Label("String Attribute", _languageCode),
// Set extended properties
MaxLength = 100
};
// Add to list
addedAttributes.Add(stringAttribute);
// NOTE: LookupAttributeMetadata cannot be created outside the context of a relationship.
// Refer to the WorkWithRelationships.cs reference SDK sample for an example of this attribute type.
// NOTE: StateAttributeMetadata and StatusAttributeMetadata cannot be created via the SDK.
foreach (AttributeMetadata anAttribute in addedAttributes)
{
// Create the request.
CreateAttributeRequest createAttributeRequest = new CreateAttributeRequest
{
EntityName = Contact.EntityLogicalName,
Attribute = anAttribute
};
// Execute the request.
_serviceProxy.Execute(createAttributeRequest);
Console.WriteLine("Created the attribute {0}.", anAttribute.SchemaName);
}
' Create storage for new attributes being created
addedAttributes = New List(Of AttributeMetadata)()
' Create a boolean attribute
Dim boolAttribute As BooleanAttributeMetadata = New BooleanAttributeMetadata With {
.SchemaName = "new_boolean",
.DisplayName = New Label("Sample Boolean", _languageCode),
.RequiredLevel = New AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
.Description = New Label("Boolean Attribute", _languageCode),
.OptionSet = New BooleanOptionSetMetadata(
New OptionMetadata(
New Label("True", _languageCode), 1),
New OptionMetadata(
New Label("False", _languageCode), 0)
)
}
' Set base properties
' Set extended properties
' Add to list
addedAttributes.Add(boolAttribute)
' Create a date time attribute
Dim dtAttribute As DateTimeAttributeMetadata = New DateTimeAttributeMetadata With {
.SchemaName = "new_datetime",
.DisplayName = New Label("Sample DateTime", _languageCode),
.RequiredLevel = New AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
.Description = New Label("DateTime Attribute", _languageCode),
.Format = DateTimeFormat.DateOnly,
.ImeMode = ImeMode.Disabled}
' Set base properties
' Set extended properties
' Add to list
addedAttributes.Add(dtAttribute)
' Create a decimal attribute
Dim decimalAttribute As DecimalAttributeMetadata = New DecimalAttributeMetadata With {
.SchemaName = "new_decimal",
.DisplayName = New Label("Sample Decimal", _languageCode),
.RequiredLevel = New AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
.Description = New Label("Decimal Attribute", _languageCode),
.MaxValue = 100,
.MinValue = 0,
.Precision = 1}
' Set base properties
' Set extended properties
' Add to list
addedAttributes.Add(decimalAttribute)
' Create a integer attribute
Dim integerAttribute As IntegerAttributeMetadata = New IntegerAttributeMetadata With {
.SchemaName = "new_integer",
.DisplayName = New Label("Sample Integer", _languageCode),
.RequiredLevel = New AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
.Description = New Label("Integer Attribute", _languageCode),
.Format = IntegerFormat.None,
.MaxValue = 100,
.MinValue = 0}
' Set base properties
' Set extended properties
' Add to list
addedAttributes.Add(integerAttribute)
' Create a memo attribute
Dim memoAttribute As MemoAttributeMetadata = New MemoAttributeMetadata With {
.SchemaName = "new_memo",
.DisplayName = New Label("Sample Memo", _languageCode),
.RequiredLevel = New AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
.Description = New Label("Memo Attribute", _languageCode),
.Format = StringFormat.TextArea,
.ImeMode = ImeMode.Disabled,
.MaxLength = 500}
' Set base properties
' Set extended properties
' Add to list
addedAttributes.Add(memoAttribute)
' Create a money attribute
Dim moneyAttribute As MoneyAttributeMetadata = New MoneyAttributeMetadata With {
.SchemaName = "new_money",
.DisplayName = New Label("Money Picklist", _languageCode),
.RequiredLevel = New AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
.Description = New Label("Money Attribue", _languageCode),
.MaxValue = 1000.0,
.MinValue = 0.0,
.Precision = 1,
.PrecisionSource = 1,
.ImeMode = ImeMode.Disabled}
' Set base properties
' Set extended properties
' Add to list
addedAttributes.Add(moneyAttribute)
' Create a picklist attribute
Dim pickListAttribute As PicklistAttributeMetadata = New PicklistAttributeMetadata With {
.SchemaName = "new_picklist",
.DisplayName = New Label("Sample Picklist", _languageCode),
.RequiredLevel = New AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
.Description = New Label("Picklist Attribute", _languageCode)}
Dim pickListOptionSetMetadata As OptionSetMetadata = New OptionSetMetadata() With {
.IsGlobal = False,
.OptionSetType = OptionSetType.Picklist}
pickListOptionSetMetadata.Options.Add(New OptionMetadata(New Label("Created", _languageCode), Nothing))
pickListOptionSetMetadata.Options.Add(New OptionMetadata(New Label("Updated", _languageCode), Nothing))
pickListOptionSetMetadata.Options.Add(New OptionMetadata(New Label("Deleted", _languageCode), Nothing))
pickListAttribute.OptionSet = pickListOptionSetMetadata
' Set base properties
' Set extended properties
' Build local picklist options
' Add to list
addedAttributes.Add(pickListAttribute)
' Create a string attribute
Dim stringAttribute As StringAttributeMetadata = New StringAttributeMetadata With {
.SchemaName = "new_string",
.DisplayName = New Label("Sample String", _languageCode),
.RequiredLevel = New AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
.Description = New Label("String Attribute", _languageCode),
.MaxLength = 100}
' Set base properties
' Set extended properties
' Add to list
addedAttributes.Add(stringAttribute)
' NOTE: LookupAttributeMetadata cannot be created outside the context of a relationship.
' Refer to the WorkWithRelationships.cs reference SDK sample for an example of this attribute type.
' NOTE: StateAttributeMetadata and StatusAttributeMetadata cannot be created via the SDK.
For Each anAttribute As AttributeMetadata In addedAttributes
' Create the request.
Dim createAttributeRequest As CreateAttributeRequest = New CreateAttributeRequest With {
.EntityName = Contact.EntityLogicalName,
.Attribute = anAttribute}
' Execute the request.
_serviceProxy.Execute(createAttributeRequest)
Console.WriteLine("Created the attribute {0}.", anAttribute.SchemaName)
Next anAttribute
Recuperar um atributos
Este exemplo mostra como recuperar o AttributeMetadata para um atributo usando o RetrieveAttributeRequest. Esse exemplo recupera os metadados para um atributo StringAttributeMetadata personalizado chamado ‘new_string’ na entidade de contato que foi criada em Criar atributos.
Observação
Como RetrieveAsIfPublished é verdadeiro, essa solicitação retorna a definição não publicada atual desse atributo. Você pode usá-lo se estiver criando um editor de atributo e se quiser recuperar a definição não publicada do atributo. Caso contrário, você não deve especificar RetrieveAsIfPublished.Para obter mais informações:Como recuperar metadados não publicados
// Create the request
RetrieveAttributeRequest attributeRequest = new RetrieveAttributeRequest
{
EntityLogicalName = Contact.EntityLogicalName,
LogicalName = "new_string",
RetrieveAsIfPublished = true
};
// Execute the request
RetrieveAttributeResponse attributeResponse =
(RetrieveAttributeResponse)_serviceProxy.Execute(attributeRequest);
Console.WriteLine("Retrieved the attribute {0}.",
attributeResponse.AttributeMetadata.SchemaName);
' Create the request
Dim attributeRequest As RetrieveAttributeRequest = New RetrieveAttributeRequest With {
.EntityLogicalName = Contact.EntityLogicalName,
.LogicalName = "new_string",
.RetrieveAsIfPublished = True}
' Execute the request
Dim attributeResponse As RetrieveAttributeResponse = CType(_serviceProxy.Execute(attributeRequest), RetrieveAttributeResponse)
Console.WriteLine("Retrieved the attribute {0}.", attributeResponse.AttributeMetadata.SchemaName)
Atualizar um atributo
Este exemplo mostra como atualizar um atributo. Esse exemplo usa o UpdateAttributeRequest para alterar a propriedade AttributeMetadata.DisplayName de um atributo personalizado recuperado anteriormente da entidade Contact.
// Modify the retrieved attribute
AttributeMetadata retrievedAttributeMetadata =
attributeResponse.AttributeMetadata;
retrievedAttributeMetadata.DisplayName =
new Label("Update String Attribute", _languageCode);
// Update an attribute retrieved via RetrieveAttributeRequest
UpdateAttributeRequest updateRequest = new UpdateAttributeRequest
{
Attribute = retrievedAttributeMetadata,
EntityName = Contact.EntityLogicalName,
MergeLabels = false
};
// Execute the request
_serviceProxy.Execute(updateRequest);
Console.WriteLine("Updated the attribute {0}.",
retrievedAttributeMetadata.SchemaName);
' Modify the retrieved attribute
Dim retrievedAttributeMetadata As AttributeMetadata = attributeResponse.AttributeMetadata
retrievedAttributeMetadata.DisplayName = New Label("Update String Attribute", _languageCode)
' Update an attribute retrieved via RetrieveAttributeRequest
Dim updateRequest As UpdateAttributeRequest = New UpdateAttributeRequest With {
.Attribute = retrievedAttributeMetadata,
.EntityName = Contact.EntityLogicalName,
.MergeLabels = False}
' Execute the request
_serviceProxy.Execute(updateRequest)
Console.WriteLine("Updated the attribute {0}.", retrievedAttributeMetadata.SchemaName)
Criar um atributo de pesquisa
Este exemplo mostra como criar um atributo de pesquisa.
Um atributo de pesquisa é criado usando o CreateOneToManyRequest.
CreateOneToManyRequest req = new CreateOneToManyRequest()
{
Lookup = new LookupAttributeMetadata()
{
Description = new Label("The owner of the bank account", 1033),
DisplayName = new Label("Account Owner", 1033),
LogicalName = "new_parent_contactid",
SchemaName = "New_Parent_ContactId",
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.ApplicationRequired)
},
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 = Contact.EntityLogicalName,
ReferencedAttribute = "contactid",
ReferencingEntity = _customEntityName,
SchemaName = "new_contact_new_bankaccount"
}
};
_serviceProxy.Execute(req);
Dim req As New CreateOneToManyRequest() With {
.Lookup = New LookupAttributeMetadata() With {
.Description = New Label("The owner of the bank account", 1033),
.DisplayName = New Label("Account Owner", 1033),
.LogicalName = "new_parent_contactid",
.SchemaName = "New_Parent_ContactId",
.RequiredLevel = New AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.ApplicationRequired)},
.OneToManyRelationship = New OneToManyRelationshipMetadata() With {
.AssociatedMenuConfiguration = New AssociatedMenuConfiguration() With {
.Behavior = AssociatedMenuBehavior.UseCollectionName,
.Group = AssociatedMenuGroup.Details,
.Label = New Label("Bank Accounts", 1033),
.Order = 10000},
.CascadeConfiguration = New CascadeConfiguration() With {
.Assign = CascadeType.Cascade,
.Delete = CascadeType.Cascade,
.Merge = CascadeType.Cascade,
.Reparent = CascadeType.Cascade,
.Share = CascadeType.Cascade,
.Unshare = CascadeType.Cascade},
.ReferencedEntity = Contact.EntityLogicalName,
.ReferencedAttribute = "contactid",
.ReferencingEntity = _customEntityName,
.SchemaName = "new_contact_new_bankaccount"
}
}
_serviceProxy.Execute(req)
Criar uma lista de seleção que utilize um conjunto de opções globais
Este exemplo mostra como criar um atributo PicklistAttributeMetadata que esteja associado a um conjunto de opções globais.
O exemplo usa CreateAttributeRequest para definir as opções para que um atributo PicklistAttributeMetadata use um conjunto de opções globais com um nome representado pela variável de cadeia de caracteres _globalOptionSetName.Para obter mais informações:Personalizar conjuntos de opções globais
// 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)
Inserir um novo valor de status
Este exemplo mostra como inserir uma nova opção de razão do status para o atributo StatusAttributeMetadata.
O exemplo a seguir usa a entidade InsertStatusValueRequest para especificar uma nova opção para o atributo Contact.StatusCode da entidade Contact que é válido quando Contact.StateCode é 0 (ativo). O método IOrganizationService.Execute processa a solicitação.
O exemplo a seguir permite duas opções válidas para razão do status para contatos ativos: Ativo e Dormente.
// 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", _languageCode),
StateCode = 0
};
// Execute the request and store newly inserted value
// for cleanup, used later part of this sample.
_insertedStatusValue = ((InsertStatusValueResponse)_serviceProxy.Execute(
insertStatusValueRequest)).NewOptionValue;
Console.WriteLine("Created {0} with the value of {1}.",
insertStatusValueRequest.Label.LocalizedLabels[0].Label,
_insertedStatusValue);
' Use InsertStatusValueRequest message to insert a new status
' in an existing status attribute.
' Create the request.
Dim insertStatusValueRequest As InsertStatusValueRequest = New InsertStatusValueRequest With {
.AttributeLogicalName = "statuscode",
.EntityLogicalName = Contact.EntityLogicalName,
.Label = New Label("Dormant", _languageCode),
.StateCode = 0}
' Execute the request and store newly inserted value
' for cleanup, used later part of this sample.
_insertedStatusValue = (CType(_serviceProxy.Execute(insertStatusValueRequest), InsertStatusValueResponse)).NewOptionValue
Console.WriteLine("Created {0} with the value of {1}.", insertStatusValueRequest.Label.LocalizedLabels(0).Label, _insertedStatusValue)
Atualizar um valor de estado
Este exemplo mostra como alterar o rótulo para uma opção em um atributo StateAttributeMetadata.
O exemplo a seguir usa o UpdateStateValueRequest para alterar o rótulo de opção de Contact.StateCode de Ativo para Aberto.
// 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", _languageCode)
};
// Execute the request.
_serviceProxy.Execute(updateStateValue);
Console.WriteLine(
"Updated {0} state attribute of {1} entity from 'Active' to '{2}'.",
updateStateValue.AttributeLogicalName,
updateStateValue.EntityLogicalName,
updateStateValue.Label.LocalizedLabels[0].Label
);
' Modify the state value label from Active to Open.
' Create the request.
Dim updateStateValue As UpdateStateValueRequest = New UpdateStateValueRequest With {
.AttributeLogicalName = "statecode",
.EntityLogicalName = Contact.EntityLogicalName,
.Value = 1,
.Label = New Label("Open", _languageCode)}
' Execute the request.
_serviceProxy.Execute(updateStateValue)
Console.WriteLine("Updated {0} state attribute of {1} entity from 'Active' to '{2}'.",
updateStateValue.AttributeLogicalName,
updateStateValue.EntityLogicalName,
updateStateValue.Label.LocalizedLabels(0).Label)
Você não pode adicionar ou remover as opções de StateCode, mas pode alterar os rótulos das opções.
Inserir uma nova opção em um conjunto de opções locais
Este exemplo mostra como adicionar uma nova opção a um conjunto de opções locais. O exemplo a seguir usa o InsertOptionValueRequest para adicionar uma nova opção para um atributo PicklistAttributeMetadata personalizado da entidade de Contact.
// Create a request.
InsertOptionValueRequest insertOptionValueRequest =
new InsertOptionValueRequest
{
AttributeLogicalName = "new_picklist",
EntityLogicalName = Contact.EntityLogicalName,
Label = new Label("New Picklist Label", _languageCode)
};
// Execute the request.
int insertOptionValue = ((InsertOptionValueResponse)_serviceProxy.Execute(
insertOptionValueRequest)).NewOptionValue;
Console.WriteLine("Created {0} with the value of {1}.",
insertOptionValueRequest.Label.LocalizedLabels[0].Label,
insertOptionValue);
' Create a request.
Dim insertOptionValueRequest As InsertOptionValueRequest = New InsertOptionValueRequest With {
.AttributeLogicalName = "new_picklist",
.EntityLogicalName = Contact.EntityLogicalName,
.Label = New Label("New Picklist Label", _languageCode)}
' Execute the request.
Dim insertOptionValue As Integer = (CType(_serviceProxy.Execute(insertOptionValueRequest), InsertOptionValueResponse)).NewOptionValue
Console.WriteLine("Created {0} with the value of {1}.", insertOptionValueRequest.Label.LocalizedLabels(0).Label, insertOptionValue)
Alterar a ordem de opções em um conjunto de opções locais
Este exemplo mostra como alterar a ordem de opções em um conjunto de opções locais O exemplo a seguir recupera um atributo PicklistAttributeMetadata personalizado e altera a ordem das opções originais usando a função OrderByLINQ para classificar itens em ordem crescente pelo texto do rótulo. Em seguida, usa o OrderOptionRequest para definir a nova ordem de opções para o atributo.
Use a função OrderByDecending linq para ordenar os itens em ordem decrescente.
// 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.
RetrieveAttributeResponse retrieveAttributeResponse =
(RetrieveAttributeResponse)_serviceProxy.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
_serviceProxy.Execute(orderOptionRequest);
Console.WriteLine("Option Set option order changed");
' Use the RetrieveAttributeRequest message to retrieve
' a attribute by it's logical name.
Dim retrieveAttributeRequest As RetrieveAttributeRequest = New RetrieveAttributeRequest With {
.EntityLogicalName = Contact.EntityLogicalName,
.LogicalName = "new_picklist",
.RetrieveAsIfPublished = True}
' Execute the request.
Dim retrieveAttributeResponse As RetrieveAttributeResponse = CType(_serviceProxy.Execute(retrieveAttributeRequest), RetrieveAttributeResponse)
' Access the retrieved attribute.
Dim retrievedPicklistAttributeMetadata As PicklistAttributeMetadata = CType(retrieveAttributeResponse.AttributeMetadata, PicklistAttributeMetadata)
' Get the current options list for the retrieved attribute.
Dim optionList() As OptionMetadata = 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:
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 {
.AttributeLogicalName = "new_picklist",
.EntityLogicalName = Contact.EntityLogicalName,
.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)
Console.WriteLine("Option Set option order changed")
Excluir um atributo
Este exemplo mostra como excluir os atributos armazenados em um List<AttributeMetadata> que foram criados para a entidade Contact em Criar atributos. Para cada AttributeMetadata, o DeleteAttributeRequest prepara a solicitação que é processada usando o 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
_serviceProxy.Execute(deleteAttribute);
}
' Delete all attributes created for this sample.
For Each anAttribute As AttributeMetadata In addedAttributes
' Create the request object
Dim deleteAttribute As DeleteAttributeRequest = New DeleteAttributeRequest With {
.EntityLogicalName = Contact.EntityLogicalName,
.LogicalName = anAttribute.SchemaName}
' Set the request properties
' Execute the request
_serviceProxy.Execute(deleteAttribute)
Next anAttribute
Confira Também
Personalizar metadados do atributo de entidades
Mensagens dos metadados do atributo da entidade
Exemplo: Trabalhar com metadados de atributos
Personalizar mapeamentos de entidade e atributos
© 2017 Microsoft. Todos os direitos reservados. Direitos autorais