Export (0) Print
Expand All

How to Retrieve a List of Messages and Entities that Support Plug-ins

banner art

[Applies to: Microsoft Dynamics CRM 4.0]

Find the latest SDK documentation: CRM 2015 SDK

The following code displays a list of messages and entities that support plug-ins. This sample code can be found in the following file in the SDK download:

Server\HowTo\CS\Entities\RetrieveSupportedMessages.cs

Example

[C#]
using System;
using System.Collections;
using CrmSdk;
using MetadataServiceSdk;
using Microsoft.Crm.Sdk.Utility;

namespace Microsoft.Crm.Sdk.HowTo
{
   public class RetrieveSupportedMessages
   {
      public static bool Run(string crmServerUrl, string orgName)
      {
         bool success = true;
         
         // Store all Create, Retrieve, Update, and Delete sdk messages supported by the account entity for verification.
         ArrayList crudMessagesForVerification = new ArrayList();

         try
         {
            // Set up the CRM Services.  
            CrmService service = 
                Microsoft.Crm.Sdk.Utility.CrmServiceUtility.GetCrmService(
                crmServerUrl, orgName);
            service.PreAuthenticate = true;

            MetadataService metadataService =
                Microsoft.Crm.Sdk.Utility.CrmServiceUtility.GetMetadataService(
                crmServerUrl, orgName);
            metadataService.PreAuthenticate = true;

            // Retrieve a list of all entities.
            RetrieveAllEntitiesRequest allEntitiesRequest = 
                new RetrieveAllEntitiesRequest();
            allEntitiesRequest.RetrieveAsIfPublished = true;
            allEntitiesRequest.MetadataItems = MetadataItems.EntitiesOnly;

            // Execute the request.
            RetrieveAllEntitiesResponse allEntitiesResponse =
            (RetrieveAllEntitiesResponse)metadataService.Execute(allEntitiesRequest);

            // Create a query to get all related sdk messages. 
            // An example SQL query that will be built for every entity:
            // SELECT sdkmessage.name
            // FROM   sdkmessage
            // INNER JOIN sdkmessagefilter ON sdkmessagefilter.skdmessageid = sdkmessage.skdmessageid
            // WHERE  sdkmessagefilter.primaryobjecttypecode = entity.LogicalName;
            QueryExpression supportedMessagesQuery = new QueryExpression();
            
            // Iterate through the retrieved entities.
            foreach (EntityMetadata entity in allEntitiesResponse.CrmMetadata)
            {
               // Retrieve the supported message name for this entity.
               ColumnSet sdkMessageColumns = new ColumnSet();
               sdkMessageColumns.Attributes = new string[] { "name" };
               
               // Build the WHERE clause condition.
               ConditionExpression schemaNameCondition = new ConditionExpression();
               schemaNameCondition.AttributeName = "primaryobjecttypecode";
               schemaNameCondition.Operator = ConditionOperator.Equal;
               schemaNameCondition.Values = new object[1];
               schemaNameCondition.Values[0] = entity.LogicalName;
               
               // Create the WHERE clause filter.
               FilterExpression whereExpression = new FilterExpression();
               whereExpression.Conditions = 
                   new ConditionExpression[] { schemaNameCondition };
               
               // Create the inner join link.
               LinkEntity innerJoinAccount = new LinkEntity();
               innerJoinAccount.JoinOperator = JoinOperator.Inner;
               innerJoinAccount.LinkCriteria = whereExpression;
               innerJoinAccount.LinkFromAttributeName = "sdkmessageid";
               innerJoinAccount.LinkFromEntityName =
                   EntityName.sdkmessage.ToString();
               innerJoinAccount.LinkToAttributeName = "sdkmessageid";
               innerJoinAccount.LinkToEntityName =
                   EntityName.sdkmessagefilter.ToString();

               // Set the query properties.
               supportedMessagesQuery.EntityName = EntityName.sdkmessage.ToString();
               supportedMessagesQuery.ColumnSet = sdkMessageColumns;
               supportedMessagesQuery.LinkEntities = 
                   new LinkEntity[] { innerJoinAccount };

               // Retrieve all sdkmessage names for this entity.
               BusinessEntityCollection coll =
                   service.RetrieveMultiple(supportedMessagesQuery);
               
               // Output the supported messages for this entity
               Console.WriteLine("============================================================================");
               Console.WriteLine("Entity: " + entity.LogicalName);
               if (coll.BusinessEntities.Length > 0)
               {
                  Console.WriteLine("Supported Messages:");
               }
               else
               {
                  Console.WriteLine("No Messages Supported.");
               }
               string sdkMessageName = string.Empty;
               foreach(BusinessEntity anSdkMessage in coll.BusinessEntities)
               {
                  sdkMessageName = ((sdkmessage)anSdkMessage).name;
                  Console.WriteLine("\t\t" + sdkMessageName);
                  
                  // Verify that the account entity supports create, retrieve, update, delete.
                  if (entity.LogicalName == EntityName.account.ToString())
                  {
                     // Store all Create, Retrieve, Update, and Delete messages.
                     if (sdkMessageName == "Create" || sdkMessageName == "Retrieve" ||
                        sdkMessageName == "Update" || sdkMessageName == "Delete")
                     {
                        crudMessagesForVerification.Add(sdkMessageName);
                     }
                  }
               }
            }

            #region check success

            // Validate that the 4 Create, Retrieve, Update, and Delete messages were found.
            if (crudMessagesForVerification.Count != 4)
            {
               success = false;
            }

            #endregion
         }
         catch (System.Web.Services.Protocols.SoapException)
         {
            // Perform error handling here.
            throw;
         }
         catch (Exception)
         {
            throw;
         }

         return success;
      }
   }
}

See Also

Reference


© 2010 Microsoft Corporation. All rights reserved.


Show:
© 2015 Microsoft