Apex Archives - Justin Silver https://www.justinsilver.com/tag/apex/ Technology, Travel, and Pictures Sun, 01 Mar 2020 00:09:41 +0000 en-US hourly 1 https://wordpress.org/?v=6.0.1 https://www.justinsilver.com/wp-content/uploads/2013/06/cropped-apple-touch-icon-160x160.png Apex Archives - Justin Silver https://www.justinsilver.com/tag/apex/ 32 32 Salesforce sObject Id Validation in Apex https://www.justinsilver.com/technology/salesforce/salesforce-sobject-id-validation-apex/?utm_source=rss&utm_medium=rss&utm_campaign=salesforce-sobject-id-validation-apex https://www.justinsilver.com/technology/salesforce/salesforce-sobject-id-validation-apex/#comments Thu, 10 Dec 2015 20:50:22 +0000 http://justinsilver.com/?p=3989 Salesforce sObject Id‘s are specially formatted strings used to uniquely identify sObjects. If you want to test the validity of an sObject Id in Apex, you can go the simple route of checking the...

The post Salesforce sObject Id Validation in Apex appeared first on Justin Silver.

]]>
AmpedSense.OptimizeAdSpot('AP'); AmpedSense.OptimizeAdSpot('IL'); AmpedSense.OptimizeAdSpot('IR');

Salesforce sObject Id‘s are specially formatted strings used to uniquely identify sObjects. If you want to test the validity of an sObject Id in Apex, you can go the simple route of checking the length, the slightly more complex route of writing a regular expression, or even go as far as to implement the logic parsing of ID values. An easier way to get accurate testing of validity is to create an instance of the sObject you want to test against, then try to assign your sObject Id to it, and catch any Exceptions. This will validate both the format, as well as the type of the sObject Id.

The Util Code

public abstract class MyUtilClass {
    /**
     * Test a String to see if it is a valid SFDC  ID
     * @param  sfdcId The ID to test.
     * @param  t      The Type of the sObject to compare against
     * @return        Returns true if the ID is valid, false if it is not.
     */
    public static Boolean isValidSalesforceId( String sfdcId, System.Type t ){
        try {

            if ( Pattern.compile( '[a-zA-Z0-9]{15}|[a-zA-Z0-9]{18}' ).matcher( sfdcId ).matches() ){
                // Try to assign it to an Id before checking the type
                Id id = theId;

                // Use the Type to construct an instance of this sObject
                sObject sObj = (sObject) t.newInstance();
     
                // Set the ID of the new object to the value to test
                sObj.Id = id;

                // If the tests passed, it's valid
                return true;
            }
        } catch ( Exception e ){
            // StringException, TypeException
        }

        // ID is not valid
        return false;
    }
}

You can then test the validity of the sObject Id by passing it into the util method along with the System.Type of the sObject you want to compare against. The type can be accessed using sObject.class.

Call From Apex

// maybe a valid Account.Id, maybe not?
String theId = '001xxxxxxxxxxxx'; 

if ( MyUtilClass.isValidSalesforceID( theId, Account.class ) ){
    // do something if it is valid
}

The post Salesforce sObject Id Validation in Apex appeared first on Justin Silver.

]]>
https://www.justinsilver.com/technology/salesforce/salesforce-sobject-id-validation-apex/feed/ 3
Install WSDL2Apex on OS X El Capitan https://www.justinsilver.com/technology/osx/install-wsdl2apex-on-os-x-el-capitan/?utm_source=rss&utm_medium=rss&utm_campaign=install-wsdl2apex-on-os-x-el-capitan https://www.justinsilver.com/technology/osx/install-wsdl2apex-on-os-x-el-capitan/#comments Tue, 24 Nov 2015 21:09:19 +0000 http://justinsilver.com/?p=3979 The WSDL2Apex generates the Apex classes necessary to implement a SOAP callout from the Force.com platform using the WSDL for the service you are trying to implement. In 2014 it was split out of...

The post Install WSDL2Apex on OS X El Capitan appeared first on Justin Silver.

]]>
AmpedSense.OptimizeAdSpot('AP'); AmpedSense.OptimizeAdSpot('IL'); AmpedSense.OptimizeAdSpot('IR');

The WSDL2Apex generates the Apex classes necessary to implement a SOAP callout from the Force.com platform using the WSDL for the service you are trying to implement. In 2014 it was split out of the Force.com IDE codebase and was made open source , available on it’s own as an open source project.

This means that you can clone the GitHub project, build the JAR, and then use it to consume a WSDL and generate your Apex classes. There is one caveat for OS X El Capitan (and Yosemite as well) in that the operating system ships with Java 1.8, however WSDL2Apex requires Java 1.7 or earlier. If you try to run the build using a later version of Java, you will get 12-15 test errors (I got 12, other people reported 15).

Results :

Failed tests:   testAsyncFalse(com.salesforce.ide.wsdl2apex.core.WSDL2ApexTest): Test 8 doesn't match expected:<...rmationByAirportCode[Response_element {(..)
  testNewClassNames(com.salesforce.ide.wsdl2apex.core.WSDL2ApexTest): testNewClassNames doesn't match expected:<... }(..)
  testNoOperation(com.salesforce.ide.wsdl2apex.core.WSDL2ApexTest): Test noOperation failed expected:<...   public class Echo[Date_element {(..)
  testExchange(com.salesforce.ide.wsdl2apex.core.WSDL2ApexTest): Test testExchange failed expected:<...{(..)
  testAmazonGood(com.salesforce.ide.wsdl2apex.core.WSDL2ApexTest): Test testAmazonGood failed expected:<... {(..)
  testBigFile(com.salesforce.ide.wsdl2apex.core.WSDL2ApexTest): Test testBigFile failed expected:<... {(..)
  testNamespaceDependencies(com.salesforce.ide.wsdl2apex.core.WSDL2ApexTest): Test testNamespaceDependencies failed expected:<... {(..)
  testTwoNamespaces(com.salesforce.ide.wsdl2apex.core.WSDL2ApexTest): testTwoNamespaces a doesn't match, Async class expected:<...mple.com/stockquote.[wsdl', 'exampleComStockquoteWsdl', 'http://example.com/stockquote.xsd', 'exampleComStockquoteXsd]'};(..)
  testSqlMutations(com.salesforce.ide.wsdl2apex.core.WSDL2ApexTest): Test sqlMutations failed expected:<...lic class getMutants[CompressedResponse_element {(..)
  testMultipleNamespace(com.salesforce.ide.wsdl2apex.core.WSDL2ApexTest): Test testMultipleNamespace failed expected:<...   public class Echo[Date_element {(..)
  testLargeFile(com.salesforce.ide.wsdl2apex.core.WSDL2ApexTest): testLargeFile a doesn't match expected:<...m/spectrum/services/[EOLS_PSAPLookupUS', 'wwwPbComSpectrumServicesEolsPsaplo', 'http://spectrum.pb.com/', 'spectrumPbCom', 'http://www.mapinfo.com/midev/service/geometries/v1', 'wwwMapinfoComMidevServiceGeometries', 'http://www.mapinfo.com/midev/service/units/v1', 'wwwMapinfoComMidevServiceUnitsV1', 'http://www.pb.com/spectrum/services/', 'wwwPbComSpectrumServic]es'};(..)
  testSimple(com.salesforce.ide.wsdl2apex.core.WSDL2ApexTest): testSimple doesn't match expected:<...rmationByAirportCode[Response_element {(..)

Tests run: 47, Failures: 12, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.230 s
[INFO] Finished at: 2015-11-23T20:30:10-08:00
[INFO] Final Memory: 8M/245M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test) on project WSDL2Apex: There are test failures.

Requirements

  • Homebrew
  • git
  • Apache Maven
  • Java 1.6

We’ll use Homebrew to install git (to fetch the project), Apache Maven (to build the project), and Java 1.6 from Apple to meet the version requirements.

Homebrew, Git, and Maven

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install maven git

Clone WSDL2Apex

mkdir ~/SalesforceDev && cd ~/SalesforceDev
git clone https://github.com/forcedotcom/WSDL2Apex
cd WSDL2Apex

Java 1.6 for OS X

Visit the Apple support site to download and install Java 1.6 for OS X. It will be installed to your /Library/Java/JavaVirtualMachines/1.6.0.jdk/ directory.

Build WSDL2Apex

We need to set the JAVA_HOME directory to point to the 1.6 JDK so that Maven will use it for the build. To do this just set it before the actual mvn execution. If you have Java 1.7 on your machine, feel free to substitute it for 1.6 – just check your JavaVirtualMachines directory to see what’s available.

JAVA_HOME=/Library/Java/JavaVirtualMachines/j1.6.0.jdk/Contents/Home/ \
mvn install package

Bask in the glory that are your newly generated Apex SOAP classes.

The post Install WSDL2Apex on OS X El Capitan appeared first on Justin Silver.

]]>
https://www.justinsilver.com/technology/osx/install-wsdl2apex-on-os-x-el-capitan/feed/ 4
Loggly.com Logging with Salesforce.com Apex https://www.justinsilver.com/technology/salesforce/loggly-com-logging-salesforce-com-apex/?utm_source=rss&utm_medium=rss&utm_campaign=loggly-com-logging-salesforce-com-apex https://www.justinsilver.com/technology/salesforce/loggly-com-logging-salesforce-com-apex/#respond Fri, 14 Feb 2014 01:26:21 +0000 http://justin.ag/?p=3173 If you want to send log messages to Loggly.com you will need to implement their HTTP API interface. All that is required to send data to this interface is an HTTP POST to a...

The post Loggly.com Logging with Salesforce.com Apex appeared first on Justin Silver.

]]>
AmpedSense.OptimizeAdSpot('AP'); AmpedSense.OptimizeAdSpot('IL'); AmpedSense.OptimizeAdSpot('IR');

If you want to send log messages to Loggly.com you will need to implement their HTTP API interface. All that is required to send data to this interface is an HTTP POST to a url containing your API token with the log message in the body. Tags can be applied either in the URL after your token or using theĀ X-LOGGLY-TAG. Setting the Content-Type header is also required with value of text/plain.

Worth noting that you should keep your Apex Limits in mind in regards to number of callouts and possibly implement a different scheme depending on your volume. Don’t forget to add “https://logs-01.loggly.com” to your Salesforce.com>Setup>Security Controls>Remote Site Settings.

Apex Class LogglyService.cls

This class uses theĀ @future (callout=true) annotation to make an HTTP POST to Loggly.com

public abstract class LogglyService {

    // Use a future method to make a callout
    @future (callout=true)
    public static void log(String data, String[] tags) {
        // this should come from config somewhere
    	final String api_key = 'GET YOUR API KEY FROM SOMEWHERE';

        // objects to make the request
        HttpRequest request = new HttpRequest();
        HttpResponse response = new HttpResponse();
        Http http = new Http();

        // setup the request
        request.setEndpoint('https://logs-01.loggly.com/inputs/'+api_key);
        request.setMethod('POST');
        request.setHeader('Content-Type', 'text/plain');

        // add tags in the header
        request.setHeader('X-LOGGLY-TAG', String.join(tags, ','));

        // put the log message in the body
        request.setBody(data);

        try {
            // send the request to Loggly
            response = http.send(request);
        } catch(System.CalloutException e) {
            System.debug('Loggly error: ' + e);
        }

        System.debug(response.toString());
    }
}

Anonymous Apex Logging

Post a sample message to Loggly.com using this anonymous apex.

List<String> tags = new List<String>{'testTag'};
LogglyService.log('Test Log Message', tags);

The post Loggly.com Logging with Salesforce.com Apex appeared first on Justin Silver.

]]>
https://www.justinsilver.com/technology/salesforce/loggly-com-logging-salesforce-com-apex/feed/ 0