Programming Logic Key Ingredients
May31

Programming Logic Key Ingredients

We can always learn from Nature the different ways to be a good Software Programmer, after all Nature is the greatest programmer of all. To develop different programming traits on can practice and learn also I do believe some are born programmer and see this world in a different way. As a kid I was always pondering over geometric shapes. I loved to play with a puzzle board. I used to think of all the combinations I can make with all the geometric shapes around me. This world of imagination in which I was constantly working around with shapes and objects to come up with new shapes was awesome. I would add different shape and size of rectangles and squares to come up with real world object shape like cars, chairs, bottles etc. I developed My first great program to impress by QBasic programming teacher Sir JOHN. I developed a BGI program in which Circles move up the screen as bubbles and make the alphabets of the word JOHN. We don’t had computers at our home and access to compilers at that time was rare only in School lab. We were allowed only for few hours in their and so most of my programming compilations was done in my head and my Notebooks. In 8th standard when we had a separate Notebook for each subject, I was already having 4-5 Notebook for Computer science programming only. Sir John, taught me the key or to say secret of programming skill. He said “Playing chess will help you build logic for programming.” Eventually I learned chess and now I consider the following checklist one should look for to help themselves or others in learning how to program better! Chess: One who is not a good Chess player can rarely be a good programmer. Chess teaches a person to plan, pre-plan, think all the possible scenarios, future steps possible in the game. I believe the pawn, bishop, king, knight . etc are the tools/weapons one can use to win the game. It depends how wisely you use them to play and win. In the same manner but in different dimension For loop, While loop, Data structure, class, functions, OPPs etc are the tools/weapons by using them wisely you can build good logic. Programming can be like a war, fun, winner and loser in them. If your program crash unexpectedly then compiler has won. If you get correct output in all the cases then you are the supreme winner. Flowcharts: I was very much into geometric shapes so most Flowcharts was the awesome way to build logic as flowcharts and convert them into programs. The start/stop box, processing box, input/output...

Read More
AppExchange Development Checklist
May20

AppExchange Development Checklist

In this blog I will be writing down some of my AppExchange development checklist while developing an application for various. AppExchange is the Salesforce center on which one can launch their own salesforce Application. Appexchange is the hub of thousands of application where Salesforce users can reach out to various paid and free applications as per their need. Appexchange helps more than 2000 Independent Software Vendors (ISVs) to reach more that 120,000 Salesforce.com customers offering applications that either extend Salesforce.com CRM functionality or provide a solution entirely different from Salesforce CRM. While developing an Application in salesforce  I have always used the following checklist.  PLAN: Brainstorm an application idea: The application idea which is fresh and new on the platform and had some awesome features which will enhance the user experience or Salesforce as a CRM Background study: Make sure that you are not reinventing the wheel. Appexchange is already hosting several apps and have many applications with repetitive ideas. Applications trying to do the same thing in a better way is still appreciated but do make sure that your application is way better than the existing solutions. Believing in yourself is good but its always great to have a round of random feedback on the Application ideas before you plan to develop them. Paid or Free should be a decision which cannot be easily taken by small vendors since releasing a Paid application on Appexchange may need initial cost/fee of $2700. You can always come up with a free basic version initially and then once you application is hit then a more complex and Paid version. User Scenario: Make sure that all the User scenarios are very well thought of and does not leave any loose ends. When the purpose of the application is defined clearly still there may be a chance when some scenarios may have not thought of clearly. Salesforce Editions: Applications published on Appexchange can be easily installed on Developer edition, Unlimited edition, Enterprise edition. An application when being developed needs to be very certain that on which of the salesforce flavours(Editions) it can be installed. Developing an application for profession edition may require an extra step of creating Aloha app and testing them in Profession Edition before release.  DEVELOP: Plan the Development: Several small size utility tool type application can be developed straight from the idea and may not need a development plan but the applications having some wizard of pages may need a phase wise release cycle. Configuration: Make sure which all features in the application can configurable and which can be fixed is a tricky decision. Think wearing a User hat. Making...

Read More
Coding Genius (Apex Script)
May19

Coding Genius (Apex Script)

1. Create 20 new Accounts Records in salesforce with at least 5 fields filled. Click here to learn more for(integer i=0;i<=20;i++) { Account a=new Account(); a.Name=’Name’ + i; a.AccountNumber=’123′; a.Rating=’Hot’; a.Fax=’23456′; a.Description=’xyz’; insert a; } Click here to learn more 26.0 APEX_CODE,DEBUG;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;VALIDATION,INFO;WORKFLOW,INFO Execute Anonymous: for(integer i=0;i<=20;i++) Execute Anonymous: { Execute Anonymous: Account a=new Account(); Execute Anonymous: Execute Anonymous: a.Name=’Name’ + i; Execute Anonymous: a.AccountNumber=’123′; Execute Anonymous: a.Rating=’Hot’; Execute Anonymous: a.Fax=’23456′; Execute Anonymous: a.Description=’xyz’; Execute Anonymous: Execute Anonymous: Execute Anonymous: insert a; Execute Anonymous: } Execute Anonymous: 03:02:01.043 (43535709)|EXECUTION_STARTED 03:02:01.043 (43550134)|CODE_UNIT_STARTED|[EXTERNAL]|execute_anonymous_apex 03:02:01.044 (44656206)|DML_BEGIN|[12]|Op:Insert|Type:Account|Rows:1 03:02:01.133 (133648285)|DML_END|[12] 03:02:01.133 (133977923)|DML_BEGIN|[12]|Op:Insert|Type:Account|Rows:1 03:02:01.156 (156160358)|DML_END|[12] 03:02:01.156 (156552645)|DML_BEGIN|[12]|Op:Insert|Type:Account|Rows:1 03:02:01.181 (181065082)|DML_END|[12] 03:02:01.181 (181376111)|DML_BEGIN|[12]|Op:Insert|Type:Account|Rows:1 03:02:01.211 (211480467)|DML_END|[12] 03:02:01.211 (211850928)|DML_BEGIN|[12]|Op:Insert|Type:Account|Rows:1 03:02:01.233 (233992022)|DML_END|[12] 03:02:01.234 (234402707)|DML_BEGIN|[12]|Op:Insert|Type:Account|Rows:1 03:02:01.259 (259710682)|DML_END|[12] 03:02:01.260 (260160914)|DML_BEGIN|[12]|Op:Insert|Type:Account|Rows:1 03:02:01.300 (300922983)|DML_END|[12] 03:02:01.301 (301384284)|DML_BEGIN|[12]|Op:Insert|Type:Account|Rows:1 03:02:01.326 (326875993)|DML_END|[12] 03:02:01.327 (327135983)|DML_BEGIN|[12]|Op:Insert|Type:Account|Rows:1 03:02:01.349 (349535179)|DML_END|[12] 03:02:01.349 (349941227)|DML_BEGIN|[12]|Op:Insert|Type:Account|Rows:1 03:02:01.375 (375003790)|DML_END|[12] 03:02:01.375 (375440112)|DML_BEGIN|[12]|Op:Insert|Type:Account|Rows:1 03:02:01.412 (412150706)|DML_END|[12] 03:02:01.412 (412614410)|DML_BEGIN|[12]|Op:Insert|Type:Account|Rows:1 03:02:01.436 (436155768)|DML_END|[12] 03:02:01.436 (436554875)|DML_BEGIN|[12]|Op:Insert|Type:Account|Rows:1 03:02:01.463 (463390675)|DML_END|[12] 03:02:01.463 (463848073)|DML_BEGIN|[12]|Op:Insert|Type:Account|Rows:1 03:02:01.504 (504413187)|DML_END|[12] 03:02:01.504 (504829506)|DML_BEGIN|[12]|Op:Insert|Type:Account|Rows:1 03:02:01.553 (553646818)|DML_END|[12] 03:02:01.554 (554086660)|DML_BEGIN|[12]|Op:Insert|Type:Account|Rows:1 03:02:01.616 (616412688)|DML_END|[12] 03:02:01.616 (616816078)|DML_BEGIN|[12]|Op:Insert|Type:Account|Rows:1 03:02:01.650 (650602890)|DML_END|[12] 03:02:01.650 (650879727)|DML_BEGIN|[12]|Op:Insert|Type:Account|Rows:1 03:02:01.677 (677108052)|DML_END|[12] 03:02:01.677 (677504489)|DML_BEGIN|[12]|Op:Insert|Type:Account|Rows:1 03:02:01.707 (707638291)|DML_END|[12] 03:02:01.707 (707930971)|DML_BEGIN|[12]|Op:Insert|Type:Account|Rows:1 03:02:01.731 (731984689)|DML_END|[12] 03:02:01.732 (732280707)|DML_BEGIN|[12]|Op:Insert|Type:Account|Rows:1 03:02:01.778 (778975043)|DML_END|[12] 03:02:01.909 (814148198)|CUMULATIVE_LIMIT_USAGE 03:02:01.909|LIMIT_USAGE_FOR_NS|(default)| Number of SOQL queries: 0 out of 100 Number of query rows: 0 out of 50000 Number of SOSL queries: 0 out of 20 Number of DML statements: 21 out of 150 Number of DML rows: 21 out of 10000 Maximum CPU time: 0 out of 10000 Maximum heap size: 0 out of 6000000 Number of callouts: 0 out of 10 Number of Email Invocations: 0 out of 10 Number of future calls: 0 out of 10 Number of Mobile Apex push calls: 0 out of 10 03:02:01.909|CUMULATIVE_LIMIT_USAGE_END 03:02:01.814 (814203174)|CODE_UNIT_FINISHED|execute_anonymous_apex    2. Create 10 Contacts with diferent Account(LookUp) values(Relationship with no same 2 accounts) in them. Click here to learn more List<Account> accList= new List<Account>(); accList = [SELECT Id,Name FROM Account LIMIT 20]; List<Contact> conList=new List<Contact>(); integer j =0; for(integer i=1;i<10;i++){ j=j+1; Contact con=new Contact(); con.LastName= accList.get(j).Name; con.AccountId=accList.get(j).Id; conList.add(con); } Insert conList; Click here to learn more 31.0 APEX_CODE,DEBUG;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WORKFLOW,INFO Execute Anonymous: List<Account> accList= new List<Account>(); Execute Anonymous: accList = [SELECT Id,Name FROM Account LIMIT 20]; Execute Anonymous: List<Contact> conList=new List<Contact>(); Execute Anonymous: integer j =0; Execute Anonymous: for(integer i=1;i<10;i++){ Execute Anonymous: Execute Anonymous: j=j+1; Execute Anonymous: Contact con=new Contact(); Execute Anonymous: con.LastName= accList.get(j).Name; Execute Anonymous: con.AccountId=accList.get(j).Id; Execute Anonymous: Execute Anonymous: // accList.add(acc); Execute Anonymous: conList.add(con); Execute Anonymous: } Execute Anonymous: //Insert accList; Execute Anonymous: Insert conList; Execute Anonymous: 07:58:12.036 (36898151)|EXECUTION_STARTED 07:58:12.036 (36907501)|CODE_UNIT_STARTED|[EXTERNAL]|execute_anonymous_apex 07:58:12.037 (37547674)|SYSTEM_CONSTRUCTOR_ENTRY|[1]|<init>() 07:58:12.037 (37586098)|SYSTEM_CONSTRUCTOR_EXIT|[1]|<init>() 07:58:12.037 (37827388)|SOQL_EXECUTE_BEGIN|[2]|Aggregations:0|select Id, Name from Account limit 20 07:58:12.040 (40872534)|SOQL_EXECUTE_END|[2]|Rows:20 07:58:12.040 (40983260)|SYSTEM_CONSTRUCTOR_ENTRY|[3]|<init>() 07:58:12.041 (41004560)|SYSTEM_CONSTRUCTOR_EXIT|[3]|<init>() 07:58:12.041 (41174125)|SYSTEM_METHOD_ENTRY|[9]|LIST<Account>.get(Integer) 07:58:12.041 (41226850)|SYSTEM_METHOD_EXIT|[9]|LIST<Account>.get(Integer) 07:58:12.041 (41308859)|SYSTEM_METHOD_ENTRY|[10]|LIST<Account>.get(Integer) 07:58:12.041 (41339580)|SYSTEM_METHOD_EXIT|[10]|LIST<Account>.get(Integer) 07:58:12.041 (41418771)|SYSTEM_METHOD_ENTRY|[13]|LIST<Contact>.add(Object) 07:58:12.041 (41446685)|SYSTEM_METHOD_EXIT|[13]|LIST<Contact>.add(Object) 07:58:12.041 (41483067)|SYSTEM_METHOD_ENTRY|[9]|LIST<Account>.get(Integer) 07:58:12.041 (41504287)|SYSTEM_METHOD_EXIT|[9]|LIST<Account>.get(Integer) 07:58:12.041 (41563446)|SYSTEM_METHOD_ENTRY|[10]|LIST<Account>.get(Integer) 07:58:12.041 (41576846)|SYSTEM_METHOD_EXIT|[10]|LIST<Account>.get(Integer) 07:58:12.041 (41635668)|SYSTEM_METHOD_ENTRY|[13]|LIST<Contact>.add(Object) 07:58:12.041 (41649355)|SYSTEM_METHOD_EXIT|[13]|LIST<Contact>.add(Object)...

Read More
Salesforce Certification Preparations Notes
May16

Salesforce Certification Preparations Notes

These are the list of Notes for various Topics I have used for preparations in various salesforce certification preparations. Most of the information is copied from various developer forums and salesforce certification preparations sites. Notes will be divided in the following sections. Content Sharing Security Territory Management Auditing & Monitoring Knowledge management Entitlements management Data Strategy Process Automation Analytical snapshots Collaborative forecast Report...

Read More
Salesforce Advance Administrator Notes (Dashboards)
May13

Salesforce Advance Administrator Notes (Dashboards)

Dashboards Dashboard formats and what type of data is best displayed in each format: Horizontal bar/vertical column charts are great for showing geographical data, stage or status information, or any data that’s part of a single grouping. Pie and donut charts are useful for displaying data that shows proportions of a total, such as the number of leads by lead source. Funnel, is best used for showing ordered pick lists such as opportunity stage, case status, or lead stage.   In Enterprise Edition, Unlimited Edition, and Performance Edition, you can schedule dashboards to refresh daily, weekly, or monthly. You can also set up Salesforce to send an email with an HTML version of the dashboard when the refresh completes. For email applications that don’t support HTML, the email includes text and a link to the dashboard. Each dashboard has a running user, whose security settings determine which data to display in a dashboard.If the running user becomes inactive, the report is not run. The system administrator receives an email notification to either activate the user, delete the report schedule, or change the running user to an active one in the scheduled report. Portal users receive report and dashboard refresh email notifications when the Allow Reports and Dashboards to Be Sent to Portal Users option is enabled. Schedule the refresh. Set the Frequency Click the Daily, Weekly, or Monthly fields to show more options. Enterprise, Unlimited, and Performance Editions can have up to 200 scheduled dashboard refreshes. Unlimited and Performance Edition users can schedule up to two dashboard refreshes an hour per day. Enterprise Edition users can schedule up to one dashboard refresh an hour per day. Specify dates in the Start and End Dashboards refresh in the time zone of the user who scheduled the refresh. Under Preferred Start Time, click Find available options…to choose a time.The dashboard refresh runs within 30 minutes of your preferred start time. For example, if you select 2:00 PM, the refresh may happen any time between 2:00 PM and 2:29 PM, depending on availability. Refresh Limits If you schedule a dashboard to refresh on a specific day of every month, it only refreshes on months that have that specific day. For example, if you schedule a refresh for the 31st of every month, the dashboard won’t refresh on 30-day months. To refresh on the last day of every month, choose “Last” from the On day of every month drop-down list. Dashboards won’t refresh as scheduled if the running user doesn’t have access to the dashboard folder. If a dashboard has filters, only the unfiltered version is refreshed. You can’t schedule refreshes for dynamic dashboards. They must be refreshed manually. DYNAMIC Dashboards To set up a dynamic dashboard, create a folder to hold...

Read More