Arbejde med attributmetadata
Udgivet: januar 2017
Gælder for: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online
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
Opret en opslagsattribut for en kunde
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);
}
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);
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);
Opret en opslagsattribut
En opslagsattribut oprettes vha. CreateOneToManyRequest.
I dette eksempel viser kode, hvordan du opretter en opslagsattribut. Du kan se hele eksempelkoden under Eksempel: Opret og opdater objektmetadata.
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);
Opret en opslagsattribut for en kunde
I modsætning til en opslagsattribut, oprettes en opslagsattribut ved hjælp af den CreateCustomerRelationshipsRequest-meddelelse, der føjer to relationer til opslagsattributten: én til Account-enheden og det andet til Contact-enheden. Du kan ikke føje en relation til andre enheder end Account- og Contact-enheder til en kundeopslagsattribut.
Bemærk
Denne funktion blev introduceret i første opdatering til CRM Online 2016 og i CRM 2016 Service Pack 1 (i det lokale miljø).
I dette eksempel viser kode, hvordan du opretter en kundeopslagsattribut. Du kan se hele eksempelkoden under Eksempel: Opret og opdater objektmetadata.
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);
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);
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);
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
);
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);
Æ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");
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);
}
Se også
Tilpasse objektets attributmetadata
Meddelelser for objektets attributmetadata
Eksempel: Arbejde med attributmetadata
Tilpasning af objekt- og attributtilknytninger
Microsoft Dynamics 365
© 2017 Microsoft. Alle rettigheder forbeholdes. Ophavsret