Pages

Monday, February 29, 2016

Salesforce Architect Certification Self Evaluation Exam

I took the Salesforce Architect Certification Self Evaluation exam recently. This officially begins my journey towards the Certification.


So this post is effectively a beginning for a series of posts where I will keep sharing
  • my progress (so that I can keep track of myself :-) ), 
  • any materials I find interesting & useful, 
  • possibly some tips on how to prepare for the exam
  • outline the content of the certification exam
To begin with, let me take you thru the self evaluation questionnaire so you all can get a rough idea of what it actually evaluates..

Similar to all the salesforce certification exams, you can register for the self evaulation exam in Webassessor. The pre-requisite for the self evaluation is either the App builder or the Developer (believe this is the old one and not the new Platform Developer I). The only change for this exam compared to other exams is this exam is not a proctored one. So you can simply launch the exam online from your webassessor account after registering for it.

Type : online, non proctored
Questions : 42
Time : 30 minutes

For the initial set of questions, You have to rate yourself from a scale of
  • 0 - No Experience
  • 1 - General Awareness
  • 2 - Some Experience
  • 3 - Extensive Experience
  • 4 - Expert
for the list of skills listed below. The only suggestion I have here is Please Be Honest with the skill assessment questions. I've given the scale I chose for each skill based on my experience.

Web Technologies
  • CSS - 2
  • AJAX - 3
  • JS Libraries - 3
  • JSON - 4
  • FLEX - 2
  • HTML - 3
  • SOAP - 4
  • REST - 3
  • XML - 3

Licenses
  • Chatter - 2
  • Customer Portal - 3 
  • Partner Portal Platform - 3
  • High Volume - 2
  • Authenticated Sites - 2
  • Non Authenticated Sites - 1
  • Offline - 1
  • Mobile - 2 
  • Content - 2

Identity Management
  • Single Sign On - 2
  • Delegated Authentication - 2
  • SAML - 2
  • OAuth - 3
  • Identity Federation - 2
Security
  • Public Key Infrastructure - 2
Design Pattern
  • MVC - 4
  • Factory - 3
  • Delegation - 2
  • Interface - 4
  • Singleton - 3

OOPS Principles
A. Polymorphism
B. Inheritance
C. Encapsulation
D. Late vs Early Binding
E. Abstraction

Integration Approaches
A. Apex Web Services Callouts
B. Apex Web Services Callins
C. Outbound Messaging
D. Email to Apex
E. Mashup

Deployment
A. Change sets
B. ANT Deployment
C. Force.com IDE
D. Managed or Unmanaged Packages
E. Third-party or in-house

Source Control
A. Subversion
B. Git
C. Mercurial
D. Visual Sourcesafe
E. CVS

Project Methodologies
A. Agile
B. Waterfall
C. Other

some of these question might be repeated so you can select your experience between General Awareness, Some Experience, Extensive Experience for each of the options under the topics

Finally, you have to give your number of Years in Architect role and Years with Salesforce Platform and provide couple of References from any of your projects where you played an architect role.

I'm working thru my Platform Developer II certification exam currently (the first part - multiple choice exam is scheduled in couple of weeks time and hopefully I can complete the programming assignment in the next couple of months based on the exam calendar).

Friday, February 26, 2016

Getting to know Salesforce is now easy with Trailhead

If you are a long time technologist or getting your head way into the technology world, you will realise learning a new system or platform is not that easy.

Salesforce was no exception to this, until Trailhead came in..

Navigate the Salesforce

Now with this new Trail "Navigate the Salesforce Advantage", the Trailhead team made it easy for anyone to understand 
  • Success Model - the core principles on which Salesforce operates, 
  • Cloud Benefits - what you need to look for when betting your business in cloud,
  • The Ecosystem - feel the benefits of all the different ways you can engage with salesforce 
For anyone who goes thru these modules and projects within the trail, there is a real joy of learning and understanding the basics in a fun way. So go ahead and hit the trail to navigate your way to success !!!

Tuesday, February 09, 2016

Salesforce Sandbox Templates and Post Refresh Scripts

With Salesforce Spring 16 release,

we are getting a nice hook to tag an Apex Class to run every time a sandbox gets refreshed..

Typically Salesforce Administrators or Release management teams, goes thru series of steps every time a sandbox is created or refreshed. Salesforce helped them to some extent by bringing in sandbox templates before.. taking it a step further, now they have added the ability to auto run an Apex Class once the sandbox is ready..

This feature is highly useful when we bring in data from production to a sandbox and if

  • we have to scrap or mask certain fields of certain objects 
  • to meet the enterprise data standards policy / be data complaint 
  • protecting customer's privacy data and also 
  • avoiding any automation in non production environments impacting customers.

Until spring 16, we used to run batch jobs to perform tasks like data cleanup, masking, scrapping etc.. from now on we don't need to run the batch job manually. we can include all the logic into an Apex class and

  • either include that Apex class into a sandbox template if its for a partial or full sandbox



  • or directly specify the apex class if its a developer or developer pro sandbox


This feature will be more useful with Partial and Full sandboxes compared to Developer & Developer Pro sandboxes since we don't get any data being copied across with these 2.

With the increased number of sandboxes available for the latest editions of salesforce, this is definitely a time saver for larger development teams using multiple sandboxes and going thru frequent refresh cycles in a project release.

here's the link to the release note page with details..

Spring 16 Sandbox Post Copy Scripts

Monday, January 11, 2016

Salesforce Global / Universal Picklist - Its Finally arrived..

With Spring 16 release, we are getting the long requested Global / Universal picklist feature..

Note it's still in Beta phase and hopefully will become GA in next release..

So How to create a global picklist and use it, here's a quick intro

1. Go to Setup -> Create , you will see the new Picklists menu item


2. Click the Picklists and you will have option to enter a label and api name, just like you create a normal picklist field. Enter a label and name and go to the next screen

3. you will have a large text area to enter the picklist values. Enter the picklist values and save it

4. Now if you go to create a new custom picklist field, you will have an option to either select the values from a global picklist and enter your own values.

5. Give your new picklist a label and name, and choose the global picklist you created before as the source for values and you are done. 






Thursday, January 07, 2016

Salesforce Custom Metadata Types

Its been a while since Salesforce introduced the Custom Metadata Type feature..

if you are wondering how you can make use of this, here's a use case which I recently worked with.

Store all your integration settings in one place, Yes in a single Custom Metadata instead of multiple Custom Settings

Create a custom metadata type called Integration Settings. Include Fields to identify which external system it is, which environment, and the other additional connection details like the endpoint url, username, password, timeout etc..

Create a Utility class method in Apex which takes the external system name we want to connect to as a parameter, and then identifies the current salesforce environment (say production or sandbox using the Organization details ) and returns the connection details for that system in that environment.

With this, we don't need to ever worry about missing integration details during deployments or having incorrect urls in different environments due to sandbox refresh or migration custom settings data between environments or manually creating configuration details.




Salesforce Identify Current Users UI mode theme : Classic or Lightning Experience or Salesforce1 mobile

Now with Spring 16 release, Developers and Admins can easily identify the current user's Salesforce user interface mode or theme - i.e if the running user is using Salesforce Classic UI or the new Lightning Experience in desktop or if the user is in Salesforce1 mobile.

We now have new set of values included in the existing User Context Global variables (both $User in workflows/validations/visualforce/formulas and also to the UserInfo class in Apex)

with this, we can simply call either UserInfo.getUiTheme( ) method or $User.UiTheme variable to identify the running user's UI mode.



here's the list of UI Themes returned by this global variable
  • Theme1—Obsolete Salesforce theme
  • Theme2Salesforce Classic 2005 user interface theme
  • Theme3Salesforce Classic 2010 user interface theme
  • Theme4d—Modern “Lightning Experience” Salesforce theme
  • Theme4tSalesforce1 mobile Salesforce theme
  • PortalDefaultSalesforce Customer Portal theme
  • WebstoreSalesforce AppExchange theme

Reference :
You will find this cool feature documented (buried) deep inside the Spring 16 release notes

Monday, November 30, 2015

Salesforce Process ISCHANGED function not working with compound address fields

I stumbled upon this issue today and raised a case with salesforce and waiting for a response...
just posting it across for others who might face the same issue...

Scenario:
We created a new process on Account to run on both create & update with a simple criteria formula ISCHANGED([Account].BillingAddress) and added an immediate action to the process to do a update a field on the same account record and activated the process.

Expected:
what's expected is every time we change the billing address on the account, this particular field should get updated with the value from the process.

Actual:
strangely, thou the process gets saved without any error for using the IsChanged function on the compound address field, when we updated a billing address on an account, nothing happens. The debug logs shows the process being run but the action is not getting fired.

Workaround:
I recreated the same criteria + action using traditional Workflow Rule + Field update and it works perfectly fine. The Workflow rule runs on Account object (both create & update) and uses the same Criteria Formula ISCHANGED([Account].BillingAddress) and updates the same field.

Summary: 
Since support for Compound address field in ISCHANGED function is a recent addition, I believe its not enabled across all functionalities. I will update this post once I hear back from the salesforce support. There is no known issue as well for this. The only option for now is to go with the workaround of using Workflow rule + field update.

Update:
After raising a case with salesforce and going thru multiple rounds of discussions, its now considered as a known issue and will be included in one of their future releases (but no ETA yet).

here's the known issue link : https://success.salesforce.com/issues_view?id=a1p30000000ePs6AAE

Wednesday, November 25, 2015

Visualforce Datepicker position when using modal popups

This is a quick post to save sometime for people using modal popups with date fields in a visualforce page..

if the default datepicker that shows up when using apex:inputField for date fields is not rendering properly or if its been displayed behind the popup or in some random position, then don't break your head.. apply the below css in your page and it should work fine..

.datePicker { z-index:1151; position:fixed; }

z-index is to bring the datepicker in front of the popup.. use the number (1151 in this case) higher than the one used for the modal popup..

position:fixed is to align the datepicker next to the input field.

hope this helps and saves time for someone..


Sunday, November 08, 2015

Salesforce Platform Developer I Certification

I m glad to pass the Platform Developer 1 certification today and thought I will share my experience on how the exam was and what sort of questions came up and what topics to read to prepare for the exam

Exam Format
  • Total questions => 60
  • Time allotted => 105 minutes which give close to little less than 2 minutes per question 
  • Pass Percentage  => 68% which means we have to get at least 41 out of 60 as correct that leaves a margin of 19 questions to either go wrong or miss out.
Preparation
Anyone who's been working with the salesforce platform for at least 6+ months doing both declarative and programming work can easily clear this exam by just revising the topics listed in the certification guide. no magic.

but if you are a beginner & getting started with the platform, then we need to do some work in understanding the platform basics and the world of declarative and programmatic customization parts of the platform.

Topics Covered
The questions are pretty much taken from the topics listed in the certification guide and the % of questions from the topics are close to what's mentioned in the guide..

50% of the questions are across the below 5 topics (say close to 10% for each topic)
  • Platform Basics
    • Multi tenancy architecture - read thru the benefits & constraints of sharing a single instance with multiple clients and how enforcing limits helps to share the resources between the clients 
    • MVC - what parts of the platform corresponds to M , V , C
    • Appexchange - when will you use managed package, unmanaged package, buy vs build scenario
    • where will you develop managed packages
  • Data Model & Management
    • Data Import - how to update existing records during import by mapping external id
    • Schema builder use cases - example : how to delete a field if its referenced in apex
    • Object Relationships - Lookup vs Master Detail, how object / record security works between parent & child in both these relationship types
  • User Interface
    • Visualforce 
      • Merge fields, data binding between your VF page and Controller properties & methods
      • Using Global variables
      • Accessing Custom Settings value based on Current User's profile
    • Lightning Components
      • Where does the controller logic exist ?
      • what's included in the resource bundle ?
      • identify the benefits of lightning components
  • Testing 
    • understand the normal flow of a test method 
    • Creating & Accessing Pricebook and product data in test methods
    • using TestVisible to allow test methods to access a class private methods
    • preparing test data for the test methods using testdatafactory, test setup methods
    • where to store test data and load them in test methods for bulk testing
    • where all you can run your test classes and check the results
  • Debug & Deploy
    • Go thru the log filters, know how to set the filters on apex classes & triggers
    • Developer console - how to use the checkpoint window , log viewer
    • Changesets - possible source & destination in a changeset, deploy / rollback in a changeset, deployment connections
    • Force IDE - what can be updated thru the IDE

and the bulk of the remaining 50% comes from the topic
  • Logic & Process Automation
    • Apex Classes
      • Limits Class - how to get total limits and limits used
      • Schema Class - how to find get record type details, picklist values, object & field information, etc..
      • Exception handling - multiple catch blocks, identify which catch block gets run
      • Anonymous Execution - user vs system permissions
      • Accessing sharing information in apex
      • Inheritance, Interfaces & Inner Classes
      • Variables - Primitive, SObjects, Scope of variables 
      • Collections - List vs Set vs Map 
      • how a multi picklist field value is represented in apex
    • Apex Triggers
      • Order of execution - when the data change gets committed
      • Bulkification- what should be avoided in a loop
      • DML - direct CRUD vs Database methods, using AllOrNone flag to allow partial records to be committed.
      • Error handling - how to pass error back to the user from triggers, how to identify if we are approaching a limit and warn the user
      • Best practices
      • when can we change values of incoming record in a trigger without doing any additional DML
    • Apex Controllers for Visualforce
      • when to use Standard, Standard Set, Custom & Extenstion controllers
      • Constructors for the controllers
      • pagination with standard set controller
      • which controller is a correct fit when overriding standard page with VF
    • SOQL
      • handling the results of the query
      • SOQL for loops
    • Declarative World
      • Workflow rules - cross object field updates,
      • Validation rules - making a field mandatory based on a picklist value
      • Process Builder
      • Rollup fields - where can you declare rollup fieds, possible rollup fields between Standard objects
      • Formula fields - should be able to identify valid operations in a formula field from the given list

Hint
There are both scenario based questions as well as code snippet based questions. most of the code snippet based questions looked fairly straight forward without much twists, if you get stuck try to reverse engineer from the answers available and match it back to the flow of code to see which options is the right fit for the given code.

Summary
Out of 105 minutes, It took me close to 60 minutes to complete all the 60 questions and I took 15 minutes to revise all the answers few times just to make sure I didn't leave any question unanswered and I have selected the required number of answers for all the multi-select questions and mainly focused on the questions I have marked for review.

Overall I would say its easy to pass this one by just revising the topics listed in the certification guide without depending on any question dumps. gook luck friends..

Sunday, August 30, 2015

Salesforce Platform App Builder Certification (Transition Exam)

Hello Friends

I cleared the Salesforce app builder transition exam today and thought of sharing my experience.. I can't post the exact questions but can give a brief of what topics the exam touched on and how easy / hard was it..

Exam Format

the transition exam is 20 multiple choice questionnaire and you get 30 minutes to complete it.. pass percentage is 65%, so you need to get at least 13 questions correct

Pre requisite

you should have already got the Salesforce Force.com Developer Certification..

Prior Experience

If you are doing the transition exam, most of you are already using Salesforce day in & out for at least few months and been looking into the release notes of the past couple of releases touching Salesforce1 and Lightning features. if that's the case then this exam is an easy one for you..

but if you are just getting started with salesforce and looking to take the full App builder certification exam, then you have to spend some good time in getting used to the platform and understanding the functionalities before taking this certification

Preparation

I just prepared myself going through the links listed in the app builder transition exam study guide and the app builder full exam and I can comfortably say the topics listed in the study guide is all you need to pass the exam.

Topics Covered

  • Filed Types - focus on field type changes and data losses, limits & considerations of field type changes, field types for multi line paragraphs, phone number searches
  • Actions - Object Specific and Global Actions - focus on Child record creations from parent and auto relationships between them
  • Lightning Connect - External Objects & External Data Sources - focus on external ids, global search for external data, types of connectors
  • Rollup Summary Fields - required relationship type for rollup summary, where & how to create
  • Sandboxes - different types of sandboxes, which one includes data, when to use each type, what's preferred for testing, etc..
  • Packaging - managed / unmanaged, what's editable in unmanaged, test classes in packages
  • Assignment Rules - Case, Lead, what's required for assignment rules, how many can be active, how many rule criteria's can be there
  • Master Detail / Lookup - understand the difference and what happens when converting from one to another, what can give rollup summary fields
  • Record Types - business / sales process, impact on pick list values , page layouts, which picklist fields cannot have different values based on record types
  • Workflow Rule - Re Evaluation - what gets re evaluated when workflow rule field update is marked to re evaluate other rules
  • Order of Execution - go thru the salesforce reference on order of execution and understand the order for assignment , workflow, validation, escalation rules
  • Lightning App Builder - parts of app builder, types of components & actions you can add into the app, how to enable the app built in lightning app builder inside salesforce1 mobile, creating a tab for the app
  • Person Accounts - data storage for person accounts, difference compared to business accounts, record types for person accounts
  • Social Accounts - what's required to sync social accounts, what details you can see using social accounts
  • AppExchange - buy vs build, when to go for an appexchange app or develop in house, e.g. quick way to implement products, pricing, quote & order

Summary

it took me 22 minutes to complete all 20 questions and revised the answers a few times in the remaining 8 minutes..  if you go thru the links in the study material for both the transition & the full exam and focus on the key areas on each of the topics, you can easily clear the exam.. good luck folks..




Friday, March 27, 2015

Saleforce Analytics Cloud Wave Setup

I got access to Salesforce Analytics Cloud this week and got some time to enable / set it up in our org..

here's a quick list of steps to enable, setup & configure Analytics cloud

1. Get the Analytics Cloud feature added to your org  by Salesforce
2. Once its added, you will notice the new menu item for analytics cloud under the setup menu
3. Go to Setup -> Analytics Cloud -> Getting Started
4. Click on Enable Analytics Cloud
5. That's the easy part. the tricky part is to add the analytics permission set license and permission set with required user permission to the user
6. The Analytics Cloud feature comes wit
  • User License type called "Analytics Cloud Integration User" and 
  • Permission Set Licenses 
    • "Analytics Cloud Builder"
    • "Analytics Cloud Explorer"
7. Go to Setup -> Manage Users -> Users and select the user (who will be working with analytics cloud) or if its for yourself, click on My profile and go to your user detail page
8. Click on Permission Set License assignments for the user and click on Edit Assignments and add the "Analytics Cloud Builder" permission set license to the user.
9. Go to Setup -> Manage Users -> Permission Sets
10. Click on New and create a new permission set.
Give it a name and DONT SELECT ANY LICENSE TYPE for the permission set.
11. Open the App Assignments and add the Analytics App and then in the System Permissions options enable all the analytics cloud permissions and save the permission set.
12. Now come back to the User and add the permission set using the Edit Assignments option under the Permission Set section for the user.


13. All done. once you save the User with both the Permission Set License and the Permission Set, you will see the Analytics App under the App menu

Now its time to surf thru the wave..

Monday, August 18, 2014

How can we contribute back to the Awesome Salesforce Community

I started working with Salesforce platform for quite sometime now and learnt most of the stuff on the job and the rest with a great help from the awesome salesforce community channels ..

  • Success Community (Answers Board & Chatter)
  • Salesforce Developer Forum
  • Salesforce Stackexchange (SFSE)
  • Lots & Lots of Blogs (from MVP members and other great minds)
  • User Groups & Developer Group Meetups
  • Dreamforce Sessions
  • Webinars & Salesforce Youtube Channel videos
  • Social #AskForce in Twitter, LinkedIn, Facebook, Google+
  • and many more.....

as a Developer when you see so many different options/places to find a solution to what you are working on, over a period of time you will start thinking about contributing back to these channels which helped you.. and thats how i started my work in sharing what i learnt from the community back to the crowd to help people like me who are reaching out to the community everyday.. 

believe me this is more interesting / challenging / engaging / satisfying than just browsing existing answers or repeatedly asking the questions .. the more you share the more you learn.. the amount of research I do to post an answer helps me to understand and gain a deeper knowledge of a topic to which i answer.. i would never read those documents or articles if I am not answering a question..

I initially started with Salesforce Success Community Answers Board and then extended myself into Salesforce Developer Forums and recently into Salesforce Stackexchange as well.. 

each of these forums has a unique way of operating / dealing with questions & answers, how the contributors are rewarded / ranked, etc.. it takes a while for anyone to understand the moderation rules. I would suggest users to go thru existing discussions, use the search to find whats already existing, browse already Solved ones, top answers, FAQ pages to understand more about how the forums work, then get started with simple ones which you are very sure & confident about.. 

If you are answering to a question in any of these forums, I would suggest to follow these simple steps
  • Salesforce has Awesome Documentation resources (Salesforce Help, Docs, Youtube videos, blogs, etc..) if the answer exists in any of these please share those links and guide the user to the related section 
  • if the question has already been asked and answered before, provide those links instead of copying & sharing the answer again
  • if someone already answered to the question, no point in repeating the same.. see if you are adding more details or value with your answer compared whats already there
  • do your research and provide as much details as possible in a single answer rather than making it a chat by asking more questions and answering at the same time
  • finally share some respect to fellow contributors
here's my profile across the 3 different discussion boards I am currently involved in

Success Community Answers Profile

Developer Forums Profile

Salesforce Stackexchange Profile

Remember the more we share the more we learn.. :-)

Wednesday, April 09, 2014

How to Select a Best Answer in Salesforce Success Answers Community

Just a quickie to let all the new users in Salesforce Success Answers community to show how to select a best answer when someone's answer solves your question.. 

here is an image used by Steve Mo explaining how to select a best answer






Best Answers are something that energizes / encourages the community contributors to support and contribute more..

so don't miss to do it if someone helped you :-)

Monday, January 13, 2014

Salesforce GeoLocation Error "No such column GeoLocation__c"

If you are using the latest geolocation feature in your existing salesforce apex classes & soql queries, then chances are you might hit this error "No such column GeoLocation__c. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate name" as we did in our org..

there is a known issue which the salesforce team is reviewing currently
https://success.salesforce.com/issues_view?id=a1p30000000SpfnAAC

the workaround is to increase the version number of your apex class to something greater than 26 and try.. please note in certain cases, we might need to increase the version number of the class that has the geolocation field / soql and also the version number of the classes being referred inside the class with the geolocation / soql..

good luck.

Wednesday, December 18, 2013

Issue with DBAmp (SQL Server to Salesforce Integration tool) upgrades

If you are using DBAmp from http://www.forceamp.com/ , and if you plan to upgrade your current version to the latest version please make sure you restore the dbamp keys in your windows registry.

Shocked - ye we too went through this pain recently.. when we updated our DBAmp to the latest version 2.17.7 it wiped out all the existing dbamp registry keys which was added during the initial installation.

This had an impact on our case assignment rules. wondering how ? here is the reason...

one of the dbamp registry key is UseDefaultAssignment.
if this key is not there or if its not set to true, the leads/cases created in salesforce thru dbamp will not trigger the assignment rules and all will be sitting with the default user you configure in dbamp.

here is the explanation for this registry key from the DBAmp document
This entry controls whether DBAmp adds an AssignmentHeader to all requests made to salesforce.com. A checked value forces DBAmp to include the header.
Note: Setting this registry switch forces DBAmp to add the header to all DBAmp operations. If you need finer control then use the optional SOAP header of the SF_BulkOps stored procedure.

so make sure after you upgrade your existing dbamp installation you check your dbamp registry keys and restore them as it was before the upgrade.

good luck.

Friday, November 22, 2013

Dreamforce 2013 Developer Keynote Highlights

Just finished watching the developer keynote from this years dreamforce..

here are some of the key highlights that i noted down from this hour long video..

Force.com Command Line Interface (CLI)
its an open source tool to help developers access the salesforce instance and all of the objects (standard, custom), run soql queries, import & export of metadata, etc..

Introduction
http://blogs.developerforce.com/developer-relations/2013/11/announcing-the-command-line-interface-for-force-com.html

Some more details
http://www.wadewegner.com/2013/11/a-command-line-interface-for-forcecom/

source code and setup
https://github.com/heroku/force

API.. API.. API.. API...
one of the buzzword througout this dreamforce is API.. most of the stuff in salesforce platform is now API enabled.. this will be the base for cross platform, device independent, application development.
since most of the integration with API's happens over http, xml & json, there are not client libraries to ease the integration. couple of libraries highlighted are

Ruby Client for REST api
https://github.com/ejholmes/restforce

Node.js REST api wrapper for force.com
https://github.com/kevinohara80/nforce

d3.js - to visualise & chart the data from analytics api
http://d3js.org/
example - https://medium.com/p/c87517ab52b1

Salesforce1
This is probably the biggest anouncement for developers this year... its a complete rebranding and futurisitc strategy to put the force.com platform as mobile first & api driven.. this is an umbreall of force.com, heroku and exact target and other supporting components put together. we now have a new developer site for the salesforce1 platform.. which has a good collection of documentation & other resources around the platform and api's..
http://developer.salesforce.com/

Mobile packs and Mobile SDK
these are already released in phases over the period and got a special mention in the keynote to hightlight how it fits in the Salesforce1 platform. the mobile packs covers the development with existing client side web technologies like HTML5 with javascript libraries like Angular, Knockout, jQuery, etc.. and the Mobile SDK covers the iOS and Android based development

Heroku Connect
if you have any of your apps running in heroku and interfaces with salesforce, then this will be a handy app to sync the data between your postgres database and salesforce data. you can create mapping between these 2 databases and enable syncing (uni directional or bi directional)

you can try heroku connect by logging in here
https://app.cloudconnect.com/

you can find more details on this here
https://blog.heroku.com/archives/2013/11/19/tools-for-integrating-heroku-apps-with-salesforce

Demo Time
some of the cool stuff shown in the demo in keynote are

  • Mobile Cards in page layouts
  • creating a simple chart with analytics api, add it to object page layout, show it in mobile devices
  • Enhanced Lookups in page layouts
  • Flexi pages
  • creating Quick actions (publisher actions) and using it in Salesforce1 mobile app

Finaly you can watch the developer keynote video here
http://www.youtube.com/watch?v=KELBWQIVcfk

will try to cover more on the Salesforce1 platform in future blog posts.. lets learn this together :-)

Monday, November 18, 2013

Salesforce1 and SalesforceA apps (iPhone,iPad,Android) initial look and review

Salesforce1
I recently updated Salesforce1 app in my iPad,iPhone and HTCOne Andriod phone and played around with the apps for a while... Here's my initial feedback on it..

For beginners, note
  • Salesforce1 is not a new app.. Its an upgrade of an existing app "Salesforce Chatter Mobile" which was there close to 3 years and got matured over the period..
  • Salesforce1 is not just a new glossy mobile app... its part of a platform/framework 
  • Its a collection of a set of development tools including our existing force.com tools, emerging mobile sdk, heroku tools, newly aquired ExactTarget stuff,
  • it has lots of focus on API based development, ability to integrate/communicate with any app/platform/device
  • setting up new direction in salesforce app development 

Its too early to write anything on the entire platform.. so i m just focusing on the mobile/tablet app here

So whats new or different from previous apps/versions ..


here's the list of new features listed in the app 

  • Improvised search - ability to search across the feeds including records, people, groups & conversations
  • Make use of publisher actions that you created in your org from any device with this app
  • Custom list views - now you will be able to see your custom list views not just the recently viewed records
  • Access all your objects (standard, custom, apps)
  • notifications pane on the right
  • ability to mobile optimized access appexchange apps 
  • ability to create new records from the list view 

after going thru the listed features, few things that I expected but couldn't find..

  • We cannot edit our own user details (name, photo, etc.. ) - need to use the SalesforceA app for this 
  • Not possible to edit groups even if we own it
  • thou it says we can access apps and objects, I found only objects. - to get additional stuff we need the customize the navigation menu by logging into the desktop site and changing the settings under Setup ->  Administration -> Mobile Administration -> Mobile Navigation.
  • List views are restricted. As usual by default it shows the recently viewed records with option to select custom list views. and just below recently viewed, you will see the custom list view names.
  • The custom list views shows the records in "Google Now" style mini post cards - but we cant change the number of records showing up, what fields to display on the cards, the sort order, etc..
  • When the navigation pane is opened, you cannot scroll thru the main pane.. It jus freezes..
SalesforceA
This app is an admin friendly app that goes along with Salesforce1 app - 

  • primarily to manage users 
  • edit, unlock, freeze, deactivate user accounts
  • reset passwords
  • manage permission sets
We have a Rocket Launcher at the bottom of this app.. that takes us to the community page of ideas, answers, events, user groups .. not sure what the actual intent is but its adds a fun/game element to the app..

Rest of the Apps
So what happens to Salesforce Classic, Salesforce Touch, old version of Chatter Mobile... not sure.. need to wait and watch

Bottom Line
I can see the direction of getting into a unified app experience with the vision of customer engagement and better experience which is good... but the current set of multiple apps from salesforce to do different things is a killer..

Sunday, October 20, 2013

Adding Cloud Symbol to your Profile Names

To all my fellow cloud lovers,
if you want to add the cloud symbol to your social profile (twitter, facebook, linkedin, google+) names, get the character map from this link and paste it next to your profile name... bingo...
http://www.fileformat.info/info/unicode/char/2601/browsertest.htm 

Monday, August 05, 2013

salesforce developer certification

if you are someone just getting started for the salesforce developer certification & looking for good learning materials, practice tests, references, books, preparation guide to the certification exam,

here is a very useful blog with a perfect learning curve

getting salesforce certified developer certification

apex pageblocktable, commandlink, commandbutton, actionRegion, actionStatus, actionFunction, param

here is my recent experience in salesforce visualforce page development...

Requirement 
  • to insert a new section to add/remove items to an order in an existing order entry page... 
  • based on the item price, the order totals, tax, shipping etc. should get updated..

Design
  • item description & price are captured through Input Text fields. 
  • "add item" action triggered when a command button is clicked, 
  • the item description & price are added to the pageblock table along with a "remove" commandlink in the last column. 
  • The totals section is updated to include the item price.
  • "remove" action is triggered when the commandlink is clicked in any of the pageblock table row, the corresponding item is removed. 
  • the totals section is again updated to exclude the removed item price.

Catch
looks simple right, the catch is the recalculation of the totals was already done using javascript. so i need to hook into the existing javascript/jquery functions once the item is added/removed from the pageblock table.

also, the re-rendering of the pageblock table and the totals section is done using ajax.

Code
<apex:pageBlockSection title="Add/Remove Items" columns="1" collapsible="false" rendered="{!(Order.Type == 'CargoItems')}">
<apex:actionRegion immediate="true">
<apex:actionStatus id="updateTotals" onstart="block('{!$Component.MainForm}');" onstop="recalcTotals(); unblock('{!$Component.MainForm}');" />
<apex:actionFunction name="addItems" action="{!addCargoItem}" status="updateTotals" reRender="itemsTable"/>
<apex:actionFunction name="removeItems" action="{!removeCargoItem}" status="updateTotals" reRender="itemsTable">
<apex:param name="rowId" value="" />
</apex:actionFunction>
<apex:pageBlockSection columns="3" showHeader="false">
<apex:pageBlockSectionItem >
<apex:outputLabel value="Item Description"></apex:outputLabel>
<apex:inputText value="{!itemDesc}" styleClass="itemFields itemDescField" />
</apex:pageBlockSectionItem>
<apex:pageBlockSectionItem >
<apex:outputLabel value="Item Price"></apex:outputLabel>
<apex:inputText value="{!itemPrice}" styleClass="itemFields itemPriceField" />
</apex:pageBlockSectionItem>
<apex:pageBlockSectionItem >
<apex:commandButton value="Add Item" onclick="addItemRow(); return false;" >
</apex:commandButton>
</apex:pageBlockSectionItem>
</apex:pageBlockSection>
</apex:actionRegion>

<apex:pageblockTable id="itemsTable" styleClass="itemTable" value="{!CargoItems}" var="cItem" >
<apex:column headerValue="Item Description">
<apex:outputText value="{!cItem.Description}"/>
</apex:column>
<apex:column headerValue="Item Price">
<apex:outputText value="{!cItem.Price}" styleClass="cargoItem" />
</apex:column>
<apex:column headerValue="">
<apex:commandLink value="Remove" onclick="removeItemRow('{!cItem.Id}'); return false;">
</apex:commandLink>
</apex:column>
</apex:pageblockTable>
</apex:pageBlockSection>

please be mindful in placing the actionRegion... it should just surround your input value controls that needs to be passed in an ajax request. if you place the pageblocktable inside the apexRegion, then the table rows will not be rendered properly.

Flow
  • "add" commandbutton and "remove" commandlink both calls javascript functions,
  • run any validations in the javascript functions & then call the actionFunctions
  • actionFunctions are tied to the controller methods which adds/removes records to the collection
  • pageblock table is binded to the cargotItems collection in the controller
  • when the call returns back from controller to actionFunction, actionStatus is fired which calls the existing javascript recalculate method to update totals section & also re-renders the pageblock table 


hope this helps someone who has a similar sceanrio...