Skip to content

Instantly share code, notes, and snippets.

View alan-morey's full-sized avatar

Alan Morey alan-morey

View GitHub Profile
@alan-morey
alan-morey / XmlStarlet.txt
Last active October 30, 2017 17:08
XmlStarlet
Salesforce package.xml
xmlstarlet sel -t -m _:Package/_:types -s A:T:U _:name -n -v _:name -n -m _:members -s A:T:U . -v "concat(' - ', .)" -n package.xml
xmlstarlet sel -t -m _:Package/_:types -s A:T:U _:name -m _:members -s A:T:U . -v "concat(../_:name, '::', .)" -n package.xml
@alan-morey
alan-morey / keybase.md
Created October 20, 2017 21:33
keybase.md

Keybase proof

I hereby claim:

  • I am alan-morey on github.
  • I am alanmorey (https://keybase.io/alanmorey) on keybase.
  • I have a public key ASC_PfYGuMi76Hro7GXR8FQJowknG2Za0s0RWmEZaELM3wo

To claim this, I am signing this object:

class SetupAuditTrails {
public Map<String, Set<String>> getModifiedClassesSince(Id sinceTrailId) {
return getModifiedClassesSince(sinceDate(sinceTrailId));
}
public Map<String, Set<String>> getModifiedClassesSince(DateTime sinceDate) {
Map<String, Set<String>> changes = new Map<String, Set<String>>();
for (SetupAuditTrail t : [
SELECT display
@alan-morey
alan-morey / AnonApp.cls
Last active January 8, 2016 23:58
Wrapper for running anonymous code blocks in Salesforce, print() and println() allow you to write messages to a single output stream and have the out rendered to debug log and also in an AlertException. The AlertException is the always thrown at end of execution which ensures that nothing is ever committed to the Database.
public abstract class AnonApp implements MainMethod {
final String[] OUT = new String[0];
public static void run(Type clazz) {
AnonApp app = (AnonApp) clazz.newInstance();
app.run();
}
public void run() {
try {
@alan-morey
alan-morey / BehaviorUnexpectedForStringValueOfWithDateAndDateTime.cls
Last active December 24, 2015 13:29
Unexpected result when using String.valueOf() to get the value of a Date and DateTime, when using an Object reference.
// Asserts fail for the following
/////////////////////////////////
DateTime dt = DateTime.now(); // VARIABLE_ASSIGNMENT dt = 2013-10-03T05:35:37.373Z
System.assertEquals(String.valueOf(dt), String.valueOf((Object) dt));
// Assertion Failed: Expected: 2013-10-02 22:35:37, Actual: 2013-10-03 05:35:37
Date d = Date.today(); // VARIABLE_ASSIGNMENT d = 2013-10-02T00:00:00.000Z
System.assertEquals(String.valueOf(d), String.valueOf((Object) d));
// Assertion Failed: Expected: 2013-10-02, Actual: 2013-10-02 00:00:00
@alan-morey
alan-morey / ForceService.groovy
Created November 24, 2012 01:29
Simple wrapper for querying Salesforce using PartnerConnection in Groovy. Dependencies are pulled in from maven repository via Grape.
@Grab(group='com.force.sdk', module='force-connector', version='22.0.9-BETA')
import com.force.sdk.connector.ForceConnectorConfig
import com.force.sdk.connector.ForceServiceConnector
import com.sforce.soap.partner.PartnerConnection
import com.sforce.soap.metadata.FileProperties
import com.sforce.soap.metadata.ListMetadataQuery
import java.net.URLEncoder
@alan-morey
alan-morey / DescribeMetadataResultFileParser.php
Created November 1, 2012 16:27
PHP classes to parse result files from the Force.com Mirgration Tool "describeMetadata" and "listMetadata" ant tasks.
<?php
class DescribeMetadataResultFileParser {
const BOUNDARY = '************************************************************';
const XML_NAME_MARKER = 'XMLName: ';
const DIR_NAME_MARKER = 'DirName: ';
const SUFFIX_MARKER = 'Suffix: ';
const HAS_META_FILE_MARKER = 'HasMetaFile: ';
const IN_FOLDER_MARKER = 'InFolder: ';
const CHILD_OBJECTS_MARKER = 'ChildObjects: ';
@alan-morey
alan-morey / ScheduleUtil.cls
Created July 24, 2012 21:46
Apex ScheduleUtil
global class ScheduleUtil {
global static String cronExpression(DateTime dt) {
return dt.format('s m H d M ? yyyy');
}
static testMethod void testCronExpression() {
DateTime dt = DateTime.now();
String expected = dt.second() + ' ' + dt.minute() + ' ' + dt.hour() + ' ' + dt.day() + ' ' + dt.month() + ' ? ' + dt.year();
@alan-morey
alan-morey / Uuid.cls
Last active August 29, 2015 14:18
UUID Apex
public class Uuid {
static final String GROUP_SEP = '-';
Uuid() {}
public static String randomUuid() {
String hex = EncodingUtil.convertToHex(Crypto.generateAesKey(128));
return String.join(new String[] {
hex.substring(0,8),
@alan-morey
alan-morey / SystemHashCodeBugTest.cls
Created April 6, 2015 19:33
Salesforce Spring '15 - System.hashCode() producing unexpected result when using same value with different reference types.
// Unexpected results for System.hashCode() when using same values for Salesforce IDs with different reference types.
//
// https://www.salesforce.com/us/developer/docs/apexcode/Content/apex_methods_system_system.htm?CSHID=apex_methods_system_system.htm#apex_system_system_hashcode
//
// API v33
@isTest
class SystemHashCodeBugTest {
static final String STR_VAL = 'foobar';
static final Id USER_ID_VAL = UserInfo.getUserId();
static final Id LITERAL_ID_VAL = '001000000000001';