Thursday 17 September 2015

Cron expression for scheduling batch in Salesforce

Cron expression

Every 30 minutes - '0 30 * * * ?'

Every hourly - '0 0 * * * ?'

Every 5 min - '0 5 * * * ?'

Every 10 min - '0 10 * * * ?'

Every 15 min - '0 15 * * * ?'

Every 20 min - '0 20 * * * ?'

Every 25 min - '0 25 * * * ?'

Every 30 min - '0 30 * * * ?'

like upto 55 or 59 your wish

Note: If you schedule your batch for every 5 min '0 5 * * * ?'. It means it will run every hours 5th minute.

It will not run every 5 minutes

If you want to run for every 5 min then you need to schedule 12 times with different different cron expression like for 5 min, 10 min, 15min like upto 60 min..


System.schedule('Job name', '0 30 * * * ?', new controller());

Thursday 10 September 2015

Beautiful HTML buttons with simple css

<html>
<head>
<style>
 input:hover, button:hover {
    background:white;color:black;
}
.btn{
box-shadow: 10px 10px 5px#888888; width:200px; height:50px; background:black;     color:white; border-radius:5px;
}
</style>
</head>
<body>
<input type="button" value="button" class="btn"></input>
<button class="btn">Home</button>
<button class="btn">Contact</button>
<button class="btn">Help</button>
</body>
</html>

Put cursor at end of text input's value



<input type="text"  style="text-align:right;" onfocus="this.value = this.value;" value="120" autofocus="autofocus">

Example: 


Source: http://stackoverflow.com/questions/17780756/put-cursor-at-end-of-text-inputs-value

Sunday 6 September 2015

Working with fielsets in salesforce

Working with Field Sets Using Visualforce

<apex:page standardController="Contact">
    <apex:repeat value="{!$ObjectType.Contact.FieldSets.properNames}" var="f"> 
        <apex:outputText value="{!Contact[f]}" /><br/>
    </apex:repeat>
</apex:page>

------------------------------------------------------------------------------------

Working with Field Sets Using Apex


public class MerchandiseDetails {

    public Merchandise__c merch { get; set; }
    
    public MerchandiseDetails() {
        this.merch = getMerchandise();
    }

    public List<Schema.FieldSetMember> getFields() {
        return SObjectType.Merchandise__c.FieldSets.Dimensions.getFields();
    }

    private Merchandise__c getMerchandise() {
        String query = 'SELECT ';
        for(Schema.FieldSetMember f : this.getFields()) {
            query += f.getFieldPath() + ', ';
        }
        query += 'Id, Name FROM Merchandise__c LIMIT 1';
        return Database.query(query);
    }
}

Global Describe in salesforce



Map<String, Schema.SObjectType> mapSchemaSobjectType = Schema.getGlobalDescribe();

Set<String> setSobjets = new Set<String>();

for(Schema.SObjectType d :mapSchemaSobjectType.values())
{
       Schema.DescribeSObjectResult dSobject = d.getDescribe();
       setSobjets.add(dSobject.getName());
}

setSobjets This set will contain all the SObject name.

-----------------------------------------------------------------------------------------------------

Map<String, Schema.SObjectType> mapSchemaSObjectType = Schema.getGlobalDescribe();
Set<String> standardObjects = new Set<String>();
Set<String> customObjects = new Set<String>();
for(Schema.SObjectType objSchemaSobjectType : mapSchemaSObjectType.values())
{
    Schema.DescribeSObjectResult objResult = objSchemaSobjectType.getDescribe();
    if(!objResult.isCreateable())
      continue;
    if(objResult.isCustom() == false && objResult.getRecordTypeInfos().size() > 0)
        standardObjects.add(objResult.getName());
    else if(objResult.isCustom())
        customObjects.add(objResult.getName());
}

standardObjects - Contains set of standard objects.
customObjects - Contains set of Custom objects

Override SObject list view with Visualforce page


Create a visualforce page with standard controller and recordSetVar attribute of <apex:page>

Based on your Sobject change the StandardCopntroller and recordsetvar value.


<apex:page recordsetvar="Accounts" standardcontroller="account" tabstyle="account">
  <apex:enhancedlist customizable="True" height="600" id="YourListViewId" rowsperpage="10" type="Account">
  </apex:enhancedlist>
</apex:page>


Once visualforce page is created.
Goto Sobject detail page and goto Buttons, Links, and Actions section.
Now click edit next to list now you can see like below image


Now check radio button next to Visualforce page and select your visualforce page.
final save the changes.

Now your Sobject list view is overridden.





Add a list view button for deleting records in Salesforce



Create a javascript list view button











{!requirescript("/soap/ajax/28.0/connection.js")}
{!requirescript("/soap/ajax/28.0/apex.js")}

sforce.connection.deleteIds({!GETRECORDIDS($ObjectType.Account)});
location.reload();

 
 Instead of Account use your object name and add this button in object's search layout --> list view.