Del via


Arbejde med attributmetadata

 

Udgivet: november 2016

Gælder for: Dynamics CRM 2015

I dette emne bruges kodestykker fra Eksempel: Arbejde med attributmetadata for at vise, hvordan du udfører almindelige opgaver, når du arbejder med attributter.

Dette emne indeholder

Oprette attributter

Hente en attribut

Opdater en attribut

Opret en opslagsattribut

Opdater en tilstandsværdi

Opret en valgliste, der bruger en global grupperet indstilling

Indsæt en ny statusværdi

Indsæt en ny indstilling i en lokal grupperet indstilling

Ændr rækkefølgen af indstillingerne i en lokal grupperet indstilling

Slet en attribut

Oprette attributter

Du kan oprette attributter ved at definere en af typerne AttributeMetadata og derefter overføre den til meddelelsen CreateAttributeRequest.

Følgende eksempel definerer AttributeMetadata for en række forskellige typer attributter og føjer dem til en List<AttributeMetadata>. I slutningen af koden sendes attributdefinitionerne til en forekomst af klassen CreateAttributeRequest, og attributten oprettes vha. metoden Execute.

Følgende eksempel antager, at den aktuelle tilpasningspræfiks er 'new', da det er standardtilpasningspræfikset for organisationens løsningsudgiver. Du skal bruge tilpasningspræfikset for den løsningsudgiver, der giver mening for din løsningskontekst.


// 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

Hente en attribut

I dette eksempel vises, hvordan du henter AttributeMetadata for en attribut vha. RetrieveAttributeRequest. Dette eksempel henter metadataene for en brugerdefineret StringAttributeMetadata-attribut med navnet 'new_string' fra kontaktobjektet, der er oprettet i Oprette attributter.

Bemærk

Da RetrieveAsIfPublished er sand, returnerer denne anmodning den aktuelle ikke-udgivne definition af denne attribut. Du kan bruge dette, hvis du opretter en attributeditor, og du vil hente den ikke-udgivne definition af attributten. Ellers må du ikke angive RetrieveAsIfPublished.Flere oplysninger:Henter ikke-udgivne metadata


// 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)

Opdater en attribut

I dette eksempel vises, hvordan du opdaterer en attribut. Dette eksempel bruger UpdateAttributeRequest til at ændre egenskaben AttributeMetadata.DisplayName for en tidligere hentet brugerdefineret attribut til objektet 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)

Opret en opslagsattribut

I dette eksempel vises, hvordan du opretter en opslagsattribut.

En opslagsattribut oprettes vha. 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)

Opret en valgliste, der bruger en global grupperet indstilling

I dette eksempel vises, hvordan du opretter en PicklistAttributeMetadata-attribut, der er knyttet til en global grupperet indstilling.

Følgende eksempel bruger CreateAttributeRequest til at angive indstillinger for en PicklistAttributeMetadata-attribut for at bruge en global grupperet indstilling med et navn, der er repræsenteret ved string-variablen _globalOptionSetName.Flere oplysninger:Tilpas globale grupperede indstillinger


// 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)

Indsæt en ny statusværdi

I dette eksempel vises, hvordan du indsætter en ny Statusårsag-indstilling for attributten StatusAttributeMetadata.

Følgende eksempel bruger InsertStatusValueRequest til at angive en ny indstilling til Contact-objektet Contact.StatusCode-attribut, der er gyldig, når Contact.StateCode er 0 (aktiv). Metoden IOrganizationService.Execute behandler anmodningen.

Følgende eksempel tillader to gyldige Statusårsag-indstillinger for aktive kontakter: Aktiv og Sovende.


// 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)

Opdater en tilstandsværdi

I dette eksempel vises, hvordan du ændrer navnet på en indstilling i en StateAttributeMetadata-attribut.

Følgende eksempel bruger UpdateStateValueRequest til at ændre Contact.StateCode-indstillingens etiket fra Aktiv til Åben.


// 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)

Du kan ikke tilføje eller fjerne StateCode-indstillinger, men du kan ændre etiketterne til indstillingerne.

Indsæt en ny indstilling i en lokal grupperet indstilling

I dette eksempel vises, hvordan du føjer en ny indstilling til en lokal grupperet indstilling. Følgende eksempel bruger InsertOptionValueRequest til at føje en ny indstilling til en brugerdefineret PicklistAttributeMetadata-attribut for objektet 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)

Ændr rækkefølgen af indstillingerne i en lokal grupperet indstilling

I dette eksempel vises, hvordan du ændrer rækkefølgen af indstillingerne i en lokal grupperet indstilling. Følgende eksempel bruger en brugerdefineret PicklistAttributeMetadata-attribut og ændrer rækkefølgen af de oprindelige indstillinger vha. funktionerne OrderByLINQ til at sortere elementer i stigende rækkefølge efter etiketteksten. Derefter bruger det OrderOptionRequest til at angive den nye rækkefølge af indstillinger for attributten.

Brug linq-funktionen OrderByDecending til at sortere elementerne i faldende rækkefølge.


// 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")

Slet en attribut

I dette eksempel vises, hvordan du sletter attributter, der er gemt i en List<AttributeMetadata>, der er oprettet for objektet Contact i Oprette attributter. For hver AttributeMetadata forbereder DeleteAttributeRequest den anmodning, der er behandlet vha. 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

Se også

Tilpasse objektets attributmetadata
Meddelelser for objektets attributmetadata
Eksempel: Arbejde med attributmetadata
Tilpasning af objekt- og attributtilknytninger

© 2017 Microsoft. Alle rettigheder forbeholdes. Ophavsret