Friday, March 9, 2018

Salesforce: "No such column 'BOGUS' on entity"

To hopefully save someone the hours I just wasted. If you see this error message when doing an Create, Update, Upsert or Delete using the Force.com PHP Toolkit:
Fatal error: Uncaught SoapFault exception: [sf:INVALID_FIELD] INVALID_FIELD: No such column 'BOGUS' on entity 'Thing__c'.
It's because you've double wrapped the record array:
$createArray = array();
$createArray[0]->Foo__c = 'bar';
$createResult = $sfdcConnection->create(array($createArray), 'Thing__c');
The issue here of course being that the array called "$createArray" is being wrapped in another array... Avoid doing that...

Wednesday, January 31, 2018

Salesforce: Calling batch methods from other batch methods

Have you just had the fun situation where a Salesforce batch has run, which caused something (such as a trigger, etc) to cause another batch to attempt to run?

If you have, then you know the frustration of getting the joyous error message below:


Database.executeBatch cannot be called from a batch or future method.

There are two ways of addressing the "Salesforce Feature". Rewrite your classes to not run if either System.isFuture() or System.isBatch() is true.



or...



Change the API version of all effected classes and triggers to exactly v27.

This single version of the api allows batches to be called from batches. This is obviously not a "good" solution, but if it's a stupid solution, and it works, it's still a solution.



Thursday, August 31, 2017

Auto Scaling Image height in Salesforce Formula Fields

You can use Images is formulas, but if you want to scale them you have to specify height and width not useful if your images are going to be random aspect ratios!

So, simply replace the element you want to scale automatically with "-1".

This is a valid formula:

IMAGE( 'PATH_TO_IMAGE.PNG', 'The Alt Tag', -1, 200)
that image will always be 200px wide, and as high as it needs to be.

Thursday, October 30, 2014

Easy Maps for Account and Contact Addresses in Salesforce

Some time ago, Salesforce had to remove their "Google Maps for Salesforce" from the App Exchange due to a change in Google's Licencing arrangements.

I've not seen a good example of easy to use Google Maps in Salesforce since, so here are some Custom Field Formulas. Simply create a new Custom Field with a Forumla -> Text type, and copy/paste the below into the formula area. On the page layout, it works really well below the address entry areas.



Each of these will display a static image map inline in Salesforce, and once the user clicks on the map, it will automatically display directions from the User's Address (stored on their User Profile) to that location. It will also complain to the user if they do not have an address on their profile, and will not display the Maps until they do.

Account Billing Address

if(or( $User.Street = "",  $User.City = "",  $User.Country  = ""),IMAGE("/img/samples/flag_red.gif", "red", 12, 12) + " Please Update "+HYPERLINK("/_ui/core/userprofile/UserProfilePage", "Your Profile")+" to include your Street, City and Country to see the map",

if(or(BillingStreet = "", BillingCity ="", BillingCountry =""), "Please Enter the Billing Address, Suburb and Country to see the Map.",

HYPERLINK("https://maps.google.com/maps?saddr="+ $User.Street +","+ $User.City +","+ $User.State +" "+ $User.Country +"&daddr="+ BillingStreet +", "+BillingCity +" "+ BillingState +" "+ BillingCountry +"&hl=en&t=m",

IMAGE("https://maps.googleapis.com/maps/api/staticmap?center="+ BillingStreet +","+ BillingCity +" "+BillingState+" "+BillingCountry +"&zoom=14&size=300x300&maptype=roadmap&markers=color:red%7C"+ BillingStreet +","+ BillingCity +" "+BillingState+" "+BillingCountry , 'Map'), "_Blank") + BR() + "Click to get Directions to this Address"
))

Account Shipping Address

if(or( $User.Street = "",  $User.City = "",  $User.Country  = ""),IMAGE("/img/samples/flag_red.gif", "red", 12, 12) + " Please Update "+HYPERLINK("/_ui/core/userprofile/UserProfilePage", "Your Profile")+" to include your Street, City and Country to see the map",

if(or(ShippingStreet = "", ShippingCity ="", ShippingCountry =""), "Please Enter the Shipping Address, Suburb and Country to see the Map.",

HYPERLINK("https://maps.google.com/maps?saddr="+ $User.Street +","+ $User.City +","+ $User.State +" "+ $User.Country +"&daddr="+ ShippingStreet +", "+ShippingCity +" "+ ShippingState +" "+ ShippingCountry +"&hl=en&t=m",

IMAGE("https://maps.googleapis.com/maps/api/staticmap?center="+ ShippingStreet +","+ ShippingCity +" "+ShippingState+" "+ShippingCountry +"&zoom=14&size=300x300&maptype=roadmap&markers=color:red%7C"+ ShippingStreet +","+ ShippingCity +" "+ShippingState+" "+ShippingCountry , 'Map'), "_Blank") + BR() + "Click to get Directions to this Address"
))

Contact Mailing Address

if(or( $User.Street = "",  $User.City = "",  $User.Country  = ""),IMAGE("/img/samples/flag_red.gif", "red", 12, 12) + " Please Update "+HYPERLINK("/_ui/core/userprofile/UserProfilePage", "Your Profile")+" to include your Street, City and Country to see the map",

if(or(MailingStreet = "", MailingCity ="", MailingCountry =""), "Please Enter the Mailing Address, Suburb and Country to see the Map.",

HYPERLINK("https://maps.google.com/maps?saddr="+ $User.Street +","+ $User.City +","+ $User.State +" "+ $User.Country +"&daddr="+ MailingStreet +", "+MailingCity +" "+ MailingState +" "+ MailingCountry +"&hl=en&t=m",

IMAGE("https://maps.googleapis.com/maps/api/staticmap?center="+ MailingStreet +","+ MailingCity +" "+MailingState+" "+MailingCountry +"&zoom=14&size=300x300&maptype=roadmap&markers=color:red%7C"+ MailingStreet +","+ MailingCity +" "+MailingState+" "+MailingCountry , 'Map'), "_Blank")+ BR() + "Click to get Directions to this Address"
))

Contact Other Address

if(or( $User.Street = "",  $User.City = "",  $User.Country  = ""),IMAGE("/img/samples/flag_red.gif", "red", 12, 12) + " Please Update "+HYPERLINK("/_ui/core/userprofile/UserProfilePage", "Your Profile")+" to include your Street, City and Country to see the map",

if(or(OtherStreet = "", OtherCity ="", OtherCountry =""), "Please Enter the Other Address, Suburb and Country to see the Map.",

HYPERLINK("https://maps.google.com/maps?saddr="+ $User.Street +","+ $User.City +","+ $User.State +" "+ $User.Country +"&daddr="+ OtherStreet +", "+OtherCity +" "+ OtherState +" "+ OtherCountry +"&hl=en&t=m",

IMAGE("https://maps.googleapis.com/maps/api/staticmap?center="+ OtherStreet +","+ OtherCity +" "+OtherState+" "+OtherCountry +"&zoom=14&size=300x300&maptype=roadmap&markers=color:red%7C"+ OtherStreet +","+ OtherCity +" "+OtherState+" "+OtherCountry , 'Map'), "_Blank")+ BR() + "Click to get Directions to this Address"
))

Tuesday, June 10, 2014

Australian Business Number (ABN) Validation Rule for Salesforce.com

Assuming your Custom field is "ABN" (API Name = "ABN__c") then you can stuff this formula in a validation rule to ensure that ABNs entered are valid by using the same logic the government does.

not(and
(
  LEN(TRIM( ABN__c )) == 11,
  ISNUMBER(ABN__c),
  mod( 
     (((VALUE(MID(ABN__c, 1, 1)) - 1 ) * 10) + 
(VALUE(MID(ABN__c, 2, 1)) * 1) + 
(VALUE(MID(ABN__c, 3, 1)) * 3) + 
(VALUE(MID(ABN__c, 4, 1)) * 5) + 
(VALUE(MID(ABN__c, 5, 1)) * 7) + 
(VALUE(MID(ABN__c, 6, 1)) * 9) + 
(VALUE(MID(ABN__c, 7, 1)) * 11) + 
(VALUE(MID(ABN__c, 8, 1)) * 13) + 
(VALUE(MID(ABN__c, 9, 1)) * 15) + 
(VALUE(MID(ABN__c, 10, 1)) * 17) + 
(VALUE(MID(ABN__c, 11, 1)) * 19)),
89
  ) == 0
))

Friday, April 11, 2014

Cairns Webcams for Cyclone Ita

Here are some links for Webcams around Far North Queensland. I'll strike them out as they go down.

Cairns
Cooktown

Monday, January 20, 2014

Adding Google Search to Internet Explorer in Australia

After I get my computer rebuilt at work, one of the first things I do is change the Search provider to Google in whatever archaic version of Internet Explorer we are still using.

However, when I tried to do this today, Google was not in the list of Search Providers:

After a moderate amount of cursing and nashing of teeth, I hacked the URL to point to the US page:

http://www.iegallery.com/en-us/addons?callback=true&featuretype=2

And you can reach the specific Google Search provider here:

http://www.iegallery.com/en-us/Addons/Details/813