Every record in Microsoft Dynamics CRM automatically includes a number of date/time fields such as CreatedOn and ModifiedOn. More fields can be added as needed. However, sometimes a single date/time field isn’t enough to truly capture the history of a record.
This is especially true of records that might pass through cyclical processes. A Membership, for example, might be renewed multiple times. Thus, a single RenewedOn field would only ever capture the latest renewal date.
To support business logic or to truly capture the history of a record, a child record is required to capture the date of all significant events. For this I like to use a Milestone record.
A Milestone is a custom activity. This means it can be used with any entity without any special configuration. It also means that once closed it cannot be tampered with.
As an activity, there are a number of standard fields which are useful, including Due Date.
Closed as Met or Unmet
When the Due Date of a Milestone is met it should be closed with either the Status Reason of “Met” or “Unmet”.
While the Description field can be used to collect the details of any particular Milestone, it is convenient to categorize Milestones by Milestone Type. This will help in filtering for views and reports.
Using both Milestone and Milestone Type, the complete history of any type of record can be traced. An Application for a Building Permit, for example, might be put on hold and then reactivated three times after the Applicant clarified technical details on the accompanying plans.
Compare history of records in different entities
Being an activity that can reference any kind of entity, a Milestone can be used as a point of commonality between records of two different kinds.
Create with Process
Milestones can be created automatically based upon some trigger. The easiest way to do this is with an Automated Workflow or a Dialogue.