Delen via


Werken met kenmerkmetagegevens

 

Gepubliceerd: januari 2017

Is van toepassing op: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

In dit onderwerp worden codefragmenten gebruikt uit Voorbeeld: Werken met kenmerkmetagegevens om te laten zien hoe algemene taken kunnen worden uitgevoerd bij het werken met kenmerken.

In dit onderwerp

Kenmerken maken

Een kenmerk ophalen

Een kenmerk bijwerken

Een opzoekkenmerk maken

Een klantopzoekkenmerk maken

Een waarde van de status bijwerken

Een selectielijst maken waarin een algemene optieset wordt gebruikt

Een nieuwe statuswaarde invoegen

Een nieuwe optie invoegen in een lokale optieset

De volgorde van opties in een lokale optieset wijzigen

Een kenmerk verwijderen

Kenmerken maken

U maakt kenmerken door een van de volgende typen AttributeMetadata te definiëren en deze door te geven aan het bericht CreateAttributeRequest.

In het volgende voorbeeld worden de AttributeMetadata gedefinieerd voor een aantal verschillende typen kenmerken en worden deze samengevoegd tot een List<AttributeMetadata>. Aan het einde van de code worden de kenmerkdefinities doorgegeven aan een exemplaar van de klasse CreateAttributeRequest en wordt het kenmerk gemaakt met de methode Execute.

In het volgende voorbeeld wordt ervan uitgegaan dat het huidige aanpassingsvoorvoegsel 'nieuw' is omdat dit het standaard aanpassingvoorvoegsel voor de oplossingsuitgever van de organisatie is. U kunt het beste het aanpassingsvoorvoegsel voor de oplossingsuitgever gebruiken dat relevant is voor uw oplossingscontext.


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

Een kenmerk ophalen

Dit voorbeeld laat zien hoe u de AttributeMetadata voor een kenmerk ophaalt met de RetrieveAttributeRequest. In dit voorbeeld worden de metagegevens voor een aangepast kenmerk StringAttributeMetadata genaamd 'new_string' opgehaald vanuit de entiteit Contactpersoon die is gemaakt in Kenmerken maken.

Notitie

Omdat RetrieveAsIfPublished waar is, retourneert deze aanvraag de huidige niet-gepubliceerde definitie van dit kenmerk. U kunt dit eventueel gebruiken als u een Kenmerkeditor maakt en u de niet-gepubliceerde definitie van het kenmerk wilt terughalen. Anders kunt u RetrieveAsIfPublished beter niet specificeren.Meer informatie:Niet-gepubliceerde metagegevens ophalen


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

Een kenmerk bijwerken

Dit voorbeeld laat zien hoe een kenmerk wordt bijgewerkt. In dit voorbeeld wordt UpdateAttributeRequest gebruikt om de eigenschap AttributeMetadata.DisplayName van een eerder opgehaald aangepast kenmerk voor de entiteit Contact te wijzigen.


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

Een opzoekkenmerk maken

Een opzoekkenmerk wordt gemaakt met behulp van de CreateOneToManyRequest.

Deze voorbeeldcode laat zien hoe u een opzoekkenmerk maakt. Als u het volledige voorbeeld wilt bekijken, raadpleegt u Voorbeeld: Entiteitsmetagegevens maken en bijwerken.

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"
    }
};
_serviceProxy.Execute(req);

Een klantopzoekkenmerk maken

In tegenstelling tot een opzoekkenmerk wordt een klantopzoekkenmerk gemaakt met het bericht CreateCustomerRelationshipsRequest, waarmee twee relaties aan het opzoekkenmerk worden toegevoegd: een aan de entiteit Account en de andere aan de entiteit Contact. U kunt geen relatie aan een andere entiteit toevoegen met uitzondering van de entiteitenAccount en Contact voor een klantopzoekkenmerk.

Notitie

Deze functie werd geïntroduceerd in update 1 van CRM Online 2016 en in CRM 2016 Service Pack 1 (on-premises).

Deze voorbeeldcode laat zien hoe u een klantopzoekkenmerk maakt. Als u het volledige voorbeeld wilt bekijken, raadpleegt u Voorbeeld: Entiteitsmetagegevens maken en bijwerken.

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",
        }
    },
};
_serviceProxy.Execute(createCustomerReq);

Een selectielijst maken waarin een algemene optieset wordt gebruikt

Dit voorbeeld laat zien hoe u een kenmerk PicklistAttributeMetadata maakt dat is gekoppeld aan een algemene optieset.

Het volgende voorbeeld gebruikt CreateAttributeRequest voor het instellen van de opties voor een kenmerk PicklistAttributeMetadata om een algemene optieset te gebruiken met een naam die wordt weergegeven door de tekenreeksvariabele _globalOptionSetName.Meer informatie:Algemene optiesets aanpassen


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

Een nieuwe statuswaarde invoegen

Dit voorbeeld laat zien hoe u een nieuwe optie voor Reden van status invoegt voor het kenmerk StatusAttributeMetadata.

Het volgende voorbeeld gebruikt de InsertStatusValueRequest voor het opgeven van een nieuwe optie voor het kenmerk Contact.StatusCode van de entiteit Contact die geldig is als de Contact.StateCode 0 (Actief) is. De methode IOrganizationService.Execute verwerkt de aanvraag.

Het volgende voorbeeld staat twee geldige opties voor Reden van status voor actieve contactpersonen toe: Actief en Sluimerend.


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

Een waarde van de status bijwerken

Dit voorbeeld laat zien hoe u het label van een optie in een kenmerk StateAttributeMetadata kunt wijzigen.

Het volgende voorbeeld gebruikt UpdateStateValueRequest om het optielabel Contact.StateCode te wijzigen van Actief in Openen.


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

U kunt de opties voor StateCode niet toevoegen of verwijderen, maar u kunt de labels voor de opties wel wijzigen.

Een nieuwe optie invoegen in een lokale optieset

Dit voorbeeld laat zien hoe u een nieuwe optie aan een lokale optieset kunt toevoegen. In het volgende voorbeeld wordt InsertOptionValueRequest gebruikt om een nieuwe optie toe te voegen aan een aangepast kenmerk PicklistAttributeMetadata voor de entiteit 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);

De volgorde van opties in een lokale optieset wijzigen

Dit voorbeeld laat zien hoe u de volgorde van opties in een lokale optieset kunt wijzigen. In het volgende voorbeeld wordt een aangepast kenmerk PicklistAttributeMetadata opgehaald en wordt de volgorde van de oorspronkelijke opties gewijzigd met de functie OrderByLINQ voor het sorteren van items in oplopende volgorde op basis van de labeltekst. Vervolgens gebruikt het OrderOptionRequest om de nieuwe volgorde van de opties voor het kenmerk in te stellen.

Gebruik de functie OrderByDecending linq om de items in aflopende volgorde te rangschikken.


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

Een kenmerk verwijderen

Dit voorbeeld laat zien hoe u kenmerken verwijdert die zijn opgeslagen in een List<AttributeMetadata> die is gemaakt voor de entiteit Contact in Kenmerken maken. Voor elk AttributeMetadata bereidt de DeleteAttributeRequest de aanvraag voor die is verwerkt met 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);
}

Zie ook

Metagegevens van entiteitskenmerken aanpassen
Berichten van metagegevens over entiteitskenmerken
Voorbeeld: Werken met kenmerkmetagegevens
Entiteit en kenmerktoewijzingen aanpassen

Microsoft Dynamics 365

© 2017 Microsoft. Alle rechten voorbehouden. Auteursrecht