How To Reference the External ID on Lookup in Salesforce

This post shows you how you can reference another object through it’s external id AV????? ?????????RICOH? ???? SP EC???6100H . 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 ???????????? ??G3030T ?JAN4975846033405 aso1-8737-06 -??????? . 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.

Parsing Instagram JSON on Apex

Last week I had a challenge of making a API callout to Instagram from Salesforce and then parse the returned JSON content and the mapped the values to become a record for a custom object. Basically each media post and comments becomes a record in Salesforce.

First off you can start by reading this article

According to http://www.json.org:

JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate. … JSON is a text format that is completely language independent but uses conventions that are familiar to programmers of the C-family of languages, including C, C++, C#, Java, JavaScript, Perl, Python, and many others.

To begin, what I have here is an API request for comments for a particular media or picture I have in Instagram.

Read the rest of this entry »

Javascript Page Redirect on a VF Page

Stumbled upon this issue and found an easy fix.

You have a VF page that you want to redirect a user to a different website, say for OAuth2 authenticate.

window.location.href='https://api.instagram.com/oauth';

This will not work as the browser will complain about Iframe security or Security sandbox violation.

This is because VF page are iframed, to get around this simply use below to redirect, this will redirect the actual page the VF page is iframed into.

window.top.location = 'https://api.instagram.com/oauth';