Dynamics CRM 2016 Missing Required Components

After upgrading to Microsoft Dynamics CRM 2016 (on-premise) importing a solution caused problems. After enabling tracing on the CRM-server I found that there where a few missing required components.

The Missing Required Components error

The following error was found in the error log file:

CrmException: Cannot add a Root Component 00000000-0000-0000-0000-000000000000 of type 20 because it is not in the target system.

The fix

I opened my solution and browsed to the Security Role component. Guess what? Somehow the “System Customizer” role was added as a record to the solution.

security-role

If you encounter any “Cannot add Root Component”- errors, you might want to look to the specified entity. Here is a list of all the components and their according component number. You can find these components from the solution.xml file, as found on CRMBuilds.

RootComponent type=”1″ is for a Entity
RootComponent type=”2″ is for a Attribute
RootComponent type=”3″ is for a Relationship
RootComponent type=”4″ is for a Attribute Picklist Value
RootComponent type=”5″ is for a Attribute Lookup Value
RootComponent type=”6″ is for a View Attribute
RootComponent type=”7″ is for a Localized Label
RootComponent type=”8″ is for a Relationship Extra Condition
RootComponent type=”9″ is for a Option Set
RootComponent type=”10″ is for a Entity Relationship
RootComponent type=”11″ is for a Entity Relationship Role
RootComponent type=”12″ is for a Entity Relationship Relationships
RootComponent type=”13″ is for a Managed Property
RootComponent type=”20″ is for a Role
RootComponent type=”21″ is for a Role Privilege
RootComponent type=”22″ is for a Display String
RootComponent type=”23″ is for a Display String Map
RootComponent type=”24″ is for a Form
RootComponent type=”25″ is for a Organization
RootComponent type=”26″ is for a Saved Query
RootComponent type=”29″ is for a Workflow
RootComponent type=”31″ is for a Report
RootComponent type=”32″ is for a Report Entity
RootComponent type=”33″ is for a Report Category
RootComponent type=”34″ is for a Report Visibility
RootComponent type=”35″ is for a Attachment
RootComponent type=”36″ is for a Email Template
RootComponent type=”37″ is for a Contract Template
RootComponent type=”38″ is for a KB Article Template
RootComponent type=”39″ is for a Mail Merge Template
RootComponent type=”44″ is for a Duplicate Rule
RootComponent type=”45″ is for a Duplicate Rule Condition
RootComponent type=”46″ is for a Entity Map
RootComponent type=”47″ is for a Attribute Map
RootComponent type=”48″ is for a Ribbon Command
RootComponent type=”49″ is for a Ribbon Context Group
RootComponent type=”50″ is for a Ribbon Customization
RootComponent type=”52″ is for a Ribbon Rule
RootComponent type=”53″ is for a Ribbon Tab To Command Map
RootComponent type=”55″ is for a Ribbon Diff
RootComponent type=”59″ is for a Saved Query Visualization
RootComponent type=”60″ is for a System Form
RootComponent type=”61″ is for a Web Resource
RootComponent type=”62″ is for a Site Map
RootComponent type=”63″ is for a Connection Role
RootComponent type=”70″ is for a Field Security Profile
RootComponent type=”71″ is for a Field Permission
RootComponent type=”90″ is for a Plugin Type
RootComponent type=”91″ is for a Plugin Assembly
RootComponent type=”92″ is for a SDK Message Processing Step
RootComponent type=”93″ is for a SDK Message Processing Step Image
RootComponent type=”95″ is for a Service Endpoint

 

 

clickdimensions-header

ClickDimensions: send e-mail to EmailAdress2 from workflow

I have been ClickDimensions customers for a few months now. The basic functions work great and are really easy to set up (even for a non-programmer). However, if you would like to use more of the sophisticated marketing automation, you need to dig a little deeper. One of the problems I recently encountered, was that I would like to send a ClickDimensions e-mail to the contact’s secondary emailadress from a workflow, known as EmailAdress2 in Dynamics CRM. This is an alternative emailadress for a contact, which is sent an automated email when one of the sales reps win an opportunity.

I asked the ClickDimensions support team for a little help. Although they do great work over there, they are limited to the ClickDimensions core functions and entities. Their response was good, but was not going to help my any further: “Since Workflows and the Opportunity entity are not native to ClickDimensions, we are unable to provide support for them.  If you need assistance in setting up this Email Send via a Workflow or using dynamic content to pull values off of the Contact record, you will need to contact your CRM partner.

So, time to make a work around. We will do this by a combination of workflows, marketing lists and ClickDimensions marketing automation.

Send one-to-many email to EmailAdress2

When creating a regular E-mail Send (Marketing > ClickDimensions > E-mail Send) you are able to pick emailadress 1 through 3, which is great when sending a one-to-many campaign. However, I would like to send a one-to-one campaign, triggered by a field in the opportunity.

clickdimensions-send-emailadress2

ClickDimensions offers the option to create Email Sends for different email adress fields.

Send e-mail to EmailAdress2 from a workflow

First I tried making a custom entity and tried copying the field EmailAdress2 to EmailAdress1. Bummer, since ClickDimensions only allows sending e-mails to contacts, accounts or leads. That is before I stumbled upon the Add to marketing list function in ClickDimensions, a great feature. This wil let you add contacts, leads or accounts to Marketing List from a workflow. Then, by building a Campaign Automation, we should be able to send e-mails to Emailadress2 from a workflow.

Step 1: Make two marketing lists

Create two new marketing lists in CRM. The first will be called Emails to be send to EmailAdress2 from workflow, the other Emails already sent to EmailAdress2 from workflow. We will use the second marketing list to monitor which contacts have already received the emails.

clickdimensions-marketing-list1

clickdimensions-marketing-list2

Step 2: Create the workflow

You will find the function under “Add Step” > “Marketing Lists” > “Update Marketing Lists Members”.

update-marketing-list-members

The workflow will be triggered when the status of the Opportunity changes to “Won”.

email-send-clickdimensions-workflow

Set 3: Set properties for the marketing list

Click on “Set properties”. Use the Dynamic Values to set the linked contact opportunity for the contact. Select the “Emails to be send to EmailAdress2 from workflow” marketing list we created earlier.

clickdimensions-marketing-list-members-input

Step 4: Build the Campaign Automation

Next up is creating the Campaign Automation, that is found under Marketing > Marketing Automation > Campaign Automation. Create your campaign and open the builder. Now, select “Added to List” as trigger and create a new series. Select the marketing list “Emails to be send to EmailAdress2 from workflow” as the trigger list.

member-added-to-list

Inside the series, specify your e-mail template to be send and select two more actions: add to list and remove from list. This way we will have Clickdimensions move list members from one list to the other. Inside the Send Email action you can specify to send to Emailadress2.

clickdimensions-add-and-remove

Step 5: Publish and test!

You should be done by now and have a workaround to send emails to EmailAdress2 from a workflow.