Create and update an entity than can be emailed

 

Applies To: Dynamics CRM 2013

You can create an entity that contains an email address you can use to send email activities to records for that entity.

The following sample creates a custom entity and sets the IsActivityParty property to true. It also creates a StringAttributeMetadata attribute using StringFormatName.Email to provide an email address to use.

Even if you add other StringAttributeMetadata attributes formatted as an email address, only the first one specified is used.



// Create the custom entity.
CreateEntityRequest createrequest = new CreateEntityRequest
{
    // Define an entity to enable for emailing. In order to do so,
    // IsActivityParty must be set.
    Entity = new EntityMetadata
    {
        SchemaName = _customEntityName,
        DisplayName = new Label("Agent", 1033),
        DisplayCollectionName = new Label("Agents", 1033),
        Description = new Label("Insurance Agents", 1033),
        OwnershipType = OwnershipTypes.UserOwned,
        IsActivity = false,

        // Unless this flag is set, this entity cannot be party to an
        // activity.
        IsActivityParty = true
    },

    // As with built-in emailable entities, the Primary Attribute will
    // be used in the activity party screens. Be sure to choose descriptive
    // attributes.
    PrimaryAttribute = new StringAttributeMetadata
    {
        SchemaName = "new_fullname",
        RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
        MaxLength = 100,
        FormatName = StringFormatName.Text,
        DisplayName = new Label("Agent Name", 1033),
        Description = new Label("Agent Name", 1033)
    }
};

_serviceProxy.Execute(createrequest);
Console.WriteLine("The emailable entity has been created.");

// The entity will not be selectable as an activity party until its customizations
// have been published. Otherwise, the e-mail activity dialog cannot find
// a correct default view.
PublishAllXmlRequest publishRequest = new PublishAllXmlRequest();
_serviceProxy.Execute(publishRequest);

// Before any emails can be created for this entity, an Email attribute
// must be defined.
CreateAttributeRequest createFirstEmailAttributeRequest = new CreateAttributeRequest
{
    EntityName = _customEntityName,
    Attribute = new StringAttributeMetadata
    {
        SchemaName = "new_emailaddress",
        RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
        MaxLength = 100,                            
        FormatName = StringFormatName.Email,
        DisplayName = new Label("Email Address", 1033),
        Description = new Label("Email Address", 1033)
    }
};

_serviceProxy.Execute(createFirstEmailAttributeRequest);
Console.WriteLine("An email attribute has been added to the emailable entity.");

// Create a second, alternate email address. Since there is already one 
// email attribute on the entity, this will never be used for emailing
// even if the first one is not populated.
CreateAttributeRequest createSecondEmailAttributeRequest = new CreateAttributeRequest
{
    EntityName = _customEntityName,
    Attribute = new StringAttributeMetadata
    {
        SchemaName = "new_secondaryaddress",
        RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
        MaxLength = 100,                            
        FormatName = StringFormatName.Email,
        DisplayName = new Label("Secondary Email Address", 1033),
        Description = new Label("Secondary Email Address", 1033)
    }
};

_serviceProxy.Execute(createSecondEmailAttributeRequest);

Console.WriteLine("A second email attribute has been added to the emailable entity.");


' Create the custom entity.
Dim createrequest As CreateEntityRequest = New CreateEntityRequest With {.Entity = New EntityMetadata With {
  .SchemaName = _customEntityName,
  .DisplayName = New Label("Agent", 1033),
  .DisplayCollectionName = New Label("Agents", 1033),
  .Description = New Label("Insurance Agents", 1033),
  .OwnershipType = OwnershipTypes.UserOwned,
  .IsActivity = False, .IsActivityParty = True},
  .PrimaryAttribute = New StringAttributeMetadata With {
   .SchemaName = "new_fullname",
   .RequiredLevel = New AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
   .MaxLength = 100,
   .Format = StringFormat.Text,
   .DisplayName = New Label("Agent Name", 1033),
   .Description = New Label("Agent Name", 1033)
   }
  }
' Define an entity to enable for emailing. In order to do so,
' IsActivityParty must be set.
' Unless this flag is set, this entity cannot be party to an
' activity.
' As with built-in emailable entities, the Primary Attribute will
' be used in the activity party screens. Be sure to choose descriptive
' attributes.

_serviceProxy.Execute(createrequest)
Console.WriteLine("The emailable entity has been created.")

' The entity will not be selectable as an activity party until its customizations
' have been published. Otherwise, the e-mail activity dialog cannot find
' a correct default view.
Dim publishRequest As New PublishAllXmlRequest()
_serviceProxy.Execute(publishRequest)

' Before any emails can be created for this entity, an Email attribute
' must be defined.
Dim createFirstEmailAttributeRequest As CreateAttributeRequest = New CreateAttributeRequest With {
 .EntityName = _customEntityName,
 .Attribute = New StringAttributeMetadata With {
  .SchemaName = "new_emailaddress",
  .RequiredLevel = New AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
  .MaxLength = 100,
  .Format = StringFormat.Email,
  .DisplayName = New Label("Email Address", 1033),
  .Description = New Label("Email Address", 1033)
 }
}

_serviceProxy.Execute(createFirstEmailAttributeRequest)
Console.WriteLine("An email attribute has been added to the emailable entity.")

' Create a second, alternate email address. Since there is already one 
' email attribute on the entity, this will never be used for emailing
' even if the first one is not populated.
Dim createSecondEmailAttributeRequest As CreateAttributeRequest = New CreateAttributeRequest With {
 .EntityName = _customEntityName,
 .Attribute = New StringAttributeMetadata With {
  .SchemaName = "new_secondaryaddress",
  .RequiredLevel = New AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
  .MaxLength = 100,
  .Format = StringFormat.Email,
  .DisplayName = New Label("Secondary Email Address", 1033),
  .Description = New Label("Secondary Email Address", 1033)
 }
}

_serviceProxy.Execute(createSecondEmailAttributeRequest)

Console.WriteLine("A second email attribute has been added to the emailable entity.")

See Also

Use the sample and helper code
Customize entity metadata
Which entities are customizable?
Create a custom entity
Retrieve, update, and delete entities
Create a custom activity entity
Modify the icons for an entity
Modify the messages for an entity
Sample: Create and update an emailable entity