Update records without changing ‘Modified-By’ & ‘Modified-On’ in Dynamics 365

Hi Learners,

Using this approach we can update any field from a Record without actually impacting Modified By & Modified On values.

Please Note: It is not best practice to suppress Modified By & Modified On auto calculation by Dynamics, but this approach helps in scenarios like below

  1. We introduced a new filed and want to set it to default value for all the existing records, but don’t want to touch Modified By for reporting / downstream integration purposes.
  2. We missed updating some information during data migration and want to update the information later without Modified On/Modified By being updated.

Approach:

We will be using Pre-Operation plugin to set “modifiedon” & “modifiedby” to the values existing before Update operation (fetched from Pre-Image). Same Approach can be used if you want to override Modified By / Modified On / Created By / Created On with some custom values.

Step-By-Step process:

1) For the Entity you want to use (Account for this example), Create a new boolean field called “Override Modified On” (new_overridemodifiedon), set default value as NO.

2) Create a new Plugin with below code.

public void Execute(IServiceProvider serviceProvider)
{
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
Entity targetEntity = (Entity)context.InputParameters["Target"];
Entity preImage = context.PreEntityImages.Contains("PreImage") ? (Entity)context.PreEntityImages["PreImage"] : null;
bool _override = targetEntity.Contains("new_overridemodifiedon") ? (bool)targetEntity.Contains("new_overridemodifiedon") : false;    
if (preImage != null && _override)
    {
        targetEntity["modifiedon"] = preImage["modifiedon"];
        targetEntity["modifiedby"] = preImage["modifiedby"];
        //Set Override Modified On to false for future use.
        targetEntity["new_overridemodifiedon"] = false;
    }
}

3) Register the plugin and add step as shown below.

Message = Update;
Primary Entity = <<Entity you want to use >>
Filtering Attribute = new_overridemodifiedon (created in 1st step)
Pipeline Stage = Pre-Operation.

4) Register an Image under the step as below

Image Type = Pre Image
Name = PreImage
Parameters = modifiedby, modifedon

5) Now whenever you want to Update something without “Modified On” being touched, Check the checkbox “Override Modified On” along with your other changes.


The changes are tracked under Audit History.



But you can observe that, even after the fields are updated, Modified On doesn’t change and retains its old value.


6)It works even if you are making updates through SDK / any other integration platform. You just need to set “Override Modified On” = true, along with the update that you perform.

Example:


References:

1) https://community.dynamics.com/365/b/learncrminfingertips/posts/preserve-or-ovverride-createdon-createdby-modifiedon-modifiedby-fields

Use SQL Connection to Query CDS / Dynamics 365 Data (Works with SSMS and Power BI)

Hello Learners, here is the key take-away from Microsoft Business Applications Summit (MBAS)-2020.

Power Platform provides Tabular Data Stream (TDS) endpoint for CDS, using which we can access environment’s data using SSMS just like how we access the data in on-premise environment (*Only Read is permitted, cannot perform Updates)

**Image Source – Microsoft Docs


Below are the key points to remember.

  1. Its in Preview and not available for all regions. It works only with version 9.1.0.17437 and above. Check if the latest version is available for your region here. Alternatively you can check the version of your Environment from Settings –>About.

2. To use the SQL connection, you need to enable the Tabular Data Stream (TDS) endpoint using below options

a) Using OrgDBOrgSettingsToolStep-By-Step guidance for the same is available here.
b) Go to https://admin.powerplatform.microsoft.com -> Environments ->(select environment)-> Settings -> Features , and turn Enable TDS EndPoint on.



3. SQL Connection’s Server Name would be <organization url>,5558 (5558 is the port used for TDS endpoint. it is same for all organizations). For authentication, we can use the same Active Directory Credentials that we use to access the Organization. Application Users with Azure Client ID are not supported for now. Step-By-Step guidance is available here

4. The same SQL Connection Can be used in Power BI to analyse data. Step-By-Step guidance HERE

References for more details:

1) https://docs.microsoft.com/en-us/powerapps/developer/common-data-service/cds-sql-query
2) https://docs.microsoft.com/en-us/powerapps/maker/common-data-service/view-entity-data-power-bi
3) https://mymbas.microsoft.com/sessions/5b645f84-8689-4545-9b8a-af94fa2fad7c