Praca programista Apex

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”.

SalesForce repository

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