Create a custom entity

 

Applies To: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

This topic shows how to create a custom user-owned entity called Bank Account and add four different types of attributes to it.

You can also create organization-owned custom entities. More information:  Entity ownership

Note

You won’t be able to see this entity in the application navigation unless the entity properties are edited to set the Areas that display this entity are set.

In This Topic

Create a custom entity

Add a String attribute to the custom entity

Add a Money attribute to the custom entity

Add a DateTime attribute to the custom entity

Add a Lookup attribute to the custom entity

Create a custom entity

The following sample uses the CreateEntityRequest to create the entity and the StringAttributeMetadata PrimaryAttribute.

The _customEntityName value is “new_bankaccount”.


CreateEntityRequest createrequest = new CreateEntityRequest
{

 //Define the entity
 Entity = new EntityMetadata
 {
  SchemaName = _customEntityName,
  DisplayName = new Label("Bank Account", 1033),
  DisplayCollectionName = new Label("Bank Accounts", 1033),
  Description = new Label("An entity to store information about customer bank accounts", 1033),
  OwnershipType = OwnershipTypes.UserOwned,
  IsActivity = false,

 },

 // Define the primary attribute for the entity
 PrimaryAttribute = new StringAttributeMetadata
 {
  SchemaName = "new_accountname",
  RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
  MaxLength = 100,
  FormatName = StringFormatName.Text,
  DisplayName = new Label("Account Name", 1033),
  Description = new Label("The primary attribute for the Bank Account entity.", 1033)
 }

};
_serviceProxy.Execute(createrequest);
Console.WriteLine("The bank account entity has been created.");

Dim createrequest As CreateEntityRequest = New CreateEntityRequest With {
 .Entity = New EntityMetadata With {
  .SchemaName = _customEntityName,
  .DisplayName = New Label("Bank Account", 1033),
  .DisplayCollectionName = New Label("Bank Accounts", 1033),
  .Description = New Label("An entity to store information about customer bank accounts", 1033),
  .OwnershipType = OwnershipTypes.UserOwned,
  .IsActivity = False},
 .PrimaryAttribute = New StringAttributeMetadata With {
  .SchemaName = "new_accountname",
  .RequiredLevel = New AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
  .MaxLength = 100,
  .Format = StringFormat.Text,
  .DisplayName = New Label("Account Name", 1033),
  .Description = New Label("The primary attribute for the Bank Account entity.", 1033)
 }
}
'Define the entity
' Define the primary attribute for the entity
_serviceProxy.Execute(createrequest)
Console.WriteLine("The bank account entity has been created.")

Add a String attribute to the custom entity

The following sample adds a StringAttributeMetadata attribute to the Bank Account entity.


CreateAttributeRequest createBankNameAttributeRequest = new CreateAttributeRequest
{
 EntityName = _customEntityName,
 Attribute = new StringAttributeMetadata
 {
  SchemaName = "new_bankname",
  RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
  MaxLength = 100,
  FormatName = StringFormatName.Text,
  DisplayName = new Label("Bank Name", 1033),
  Description = new Label("The name of the bank.", 1033)
 }
};

_serviceProxy.Execute(createBankNameAttributeRequest);

Dim createBankNameAttributeRequest As CreateAttributeRequest = New CreateAttributeRequest With {
 .EntityName = _customEntityName,
 .Attribute = New StringAttributeMetadata With {
  .SchemaName = "new_bankname",
  .RequiredLevel = New AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
  .MaxLength = 100,
  .Format = StringFormat.Text,
  .DisplayName = New Label("Bank Name", 1033),
  .Description = New Label("The name of the bank.", 1033)
 }
}

_serviceProxy.Execute(createBankNameAttributeRequest)

Add a Money attribute to the custom entity

The following sample adds a MoneyAttributeMetadata attribute to the Bank Account entity.


CreateAttributeRequest createBalanceAttributeRequest = new CreateAttributeRequest
{
 EntityName = _customEntityName,
 Attribute = new MoneyAttributeMetadata
 {
  SchemaName = "new_balance",
  RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
  PrecisionSource = 2,
  DisplayName = new Label("Balance", 1033),
  Description = new Label("Account Balance at the last known date", 1033),

 }
};

_serviceProxy.Execute(createBalanceAttributeRequest);

Dim createBalanceAttributeRequest As CreateAttributeRequest = New CreateAttributeRequest With {
 .EntityName = _customEntityName,
 .Attribute = New MoneyAttributeMetadata With {
  .SchemaName = "new_balance",
  .RequiredLevel = New AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
  .PrecisionSource = 2,
  .DisplayName = New Label("Balance", 1033),
  .Description = New Label("Account Balance at the last known date", 1033)
 }
}

_serviceProxy.Execute(createBalanceAttributeRequest)

Add a DateTime attribute to the custom entity

The following sample adds a DateTimeAttributeMetadata attribute to the Bank Account entity.


CreateAttributeRequest createCheckedDateRequest = new CreateAttributeRequest
{
 EntityName = _customEntityName,
 Attribute = new DateTimeAttributeMetadata
 {
  SchemaName = "new_checkeddate",
  RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
  Format = DateTimeFormat.DateOnly,
  DisplayName = new Label("Date", 1033),
  Description = new Label("The date the account balance was last confirmed", 1033)

 }
};

_serviceProxy.Execute(createCheckedDateRequest);
Console.WriteLine("An date attribute has been added to the bank account entity.");

Dim createCheckedDateRequest As CreateAttributeRequest = New CreateAttributeRequest With {
 .EntityName = _customEntityName,
 .Attribute = New DateTimeAttributeMetadata With {
  .SchemaName = "new_checkeddate",
  .RequiredLevel = New AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
  .Format = DateTimeFormat.DateOnly,
  .DisplayName = New Label("Date", 1033),
  .Description = New Label("The date the account balance was last confirmed", 1033)
 }
}

_serviceProxy.Execute(createCheckedDateRequest)
Console.WriteLine("An date attribute has been added to the bank account entity.")

Add a Lookup attribute to the custom entity

The following sample uses CreateOneToManyRequest to create a one-to-many relationship with the Contact entity so that a LookupAttributeMetadata attribute is added to the Bank Account entity.

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

Dim req As New CreateOneToManyRequest() With {
 .Lookup = New LookupAttributeMetadata() With {
  .Description = New Label("The owner of the bank account", 1033),
  .DisplayName = New Label("Account Owner", 1033),
  .LogicalName = "new_parent_contactid",
  .SchemaName = "New_Parent_ContactId",
  .RequiredLevel = New AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.ApplicationRequired)},
 .OneToManyRelationship = New OneToManyRelationshipMetadata() With {
  .AssociatedMenuConfiguration = New AssociatedMenuConfiguration() With {
   .Behavior = AssociatedMenuBehavior.UseCollectionName,
   .Group = AssociatedMenuGroup.Details,
   .Label = New Label("Bank Accounts", 1033),
   .Order = 10000},
  .CascadeConfiguration = New CascadeConfiguration() With {
   .Assign = CascadeType.Cascade,
   .Delete = CascadeType.Cascade,
   .Merge = CascadeType.Cascade,
   .Reparent = CascadeType.Cascade,
   .Share = CascadeType.Cascade,
   .Unshare = CascadeType.Cascade},
  .ReferencedEntity = Contact.EntityLogicalName,
  .ReferencedAttribute = "contactid",
  .ReferencingEntity = _customEntityName,
  .SchemaName = "new_contact_new_bankaccount"
 }
}
_serviceProxy.Execute(req)

See Also

CreateEntityRequest
Use the sample and helper code
Customize entity metadata
Which entities are customizable?
Retrieve, update, and delete entities
Create and update an entity than can be emailed
Create a custom activity entity
Modify the icons for an entity
Modify the messages for an entity

Microsoft Dynamics 365

© 2016 Microsoft. All rights reserved. Copyright