DYNAMICS 365 HOW TO CREATE AND MANAGE POLYMORPHIC LOOKUP ATTRIBUTE IN SDK C#

In other posts, we saw how to create a Polymorphic Lookup Attribute using the Polymorphic Lookup Manager plugin and how to create a Polymorphic Lookup Attribute using WEB API

As per Microsoft docs, the creation of the Polymorphic Lookup Attribute can be currently done through SDK or WebAPI, therefore, in this post, we will see how to create a Polymorphic Lookup Attribute using SDK. We will see as well, what are the different actions that can be done against a polymorphic lookup attribute.

  1. In order to test these actions, I've created a console application that connects to a trial environment using OAUTH authentication.
    For more details on how to connect to a Dynamics 365 environment using OAUTH authentication, you can check the following post.
  2. The console application will call the below method in order to create the Polymorphic Lookup Attribute with four relationships under the account table

    public void CreatePolymorphicLookupAttribute()
    {
    OrganizationRequest createPolymorphicAttributeRequest = new OrganizationRequest
    {
    RequestName = "CreatePolymorphicLookupAttribute"
    };

    // Polymorphic lookup attribute details
    createPolymorphicAttributeRequest.Parameters["Lookup"] = new LookupAttributeMetadata()
    {
    SchemaName = "cak_MainSectorId",
    DisplayName = new Label("Main Sector", 1033)
    };

    // N:1 Relationship details with table 1
    var polymorphicRelation1 = new OneToManyRelationshipMetadata
    {
    ReferencingEntity = "account",
    ReferencedEntity = "cak_contractor",
    SchemaName = "account_cak_contractor"
    };
    // N:1 Relationship details with table 2
    var polymorphicRelation2 = new OneToManyRelationshipMetadata
    {
    ReferencingEntity = "account",
    ReferencedEntity = "cak_educational",
    SchemaName = "account_cak_educational"
    };
    // N:1 Relationship details with table 3
    var polymorphicRelation3 = new OneToManyRelationshipMetadata
    {
    ReferencingEntity = "account",
    ReferencedEntity = "cak_health",
    SchemaName = "account_cak_health"
    };
    // N:1 Relationship details with table 4
    var polymorphicRelation4 = new OneToManyRelationshipMetadata
    {
    ReferencingEntity = "account",
    ReferencedEntity = "cak_university",
    SchemaName = "account_cak_university"
    };
    // Add the N:1 relationships to the parameters
    createPolymorphicAttributeRequest.Parameters["OneToManyRelationships"] = new OneToManyRelationshipMetadata[]
    {
    polymorphicRelation1,
    polymorphicRelation2,
    polymorphicRelation3,
    polymorphicRelation4
    };
    // specify existing solution name to add the N:1 relationships components to it
    createPolymorphicAttributeRequest.Parameters["SolutionUniqueName"] = "CAKSOL";
    AdminService.Execute(createPolymorphicAttributeRequest);
    }

    Polymorphic lookup in SDK 1

    Polymorphic lookup in SDK 2

  3. Once the Polymorphic Lookup Attribute is created, you can achieve the following actions against it using the SDK
    • Add new relationship to an existing Polymorphic Lookup Attribute using the following method

      public void AddRelationshipToExistingPolymorphic() {
      var createRelationshipRequest = new CreateOneToManyRequest();
      // define the new relationship details
      var oneToManyRelationship = new OneToManyRelationshipMetadata
      {
      ReferencingEntity = "account",
      ReferencedEntity = "contact",
      SchemaName = "account_contact"
      };
      createRelationshipRequest.OneToManyRelationship = oneToManyRelationship;
      // define the existing polymorphic lookup attribute details
      createRelationshipRequest.Parameters["Lookup"] = new LookupAttributeMetadata()
      {
      SchemaName = "cak_MainSectorId",
      DisplayName = new Label("Main Sector", 1033)
      };
      AdminService.Execute(createRelationshipRequest);
      }
      Polymorphic lookup in SDK 3

    • Delete a relationship from an existing Polymorphic Lookup Attribute using the following method

      public void DeleteRelationshipFromExistingPolymorphic() {
      var deleteRelationshipRequest = new DeleteRelationshipRequest
      {
      // name of the relationship to be deleted
      Name = "account_contact"
      };
      AdminService.Execute(deleteRelationshipRequest);
      }


    • Delete an existing Polymorphic Lookup Attribute using the following method

      public void DeletePolymorphicLookupAttribute() {
      DeleteAttributeRequest deletePolymorphicAttributeRequest = new DeleteAttributeRequest();
      // define the entity name where the polymorphic lookup attribute exists
      deletePolymorphicAttributeRequest.EntityLogicalName = "account";
      // define the existing polymorphic lookup attribute
      deletePolymorphicAttributeRequest.LogicalName = "cr53c_mainsectorid";
      AdminService.Execute(deletePolymorphicAttributeRequest);
      }


Hope This Helps!

Comments

Popular posts from this blog

DYNAMICS 365 FILTER LOOKUP FIELD BASED ON N:N RELATIONSHIP

DYNAMICS 365 LEVEL UP BROWSER EXTENSION - PART 1 - FORMS

DYNAMICS 365 REFERENCE PANEL