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 (Collaborative forecast)
May13

Salesforce Advance Administrator Notes (Collaborative forecast)

Forecasting Enabling Forecast Steps Enable Allow Forecast on User Record. <> Set up your Forecasts Hierarchy. <> Enable Quotas <> Enable forecasts adjustments <> Define your forecast range. <> Customize your forecast categories. <> Select the fields that appear in the opportunity pane for each forecast type. <> Set a forecast currency Make Forecast Tab Visible on the respective Profile. Enable Collaborative forecast for the Organization. Setup>> Customize >>Forecasts >>Settings COLLABORATIVE Forecast or Simply FORECAST Collaborative Forecast allows users to track Quota attainment. Forecast categories allow you to group Opportunities together based upon Opportunity Stage. Administrator can enable up to 4 different types of forecasts for your organization simultaneously. Opportunities, Opportunity splits, or Product families Forecast manager can view the forecasts of all the users below them in the Forecast Hierarchy. Forecast managers with “Override forecast” Permission can adjust the forecast of direct subordinates. For best viewing results, keep the Tab Bar Organizerenabled when using Collaborative Forecasts. Access related forecast details, including who made adjustments and original forecast amounts, and adjust these details. If your organization has more than one type of forecast enabled, each forecast type maintains its own separate adjustments. Move up and down through the forecasts hierarchy easily if you’re a forecast manager. View revenue– or quantity-based forecasts. View forecasts in multiple currencies. Use Collaborative Forecasts reports. Include the opportunities of your partner portal users in your forecasts. For Collaborative Forecasts, historical trending comes with a new custom report type designed to highlight forecast changes between five snapshot dates, Quota Data: must be uploaded through the API using version 28.0 or later. Data Loader Tool Quota Data: Revenue and Quantity Quota Data must be loaded separately. Product family as well. Quota Data must be formatted (UserId, Quarter, Currency, Amount, Units) before its loaded. https://help.salesforce.com/apex/HTViewHelpDoc?id=forecasts3_definitions.htm&language=en_US CUSTOMIZABLE Forecast Customizable forecasting is a flexible solution for estimating how much revenue your organization can generate or how many items your organization can sell. With it, you can forecast on a monthly or quarterly basis, use different dates when applying amounts to forecasts, forecast based on revenue or quantity or both, and define additional quotas based on product families. Use customizable forecasts to review your forecast and drill down through your forecast amounts to see the opportunities included in your forecast. Override forecast amounts directly from the opportunity, or override the forecast from the Forecasts tab without notifying users below you in the forecast role hierarchy. To submit a forecast, making a snapshot of the forecast data available in the forecast history and forecast reports Click Forecast History to display the forecast data you submitted in the past. Review your forecast and the forecasts of any direct reports or forecasts...

Read More