Freitag, 4. April 2008

Pickliste unter CRM 4.0 - Create (Teil 2)

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: