Skip to content

Instantly share code, notes, and snippets.

@oscartcy
oscartcy / promise_chain.js
Last active July 26, 2017 07:55
Sequential promise chain with Array.reduce
var arr = [1,2,3,4,5];
function promiseAdd(prevPromise, val) {
return prevPromise.then((sum) => sum + val);
}
var sum = arr.reduce(promiseAdd, Promise.resolve(0));
sum.then(console.log);
@oscartcy
oscartcy / runAsYourself.cls
Last active July 28, 2016 06:27
A trick to saperate transaction during test to avoid mixed dml operation, not always works though lol
System.runAs([SELECT Id FROM User WHERE Id = :UserInfo.getUserId()][0]) {
// some execution with potential mixed dml operations
}
@oscartcy
oscartcy / clear_record.cls
Last active December 31, 2015 04:16
clear records by list of sObject
// put your target sObject API Name into the array
List<String> sObjs = new List<String>{'MyObject1__c', 'MyObject2__c'};
for(String sObj : sObjs) {
String soql = 'SELECT Id FROM ' + sObj;
delete(Database.query(soql));
}
@oscartcy
oscartcy / user.cls
Created October 14, 2015 09:18
Deactivate Salesforce user and assign random username
String username = '';
User u = [select id from user where username = :username];
u.isActive = false;
Blob blobKey = Crypto.generateAesKey(256);
String key = EncodingUtil.convertToHex(blobKey);
u.username = key + '@junk.com';
update u;
@oscartcy
oscartcy / test_exception.cls
Last active August 29, 2015 14:22
Testing exeception
Foo up = new Foo(
userId__c = u.Id,
permissions__c = '[]'
);
try {
insert up;
throw new TestException(); // force to run catch block if insert do not throw exception
} catch (Exception e) { // catch exception from insert
System.Assert(e.getMessage().contains('Foo already exist!'));
@oscartcy
oscartcy / bulk_insert.cls
Last active August 29, 2015 14:22
Use generic sobject list to bulk insert records
List<SObject> so = new List<SObject>();
for(Lead l : leads)
so.add(l);
for(Contact c : contacts)
so.add(c);
for(Account a : accounts)
so.add(a);
@oscartcy
oscartcy / future.cls
Created June 2, 2015 06:51
future method does not support list of objects flatten to string to pass complex data structure Also avoid breaking all batch DML operation with a flag
@future
// future method does not support list of objects, so we are going to use
// so tweak method in order to pass necessary info to create new PermissionSetAssignment
private static void createPermissionSetAssignments(List<String> createData) {
List<PermissionSetAssignment> insertPSAs = new List<PermissionSetAssignment>();
for(String data : createData) {
String[] ids = data.split(';');
PermissionSetAssignment psa = new PermissionSetAssignment(
@oscartcy
oscartcy / after.cls
Created May 27, 2015 08:06
General trigger bulkification - best practices
Trigger myTrigger on Contact(before insert) {
map<Id,Account> accountMap = new map<Id,Account>();
for(Contact c : trigger.new){
accountMap.put(c.AccountId, null);
}
accountMap.remove(null);
accountMap.putAll([Select Id, Name, ShippingCity From Account Where Id In : accountMap.keyset()]);
for(Contact c : trigger.new){
if(accountMap.containsKey(c.AccountId)){
c.ShippingCity = accountMap.get(c.AccountId).ShippingCity;
@oscartcy
oscartcy / list_to_map.cls
Created May 22, 2015 02:37
Convert List to Map for dynamically generated SOQL
//Your dynamic query
String accountDynamicQuery = 'select id from account limit 50000' ;
//Typecasting it to map
Map<id,account> mapAcc = new Map<id,account>((List<account>)Database.query(accountDynamicQuery));
@oscartcy
oscartcy / build_soql.cls
Last active August 29, 2015 14:21
Build dynamic SOQL
String queryString = 'SELECT Id,Name FROM ABCMap__c';
if(dummyInstance.Account__c != null)
queryString += ' WHERE Account__c=\'' + dummyInstance.Account__c + '\'';
if(dummyMap.profileID__c != null) {
if(dummyInstance.Account__c != null)
queryString += ' AND ';
else
queryString += ' WHERE ';
queryString += 'profileID__c=\'' + dummyMap.profileID__c + '\'';
}