Salesforce Platform Developer II Transition Exam Takeaways

As part of my goals this year is to get the Technical Architect certification. I recently took the Salesforce Platform Developer II Transition Exam and I can say that it was fairly straightforward if you know your stuff. Having recently done the Platform Developer I transition exam last December then booked Platform Developer II exam for January. Because procrastinating is a bitch, the typical me waited till the last few days before getting serious studying.

Anyway I passed the exam. There are 35 questions, you are given 1 hour to complete. Get 63% correct and you will pass.

Here are some topics to pay attention to for your takeaway

  1. Read up on the Messaging class and it’s method
  2. Implementing Continuation and when best to use it
  3. Your SOQL and SOSL queries
  4. Know your objects and data types. What are types of compound fields and how to use them in queries
  5. Testing REST and SOAP
  6. Http callouts and named credentials
  7. Advanced Currency Management
  8. When to use declarative vs programmatic features
  9. @invocablemethod and @invocablevariable annotations
  10. Lightning components
  11. Testing best practices
  12. Developer Console
  13. Apex Charts
  14. Developer Console
  15. Visualforce best practices

I’m going to Dreamforce

Dreamforce

After 6 years of doing Salesforce, I’m finally attending my first Dreamforce- the biggest software event in the world, where people gather from all over the world to share ideas, learn new skills, connect, and be inspired.

I have been fortunate enough to work for a company such as Davanti Consulting, a New Zealand premiere Salesforce Partner. They send people annually to attend Dreamforce but, they don’t just randomly select employees to send. There is a rigid set of requirements and anyone qualified needs to put up a case why they should be selected and what would the company gain by doing so. This was nerve racking as I have now to come up with a presentation that would stand out among the rest of my peers who are as qualified I am.

So how did I pull it off? For one, I was on top of recent news of Salesforce acquisitions of machine learning and AI companies so that kind of gave insights on what Dreamforce would be about this year. I’ve always been keen on exploring other technologies and having a play on them. Salesforce recently did restructuring on their product line and out came App Cloud, coming off from an engagement where I lead the mobile employee app using lightning and another client facing application on force.com. My pitch generally evolved around the idea that attending Dreamforce would upgrade my skills particularly on client facing apps and gain traction on IOT, get an insane amount inspiration and I’ll be bringing back the knowledge with a series of sessions. I got the nod from our senior team and choose me to go to Dreamforce. I’m just stoked as attending Dreamforce was on of my goals for the longest time.

Looking forward to do a series of blog post commencing the event. For now time to earn my Dreamforce badges via trailhead.

dreamforce-badge

Reference the External ID on Lookup

This post shows you how you can reference another object through it’s external id. This is useful if you do not know the Salesforce ID but know the external ID.

Example: You have an external field on the Account object with an API named myExternal_Id__c. You have an account record named “Burlington Textile of America” and let’s give the external ID a value of “X123”.

 

Issue is you want to create a contact record but do not know the account record id but know the external Id.

Check this snippet of apex code to accomplish this.

Account acc = new Account(myExternal_Id__c = ‘X123’);

Contact con = new Contact();

con.Account = acc;

con.LastName = ‘Pau’;

insert con;

The same concept is applicable for JSON files

{

“Account” : {“myExternal_Id__c” : “X123”},

“LastName” : “Pau”

}

 

Master-Detail: Field is not writable error on Apex

I came upon this error when I assigning the custom object to the master standard object.

Invoice__c inv = new Invoice__c();
inv.Account__c = accountId;
insert inv;

Then I get this error.

Field is not writable : Invoice__c.Account__c

The fix was actually easy. I just rewrote it to assign the master id on instantiating the child object.

Invoice__c inv = new Invoice__c(Account__c = accountId);
insert inv;

Hope somebody finds this useful.

Add row rerender on a list with input fields looses data

Having a list in your controller that is displayed as input fields either through pageblock or repeat and you need to add another row to the list via a button.  Chances are when you enter data on any input field on any row and you hit Add Row button that has a rerender attribute that makes the ajax call, the previous entered data will be lost as per code sample below.

public class MyController {
public list<myOject__c> objList {get;set;}
public MyController() {
objList = new List<myObject__c>();
}
public void addRow(){
myObject__c newObj = new myObject__c();
objList.add(newObj);
}
}
VF:
<apex:pageblock id=”myList”>
<apex:pageblockSection value=”{!objList}” var=”obj”>
<apex:column>
<apex:inputField value=”{!obj.Name” />
</apex:column>
</apex:pageBlockSection>
<apex:commandButton value=”Add Row” action=”{!addRow}” rerender=”myList”/>
</apex:pageblock>
The simple solution is to add the attribute immediate=”false” to the commandButton tag. This forces the data to be retained.