Skip to main content

Deleting Audit history change records through c#

Mainly I had this requirement where I had to delete audit log to shrink the database size so that it come back within log capacity threshold. 

Below is the code for the DeleteRecordChangeHistoryRequest() method usage. 
Here I am looping through the records to delete the changed history for a particular entity in my case it is "Customer Asset".

static void Main(string[] args)
{
try
{
 IOrganizationService _service;
 ClientCredentials credentials = new ClientCredentials();
 credentials.UserName.UserName = "username";
 credentials.UserName.Password = "pwd";
Uri serviceUri = new Uri(@"soapurl");

OrganizationServiceProxy proxy = new OrganizationServiceProxy(serviceUri, null, credentials, null);

 proxy.EnableProxyTypes();
  _service = (IOrganizationService)proxy;

//fetchXML for getting entity

 string fetchXML = @"<fetch mapping='logical'>   
                                       <entity name='msdyn_customerasset'>                                              
                                            <attribute name='msdyn_name'/>
                                            <attribute name='msdyn_customerassetid'/>                                             
                                       </entity>  
                                    </fetch>  
                                      ";

 EntityCollection EntityList = _service.RetrieveMultiple(new FetchExpression(fetchXML));
 Console.WriteLine("COUNT RESULTS: {0}", EntityList.Entities.Count);
              
 foreach (var record in EntityList.Entities)
{

     var EntityLogReference = new EntityReference(record.LogicalName, record.Id);
                        
    Console.WriteLine("Entity Name: " + EntityLogReference.LogicalName);

    if (EntityLogReference.LogicalName != "contact" || EntityLogReference.LogicalName != "account")
     {
      var DeleteAudit = new DeleteRecordChangeHistoryRequest();
      //-- Set entity to delete - workaround as CRM does not allow to delete Audit directly
       DeleteAudit.Target = new EntityReference(record.LogicalName, record.Id);

      if (EntityLogReference.Id != Guid.Empty)
      {
        _service.Execute(DeleteAudit);

     Console.WriteLine("Delete Successful for Entity " + record.LogicalName + "Record " + record.Id);
        }

 }
else
{
               Console.WriteLine("Skipped delete...");
}
 }                  
 }
catch (Exception ex)
{
      Console.Write(ex);              
}

Comments

Popular posts from this blog

Error 500 on the server for D365 finance and operations

While working on D365 finance and operations one fine day i came across the error 500. There are many reasons for this server. Below link can help you if encounter the same issue. https://community.dynamics.com/ax/f/33/t/195422 If any of solutions does not work for you then you might need to check if there are any newly added objects through code and they might be causing the issue. Try to remove them build and synchronize them with the database. https://community.dynamics.com/ax/b/axdilip/archive/2017/01/05/dynamics-365-for-operations-troubleshooting-http-500-httpcompileexception-error To debug more you can use solution provided in below link. https://www.linkedin.com/pulse/ax7-500-error-shashi-kant-yadav In my case the issue was related to the certificate expiration. To check the expired certificate on the server we can go to "Certificate Management Console" and see the certificates expiration date. To check this is power shell open "Windows PowerS

A reference to 'Dynamics.AX.XXXXX, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is required to compile this module.

The error "A reference to 'Dynamics.AX.Directory, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is required to compile this module." came on when i was building the project in visual studio. This error is thrown when the model is missing any reference which are needed to build the project. To update rectify this error we need to update the model. To do that go to "Dynamics 365 > Model Management > Update model parameter" A new window will open the model you want to update. Here i am selecting "Development" which i have created. Then click on next. On "Select referenced packages" select the missing packages which ones is throwing error. Here i have selected the "Directory" packages as they are the once throwing error. Select the packages. After selecting the packages click on "Next". And Click on "Finish". Rebuild the project and you are good to go.

D365 Month end and year end process

Period Closing Accounts Payable a.          Post invoices for all open/received purchase orders. b.          Post all pending invoices if received from Vendor. c.          Post and settle all payments. d.          Run Currency revaluation e.          Reconcile Vendor balance and trial balance for control accounts. f.           Set fiscal period on-hold for Vendor. Accounts Receivable a.          Post invoices for all open/delivered sales orders. b.          Post all pending free text invoices. c.          Post and settle all received payments. d.          Run Currency revaluation e.          Reconcile Vendor balance and trial balance for control accounts. f.           Set fiscal period on-hold for Customer. Cash and Bank a.          Perform Bank reconciliation b.          Set fiscal period on-hold for Bank. Procurement / Sales a.          Review and Close all open purchase/sales orders/Requisition if require. b.          Perform sort cl