By now, we know that it’s not easy or straight forward to get any details from a customer journey from the back-end.
In a customer journey, customers are not directly added but rather through a “Marketing Segment”. Now we have seen in the blog above on how to get segment details used in the journey. Once we have the segment Id, the next step is to fetch the customers from the segment and for that I have another blog explaining it: Dynamics 365 For Marketing – Retrieve Contacts From A Segment
By doing the above mentioned, you should be able to get all customer that are part of a journey.
In today’s blog I am going to be talking about ‘Customer Journey’ entity in dynamics 365 for marketing app or to be specific the ‘Customer Journey Designer’ which looks like below:
I call it ‘Mysterious’ because whatever happens in the journey ‘stays’ in the customer journey. i.e there is no way or its difficult to get the segment/contents being used in it. I am talking about Marketing Email, Marketing Page, Marketing Form etc. The question you might want to ask is why would I need that information? well, because of may be below:
You might have some validations on the content you can use in the customer journey
You might want to retrieve the data for reporting purpose
If you look into the relationships from customer journey to these entities, you wont find anything hence it gets difficult to retrieve these records or perform operations. In short Dynamics 365 Marketing works a little differently then our typical dynamics 365.
Whatever happens inside a customer journey designer sits in a field on this entity named as “msdyncrm_workflowdefintion“. It stores information about content added in this the journey in JSON format.
This is how it looks:
Let’s understand what this JSON means:
Each content is stored in a node called “ActivityTypeId“.
The Id of the content is stored in property “Itemid“.
To identify the type of content such as Marketing page form etc. refer to below table because it uses different names to each type of content:
Dynamics Entity Name
Internal Name In Customer Journey
Marketing Page
LandingPage
Marketing Form
MarketingForm
Survey
Survey
Marketing Email
Email
Marketing Event
Event
Marketing Segment
Segment
If you debug and parse this field data into JSON, looks like something below:
So when you retrieve/query this field, you have to loop through these JSON nodes and do validation using the Guids of these records like in the below example of Javascript:
var workflowDefintion= formContext.getAttribute("msdyncrm_workflowdefinition").getValue();
var workflowDefintionData = JSON.parse(workflowDefintion); //Parse it
var nodeLength = workflowDefintionData.length;
for (var i = 0; i < workflowDefintionData.length; i++) {
var node = workflowDefintionData[i];
/* Check if node is a Marketing page*/
if (node.ActivityTypeId === "LandingPage" && (i + 1) === nodeLength) {
// Perform Operations here
}