For those of us that design solutions on Microsoft CRM this is where I think we need to spend the most thinking time as we study up on CRM 2013.

In this post I’m going to walk you through the creation of a custom Business Process Flow and help explain how cross-entity flows work.

Here’s my scenario, I need CRM to support the sales and delivery process for an IT Company that implements software. The company’s primary business processes are in Sales and Delivery. Traditionally they have tracked Opportunities and Projects in their CRM system and these have been quite disconnected experiences. Their goal with CRM 2013 is to have a more integrated and consistent user experience where the system supports the process from opportunity qualification through to delivery of the project. This integrated process looks a bit like this:

So, my plan then is to utilize CRM’s “Opportunity” entity and a custom “Project” entity. I will surface a process centric UI across these 2 entities using the Business Process Flow feature in Microsoft CRM 2013.

Let’s jump straight to the interesting bit and have a look at the Business Process Flow configuration. We access this from the Processes area in CRM (where we have historically configured Workflows and Dialogs). The first thing I need to do is disable the existing Business Process Flows that exist for the Opportunity entity. There are 2 that come OOTB, I need to do an “Add Existing” to pull these into my Solution and then deactivate them, otherwise they get in my way:

Now I can create my new Business Process Flow:

I define the Stages that relate to the Opportunity record and list the fields I want grouped under each Stage:

Next I add the Project entity and the Stages that relate to that entity. I click the +/- icon and select the Project entity. Here the UI offers the 1:M related entities for Opportunity that have been enabled for Business Process Flows (there is a new setting on the entity record for this):

Now I define the Stages and select the fields I want for each Stage:

And this is how this all looks once I Activate the Rule and try it out on a new record:

Now what’s important to understand is at no point there did I configure the automatic generation of a Project record. If you are looking for that functionality within the Business Process Flow editor I’m afraid I need to reveal it doesn’t exist, the Business Process Flow will not create a Project for you. You have 2 options, either you utilize something like Workflow / JavaScript / Plug-ins to generate the Project once a certain event occurs, or, you leave it to the user to create the record as they transition Stages. Let me show you what that second option looks like to the user…

Back on the Opportunity form the user will populate the fields for each Stage and then click the Next Stage button to move forward in the process:

The flag icon moves to the next Stage and the fields for that Stage become visible:

When the user gets to the Stage transition that spans the Opportunity and Project entities the user experience changes, the user is prompted to select a Project record. CRM needs to know which Project record to continue on with. If we haven’t programmatically created the Project record for the user there will be no child Project records to pick from and the user will need to create one on the fly. Fortunately, this just takes a click:

And the UI is refreshed and the Project form displayed. The process chevron remains providing consistency to the users. Any new data captured from this point on writes to the Project record:

If you prefer to create the Project record for the user you can do this easily with a Real Time Workflow. Below I have configured a workflow to trigger once the “Contract Signed?” field is set to “yes” (it needs a Save to fire though so keep that in consideration when using real time workflows, they’re still not as immediate as JavaScript:

With this enabled, clicking Next Stage to move from Close to Discovery will offer up the automatically created Project record to the user to select:

So the user experience doesn’t really dictate the need to automatically create the Project record, you just need to consider how you will default any values on the record if you don’t create it programmatically. The relationship field mappings will help you out a little there.

Another area of consideration is whether you need to close out the Opportunity record. Again the Business Process Flow definition won’t really help you but Workflow, JavaScript and Plug-ins will.

I find the out-of-the-box experience of the Lead to Opportunity process a little disjointed in this area. In order to progress the process you need to use the Command bar and Qualify the Lead. I don’t like that. In my solutions I will endeavor to keep the user in the Process chevron so they all they need to do is complete fields and click Next Stage.

One last thing, in the Business Process Flow designer you can ‘close out’ the process cycle:

But all this does is allow you to define additional stages in your process where an earlier entity resume focus again (in my case this would be the Opportunity entity). If you do this, you cannot go any further with the process – i.e. you cannot add any additional entities, it is intended for the last steps in the process. Returning to and updating the Opportunity doesn’t make sense in my scenario but imagine you want a process flow that starts with Case, jumps into Appointment and then returns to Case. That might make sense in a scenario where Cases are captured for on site service requests, a technician goes out and then the Case is closed out.