loading... Salesforce Cat
Showing posts with label Saleaforce. Show all posts
Showing posts with label Saleaforce. Show all posts

Thursday, November 6, 2014

Salesforce History Tracking :Access Field History From Apex Code


In my last post Salesforce History Tracking - Step by Step Guide I discussed in detail about enabling history tracking on a custom object and viewing those logs using Salesforce reports and History tracking related list.In this post I am going to discuss how field tracking logs can be accessed from Apex code.

Salesforce maintains separate internal object to maintain history logs for each history tracking enabled object.The naming of these tables follows a simple convention so should be easy to find. For standard objects the name of the history table follows the format: '<ObjectName>History' so for the Account object the history table is AccountHistory.

For custom objects the name of the convention simply replaces the 'c' on the end of the API name with 'History'. So, for a custom object call My_Object__c the history table is called My_Object_History.

All history tracking tables has following fields.


  • ParentId : This is the Id  of record this history tracking log is related to (id of record field modification happend)
  • Field      :  API name of the modified field.
  • OldValue : Field value prior to the modification.
  • NewValue : Field value after modification
  • CreatedById : Id of the User who made the modification. 
History Tracking logs can be queried via SOQL as shown below

Query all field modification logs of a custom object called  My_Object__c

 Select Id,Field,CreatedById ,OldValue,NewValue,EditedBy From My_Object__History  

Query All field modification logs related to a field called My_Field__c of My_Object__c



 Select Id,Field,CreatedById ,OldValue,NewValue,EditedBy From Friend__History   
 Where Field ='My_Field__c'  


Query  All field modfication logs related to a particular record

 
 Select Id,Field,CreatedById ,OldValue,NewValue,EditedBy From Friend__History   
 Where ParentId=:RecordId   


Using SOQL to query history logs you can build your own Visualforce pages to display field modification details to the end users. 

Friday, October 17, 2014

Salesforce Record Deletion

In this post I am going to discuss Salesforce record deletion process.In Salesforce once record are deleted those records are moved to the recycle bin and they are no longer accessible through the  SOQL queries or Salesforce standard views.Deleted records are maintained in the recycle bin of 15 days (earlier it was 45 but seems Salesfore has reduced the duration)
refer below link for more details

Salesforce Deleting Records

for more details about recycle bin refer

Salesforce Recycle Bin

All though normal SOQL queries do not return deleted records you can make SOQL queries include deleted records in results by adding "ALL ROWS" keyword at the end of your query.But it is important that you be careful when performing DML operations with such results because the results include deleted records.

example - using ALL ROWS in SOQL

[SELECT COUNT() FROM Contact WHERE AccountId = a.Id ALL ROWS];

In addition to above  approach if you want to explicitly query deleted records only ,you can use "IsDeleted" Standard attribute.

example - using IsDeleted in SOQL

[SELECT Id, Name FROM Account WHERE IsDeleted=true];