Showing posts with label VF component. Show all posts
Showing posts with label VF component. Show all posts

Thursday, 12 November 2015

Salesforce Dev Utility Post #2 : Best Practice -- Force.com Development Naming Conventions

If most people don't mind along with the senior developer then you will have very difficult time persuading them all. In this case I would recommend just keep going with the original convention set forth by the original developer and at least keep things consistent.

If other people are not okay with that as well then you can focus on the ROI of converting already existing project naming convention to language naming convention and present that to the management along with the senior developer. This will most certainly cause some friction.
In conclusion, I would say that language naming conventions are very important because new people coming into your project are more comfortable with the code-base requiring less explanation and causing less friction.

The reason being that language naming conventions are global and project naming conventions are local so people would need more time getting used to it.

As new developers are getting used to the project naming conventions they are bound to mix it up with language naming conventions if that's what they were used to. Code reviews could solve this issue but it is an unpleasant element of going with the project naming conventions nevertheless.

Hence, from that perspective language naming conventions are more important than project naming conventions.

Follow the CamelCase Java conventions, except for VF pages and components start with a lower case letter.

Triggers:
  • § <ObjectName>Trigger - The trigger itself. One per object.
  • §  <ObjectName>TriggerHandler - Class that handles all functionality of the trigger
  • §  <ObjectName>TriggerTest

Controllers:
  • §  <ClassName>Controller
  • §  <ClassName>ControllerExt
  • §  <ClassName>ControllerTest
  • §  <ClassName>ControllerExtTest

Classes:
  • §  <ClassName>
  • §  <ClassName>Test (These might be Util classes or Service classes or something else).

Visualforce pages and components:
  • §  <ControllerClassName>[optionalDescription] (without the suffix Controller). There might be multiple views so could also have an extra description suffix.


Object Names and custom Fields:
  • §  Upper_Case_With_Underscores

Variables/properties/methods in Apex:
  • §  camelCaseLikeJava - more easily differentiated from fields

Test methods in test classes
  • §  test<methodOrFunctionalityUnderTest><ShortTestCaseDesc> - For example, testSaveOpportunityRequiredFieldsMissing, testSaveOpportunityRequiredFieldsPresent, etc.

Working on something that would be used as an app or in some cases just a project? If yes, then do the following:

Prefix all custom objects, apex classes, Visualforce pages and components with an abbreviation so that they are easier to identify (e.g., easier for changesets). For example the WidgetFactory app would have the prefix wf on those. Additionally, when adding custom fields to a standard object they would also be prefixed to identify them as part of the app/package.


The main reason for the Object and Fields Names using Upper_Case_With_Underscores is that when you type in the name field or object with spaces it automatically adds the underscores. Although Apex is case insensitive, always refer to the Objects and Custom Fields in the code as Upper_Case_With_Underscores as well for consistency all around and consistency with what is generated by the SOQL schema browser and other tools. Object and Field Labels (which are generally ignored by code but visible to users) should keep spaces, not underscores.

"Happy Coding"


Friday, 30 October 2015

Salesforce Dev Utility Post #1 -- Creating Custom Lookup in Visualforce Page


Sometime while developing visualforce, you may encountered problem to create a custom look where you can show all list of related record and select one.


This Post will show you how to create custom lookup functionality in visual - force page.


Code For Main Visual force Page




 <!--   
 //** Custom Lookup For Visualforce Page    
 Description: Creating a custom look up to populate field details of lookup field   
 Post By : Swayam Chouskey (@salesforceguy)  
 Version : 1.0  
 -->  
 <apex:page controller="Post1CustomLookupController" tabstyle="Account" showHeader="false" sidebar="false">  
   <!-- Import Style Sheet From Static Resource For Colorbox/Modal Popup -->  
   <apex:stylesheet value="{!URLFOR($Resource.Colorboxcss, 'colorbox.css')}"/>  
   <!-- Import Script From Static Resource For Colorbox/Modal Popup -->  
   <apex:includeScript value="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"/>    
   <apex:includeScript value="{!$Resource.Colorboxjs}"/>   
   <!-- function Which Call Popup/Colorbox -->  
   <script>  
   function openLookupPopup(name, id)  
   {  
     var url="/apex/Post1CustomLookupPopupPage?namefield=" + name + "&idfield=" + id;  
     $.colorbox({iframe:true, href: url, innerWidth:340, innerHeight:290 , width:"90%", height:"80%", overlayClose : false ,escKey :false ,fixed :true });  
   }  
   </script>  
   <apex:form >  
     <apex:pageBlock title="Custom Lookup For Visualforce Page">  
       <apex:pageBlockSection columns="1">  
         <apex:pageBlockSectionitem >  
           <apex:outputLabel value="Select Account"/>  
           <apex:outputPanel >  
             <apex:inputHidden value="{!accountId}" id="targetId" />  
             <apex:inputText value="{!accountName}" id="targetName" onFocus="this.blur()" disabled="false"/> <a href="#" onclick="openLookupPopup('{!$Component.targetName}', '{!$Component.targetId}'); return false"><apex:image url="/img/icon/telescope32.png"/></a>  
           </apex:outputPanel>  
         </apex:pageBlockSectionitem>  
       </apex:pageBlockSection>  
       <apex:pageBlockSection >  
         <apex:pageBlockSectionitem >  
           <apex:commandButton value="Get Opportunity" action="{!findOpportunities}"/>  
         </apex:pageBlockSectionitem>  
       </apex:pageBlockSection>  
     </apex:pageBlock>  
   </apex:form>  
   <apex:pageBlock title="Contacts">  
     <apex:pageBlockTable value="{!opportunityList}" var="opp">  
       <apex:column headerValue="Opportunity Name" value="{!opp.Name}"/>  
       <apex:column headerValue="Opportunity Stage" value="{!opp.StageName}"/>  
     </apex:pageBlockTable>  
   </apex:pageBlock>  
 </apex:page>  

Main Visualforce Page


Main Page Controller Code :


 /*  
  Custom Lookup For Visualforce Page Controller for Main page   
 Description: Creating a custom look up to populate field details of lookup field   
 Post By : Swayam Chouskey (@salesforceguy)  
 Version : 1.0  
 */  
 public with sharing class Post1CustomLookupController   
 {  
      public String accountName {get; set;}  
      public Id accountId {get; set;}  
      public List<Opportunity> opportunityList{get;set;}  
      public PageReference findOpportunities()  
      {  
           if (null!=accountId)  
           {  
             opportunityList =[select id, Name, StageName from Opportunity where AccountId=:accountId];  
           }  
           return null;  
      }  
 }  


Custom Lookup Popup :


 <!--   
 //** Custom Lookup For Visualforce Page    
 Description: Creating a custom look up to populate field details of lookup field   
 Post By : Swayam Chouskey (@salesforceguy)  
 Version : 1.0  
 -->  
 <apex:page controller="Post1CustomLookupPopupController" sidebar="false" showheader="false">  
   <apex:includeScript value="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"/>    
   <apex:includeScript value="{!$Resource.Colorboxjs}"/>   
   <script language="javascript">  
   function fillIn(name, id)  
   {  
     var element = parent.document.getElementById('{!$CurrentPage.parameters.namefield}');  
     element.value=name;  
     element=parent.document.getElementById('{!$CurrentPage.parameters.idfield}');  
     element.value=id;  
     parent.$.fn.colorbox.close();  
   }  
   function CloseWindow()  
   {  
     parent.$.fn.colorbox.close();  
   }  
   </script>  
   <apex:messages />  
   <apex:form id="form" >   
     <div style="width 100%">  
       <apex:pageBlock title="Lookup" id="block">  
         <apex:pageBlockSection id="section">  
           Enter Account Name (Search Text) and click Go<br/>  
           <apex:inputText value="{!query}" id="query"/>   
           <apex:commandButton value="Go" action="{!runQuery}"/>  
         </apex:pageBlockSection>  
       </apex:pageBlock>  
       <apex:pageBlock >  
         <apex:pageBlockSection columns="1">  
           <apex:pageBlockTable value="{!accounts}" var="account">  
             <apex:column headerValue="Name">  
               <apex:outputLink value="#" onclick="fillIn('{!account.Name}', '{!account.id}')">{!account.Name}</apex:outputLink>      
             </apex:column>  
             <apex:column headerValue="Street" value="{!account.BillingStreet}"/>  
             <apex:column headerValue="City" value="{!account.BillingCity}"/>  
             <apex:column headerValue="Postcode" value="{!account.BillingPostalCode}"/>  
           </apex:pageBlockTable>    
         </apex:pageBlockSection>  
       </apex:pageBlock>  
       <button type="button" onclick="CloseWindow();">Close Window</button>  
     </div>  
   </apex:form>  
 </apex:page>  




Custom Lookup Page Controller :


 /*  
  //** Custom Lookup For Visualforce Page Controller for popup page   
 Description: Creating a custom look up to populate field details of lookup field   
 Post By : Swayam Chouskey (@salesforceguy)  
 Version : 1.0  
 */  
 public class Post1CustomLookupPopupController {  
   public String query {get; set;}  
      public List<Account> accounts {get; set;}  
      public PageReference runQuery()  
      {  
           List<List<Account>> searchResults=[FIND :query IN ALL FIELDS RETURNING Account (id, name, billingstreet, billingcity, billingpostalcode)];  
           accounts=searchResults[0];  
            return null;  
      }  
 }  

Please Click Here To Download  to download complete Package ,

Please connect with me in case of any doubt.


                                         Happy Coding !!