Apex język programistyczny SalesForce
Apex Co to jest i do czego służy na platformie CRM SalesForce
Apex jest językiem programowania silnie typowanym, obiektowym. Pozwala developerom na wykonanie przepływu zadań w ramach platformy CRM w połączeniu z API Force .com.Apex posiada składnie do złudzenia przypominającą składnie Javy jednocześnie pozwalając na przechowywanie poszczególnych procedur w bazie danych. Dzięki Apex’owi programiści SalesForce mogą dodawać do wywołań systemowych logikę biznesową w tym symulację kliknięć przycisków, aktualizację rekordów itp.
Apex zapewnia wbudowaną obsługę wywołań platformy CRM:
- WSTAW, AKTUALIZUJ, i KASUJ
- Możliwość wykorzystania zadań w pętli
- Wykorzystanie języka SQL (dedykowany dla SalesForce SOQL) – zapytania pozwalają zwracać listę rekordów.
Apex dzięki podobieństwu do Javy i wykorzystaniu standardowych wywołań oraz składni:
- wyrażenia i zmienne,
- zdania warunkowe,
- pętle.
W przypadku gdy język tworzy nowe własne elementy, dzięki analogii do Javy pozwala je w sposób łatwy zrozumieć.
Dzięki dużym podobieństwom do Javy, nauka Apex dla programistów Java jest stosunkowa prosta, sama istota składni języka pozwala szybko go opanować i w krótkim czasie rozpocząć pracę nad rozwojem systemu CRM.
Najczęściej developerzy SalesForce do rozwoju projektów używają IDE Eclipse ale jest także dostępna dedykowana aplikacja pozwalająca na szybki dostęp do kodu - „Developer Console” noszące przedtem nazwę „System Log”.
Przykładowy kod programisty SalesForce - APEX
Apex Przykład #1
@isTest
private class MileageTrackerTestSuite {
static testMethod void runPositiveTestCases() {
Double totalMiles = 0;
final Double maxtotalMiles = 400;
final Double singletotalMiles = 200;
final Double u2Miles = 100;
//Set up user
User u1 = [SELECT Id FROM Users WHERE Alias='auser'];
//Run As U1
System.RunAs(u1){
System.debug('Inserting 200 miles... (single record validation)');
Mileage__c testMiles1 = new Mileage__c(Miles__c = 200, Date__c = System.today());
insert testMiles1;
//Validate single insert
for(Mileage__c m:[SELECT miles__c FROM Mileage__c
WHERE CreatedDate = TODAY
and CreatedById = :u1.id
and miles__c != null]) {
totalMiles += m.miles__c;
}
System.assertEquals(singletotalMiles, totalMiles);
//Bulk validation
totalMiles = 0;
System.debug('Inserting 200 mileage records... (bulk validation)');
List<Mileage__c> testMiles2 = new List<Mileage__c>();
for(integer i=0; i<200; i++) {
testMiles2.add( new Mileage__c(Miles__c = 1, Date__c = System.today()) );
}
insert testMiles2;
for(Mileage__c m:[SELECT miles__c FROM Mileage__c
WHERE CreatedDate = TODAY
and CreatedById = :u1.Id
and miles__c != null]) {
totalMiles += m.miles__c;
}
System.assertEquals(maxtotalMiles, totalMiles);
}//end RunAs(u1)
//Validate additional user:
totalMiles = 0;
//Setup RunAs
User u2 = [SELECT Id FROM Users WHERE Alias='tuser'];
System.RunAs(u2){
Mileage__c testMiles3 = new Mileage__c(Miles__c = 100, Date__c = System.today());
insert testMiles3;
for(Mileage__c m:[SELECT miles__c FROM Mileage__c
WHERE CreatedDate = TODAY
and CreatedById = :u2.Id
and miles__c != null]) {
totalMiles += m.miles__c;
}
//Validate
System.assertEquals(u2Miles, totalMiles);
} //System.RunAs(u2)
} // runPositiveTestCases()
static testMethod void runNegativeTestCases() {
User u3 = [SELECT Id FROM Users WHERE Alias='tuser'];
System.RunAs(u3){
System.debug('Inserting a record with 501 miles... (negative test case)');
Mileage__c testMiles3 = new Mileage__c( Miles__c = 501, Date__c = System.today() );
try {
insert testMiles3;
} catch (DmlException e) {
//Assert Error Message
System.assert( e.getMessage().contains('Insert failed. First exception on ' +
'row 0; first error: FIELD_CUSTOM_VALIDATION_EXCEPTION, ' +
'Mileage request exceeds daily limit(500): [Miles__c]'),
e.getMessage() );
//Assert field
System.assertEquals(Mileage__c.Miles__c, e.getDmlFields(0)[0]);
//Assert Status Code
System.assertEquals('FIELD_CUSTOM_VALIDATION_EXCEPTION' ,
e.getDmlStatusCode(0) );
} //catch
} //RunAs(u3)
} // runNegativeTestCases()
} // class MileageTrackerTestSuite