Im ersten Teil habe ich das Create selbst beschrieben, das eigentlich sehr simpel von statten geht. Für ein Create benötigt man jedoch Daten zum Anlegen. Damit beschäftigt sich der 2. Teil meines kleinen Blogexkurses.
Als erstes benötigen wir die Definitionen der Language Codes, die hab ich mal nach der SDK Vorlage erzeugt.
1: public sealed class LanguageCode
2: {
3: public const int German = 1031;
4: public const int English = 1033;
5:
6: private LanguageCode() {} // do nothing
7: }
Es empfiehlt sich das Erzeugen der Metadaten auch in eine eigene Methode zu kapseln.
1: public CRMPicklist.MetadataService.PicklistAttributeMetadata CreatePicklistMetadata(
2: Microsoft.Crm.SdkTypeProxy.EntityName entity,
3: string picklistName,
4: string labelName
5: string[] labels,
6: int languageCode)
7: {
8: CRMPicklist.MetadataService.PicklistAttributeMetadata pam =
9: new CRMPicklist.MetadataService.PicklistAttributeMetadata();
10:
11: // set base properties
12: pam.SchemaName = inPicklistName;
13: pam.DisplayName = CreateSingleLabel(labelName, languageCode);
14: pam.EntityLogicalName = entity.ToString();
15: pam.LogicalName = "new_action";
16: pam.Description = CreateSingleLabel("Picklist Attribute", languageCode);
17: pam.AttributeType = new CRMPicklist.MetadataService.CrmAttributeType();
18: pam.AttributeType.Value =
19: CRMPicklist.MetadataService.AttributeType.Picklist;
20:
21: // set access level
22: pam.RequiredLevel =
23: new CRMPicklist.MetadataService.CrmAttributeRequiredLevel();
24: pam.RequiredLevel.Value =
25: CRMPicklist.MetadataService.AttributeRequiredLevel.None;
26:
27: // picklist is valid for updating
28: CRMPicklist.MetadataService.CrmBoolean update =
29: new CRMPicklist.MetadataService.CrmBoolean();
30: update.Value = true;
31: pam.ValidForUpdate = update;
32:
33: // build picklist options
34: CRMPicklist.MetadataService.Option[] plOptions =
35: new CRMPicklist.MetadataService.Option[labels.Length];
36: CRMPicklist.MetadataService.Option plOption;
37:
38: // for backwards compatibility with CRM 3.0, all new picklists in CRM 4.0
39: // start with 200.000
40: offset = 200.000;
41:
42: // fill with labels[] data
43: for (int i = offset; i < offset + labels.Length; i++)
44: {
45: plOption = new CRMPicklist.MetadataService.Option();
46: plOption.Value = new CRMPicklist.MetadataService.CrmNumber();
47: plOption.Value.Value = i;
48: plOption.Label = CreateSingleLabel(labels[i - offset], languageCode);
49: plOptions[i - offset] = plOption;
50: }
51:
52: // set extended properties
53: pam.Options = plOptions;
54:
55: return pam;
56: }
Anmerkung: labelName sollte die Beschreibung wiedergeben im CRM System, z.B. "Address 1: Test Attribute". entity ist die Entität in der wir die neue Pickliste anlegen wollen (z.B. contacts).
Keine Kommentare:
Kommentar veröffentlichen