There are two main issues I have encountered with marketing lists in Microsoft Dynamics CRM 4:
- There are limitations in using advanced find to identify contact, account or lead records to include in the marketing list.
- Marketing lists in Microsoft Dynamics CRM 4 only store the contact id.
Both make it difficult to use Microsoft Dynamics CRM 4 to create a marketing list and pull product specific data for each item in the list to include in marketing materials, such as letters or brochures. I will discuss each limitation in more detail below.
The main problem with using advanced find to identify contacts, accounts or leads to include in a marketing list lies in the fact that advanced find works from the parent entity (contact, account or lead) down to the child entities (products bought for example). Many times, however, the search criteria for a marketing list needs to work from the child entities up to the parent entity. For example, you might need to identify a product based on specific criteria and then navigate up the entity chain the find the contact who owns that product. Using advanced find, you cannot identify a product based on specific criteria and work back up to the contact.
The second problem with using advanced find to indentify contacts, accounts or leads to include in a marketing list is that you can’t compare two records by an attribute value. For example, if a contact purchased product A on January 1, 2008 and then bought replacement product B on June 6, 2010, you can’t search for Product A and try to find a matching product B based on serial number or some other attribute. Many real world query criteria for generating marketing lists rely on such complex matching scenarios, which advanced find cannot handle.
Identification by contact ID
Microsoft Dynamics CRM 4 marketing lists only store the contact, account or lead id, no attribute fields. You cannot modify a marketing list to include other fields, such as serial number, product description, or some other attribute. This issue arises whenever there is a one-to-many relationship between the contact, account or lead and its child entity. For example, suppose a customer owns two cars, a red Ford Mustang and silver Nissan Altima. If some attribute of the Altima, such as the brand of tire on the car, results in the customer being on the marketing list, but the Mustang’s brand of tire would not place the customer on the marketing list, you cannot later run a program that will send a letter to the customer and include specific information about the Altima in the letter because all you have is the contact, account or lead id. You have no way to determine which car should be used to fill out the letter.
To work around the issues, we used an SSRS report and stored procedure to identify the contact records to include in the list. We then exported the report results to a comma separated file, which included the contact id as well as specific attribute data for the contacts child entities. We called a web service to create a marketing list in CRM using the CRM APIs and wrote the attribute data to a database table that linked the marketing list and contact to the correct attribute data. To process the marketing list, we got the marketing list and looped through the contacts. For each contact record in the marketing list, we pulled the attribute data from the database table and were then able to include that data in marketing materials.