Category Archives: Company Update

Salesforce: Broadcasting Newsletter to Community Users

There are many different options available in broadcasting newsletter to community users, such as using native Salesforce feature of send email or third party apps from the Appexchange if you have more specific requirements or simply using other applications for marketing purpose.

We have recently implemented this requirement with a combined utilisation of:

  • Mail Chimp as the marketing tool
  • third party app Chimp Sync from the Appexchange to sync to Salesforce

This implementation has achieved the following requirement:

  • subscription list can be made available in Salesforce
  • community users can be added to the subscription list for broadcast in Mail Chimp
  • community users are able to receive newsletters via email and directly access it
  • past and present newsletters will be available in Salesforce

Salesforce Visualforce Page View State

Have you ever encountered the “Maximum view state size limit” error on the Visualforce page that you developed even though you only capture very little information (e.g, like 3 input fields)?

Maximum view state size limit (135KB) exceeded. Actual view state size for this page was xxx.xxKB

The way that the view state works is that it is not only holding the value of the field that you capture on the page, but it also holds the value of any accessible objects/variables that you have declared in the controller/extension. For example, if you have an object list (e.g, List<Account>) and the list is holding a lot of records, you might encounter the view state size limit error even though you are not displaying result in the page.

Salesforce has a good explanation on Visualforce View State that gives you a good start if you are troubleshooting the issue. As a good developer, you should also follow the best practice guide to develop a performance optimized Visualforce page.

Salesforce: Problem Deleting Batchable Apex Class

Recently, I encountered a weird error when trying to delete a batchable Apex class from Salesforce instance. The error was:

This apex class is referenced elsewhere in Remove the usage and try again.


The reference was pointing to an Apex Job. Initially, this was a bit weird as I had checked that the Apex Job status was shown as Completed before deleting the Apex class. After doing some study, I found that this is related to one of the “error” Apex Job but with status Completed. To be specific, the Apex Job died at the execute() method due to stupid code that I have written and it never reach the finish() method to close the Apex Job execution properly. The Apex Job is still considered open at the backend even though the status is Completed.

If you encounter the similar issue, you can perform the following:

  1. launch Developer Console
  2. open Execute Anonymous Windows
  3. paste the code: System.abortJob(”);
  4. click Execute to run the script

This should kill off the job and you can proceed to delete the Apex class now.

Wedid: Sage Saleslogix and Avantgard Integrity Integration


The client is using SalesLogix to handle credit/loan deals. When the deals are approved, the deal (and the deal related information) need to be in return track in the Sungard Avantgard Integrity system



Purpose To sync approved deals from Saleslogix into Avantgard Integrity system.
Applications Sage SalesLogix CRM
Sungard Avantgard Integrity
Versions SalesLogix On-Premise version 8.0.0
Integrity Version 8.4.1
Tool Boomi
Information SalesLogix Deal Roles > Integrity Counter Party
SalesLogix Deal Roles > Integrity BU Exposure Limit
SalesLogix Deal > Integrity Agreement
SalesLogix Deal > Integrity Facility
SalesLogix Deal Tranches and Fees > Integrity Tranche, Fee and Covenant
Data Formats JSON and XML
Volumes ~100/day
Process When a SalesLogix Deal (Custom) is approved, it in return creates an agreement in Integrity. All children information from deal such as contact roles, tranches and fees will create a corresponding Integrity record respectively as well.
Schedule Every 2 minutes
Complexity Medium


Salesforce Community: Self Registration Considerations

Salesforce Community provides self registration feature so that external user could register for a login if require.


If you are interested to enable this option (From Setup, click Customize | Communities | All Communities, then click Manage next to the community name.), consider if your business require the person account feature so that a self registered personnel will be tracked as a person account in Salesforce.

If person account is not an option for you, you would need to consider implementing a dedicated account being used so that all self registered personnel will be treated as a contact under this specific account instead.


It is also recommended to ensure the profile that you are assigning to for self registered members have the appropriate permission set. Otherwise, the members may be able to view or edit data that you do not want them too.

Happy testing!

Wedid: Template Auto Send


The users would like to have a mechanism of sending out documents from Salesforce to their clients for signature automatically.

Sample scenario:

When the quote status is set to “Presented”, a PDF quote containing all the relevant information of the quote  including the line items  will be generated and sent to the contact for signature automatically.


  1. Install an app “Conga Composer”.
  2. Install an app “Conga Workflow”.
  3. Install an app “Docusign”.
  4. Create workflow that will be triggered by the quote status.
Related Objects Quote, Quote Line Item
Components/App Conga Composer, Conga Workflow, Salesforce Workflow
Complexity Easy

Wedid: Mass Update Product Price list


The client would like to run batch updates on the product price lists quarterly. They have multiple price books and different currencies for each product price

For example:

Pricebook A

  • Product Id: AE110-B
  • Product Name: Door Trim (Black)
  • Unit price in AUD: 4,200
  • Unit price in GBD: 1,500
  • Unit price in USD: 4,000

Pricebook B

  • Product Id: AE110-B
  • Product Name: Door Trim (Black)
  • Unit price in AUD: 3,900
  • Unit price in GBD: 1,000
  • Unit price in USD: 3,700


  1. Install an app “Skyvva”.
  2. Build a job the updates the pricebook entries.
  3. Standardise the template used for the update process
Related Objects Product, Pricebook, Pricebook Entry
Components/App Skyvva
Complexity Easy

Salesforce: Skyvva IChained Interfaces

Scenario: Imagine if you have a spreadsheet that contains Account & Contact data. You would like to use Skyvva to run an insert for both Account and Contact.

Problem: The basic Skyvva setup will require you to create 1x job to insert Account and another 1x job to insert Contact. Therefore, everytime when you wish to run the job, you will have to first run the insert Account job then only run the insert Contact job. It is a hassle to go through two steps just to get things done.

How can we setup Skyvva to run the Account insert job and automatically triggers the Contact insert job in one go?

Solution: IChained Interface feature in Skyvva

Once you have created both Account & Contact Insert job, create 1x IChained Interfaces under Account Insert Integration job. Example:

IChained Interface


Note: Building IChained Interface does not mean that Skyvva will automatically park the right child under the right parent. You will still need a method / formula in your child job to specify which parent that the child belongs to.

Salesforce: Adding New Campaign Member Status

Why are we not able to insert new values to the Campaign Member status field via the Administrator Setup screen just like any other normal picklist field?

Campaign status picklists


This is because the status field picklist value is stored in a standard object called CampaignMemberStatus and it is campaign specific (this means that each Campaign record will have their own specific status picklist value).

How to add new status value?
1. View the Campaign record.
2. Click on the ‘Advanced Setup’ button.
3. Edit the Status or click ‘Add More’ for new status.

Data model relationship:
Campaign status relationship

Insert values using data loader:
Yes, you can use data loader to insert new records into the CampaignMemberStatus object. Note that you will need to include CampaignId field is populated because each status will need to be to related to one Campaign.

How to automate this:

You can try to search for any 3rd party app in AppExchange to automate the process.