Apex簡介


Apex特點

Salesforce為開發者提供了Apex語言。它是一種語法上類似於Java的編程語言,有以下特點:

  • 面向對象
  • 完全在雲端處理,包括保存、編譯、執行
  • 強類型
  • 大小寫不敏感(這一點和其他大部分語言不一樣)

Apex的數據類型

Apex中的數據類型分為以下幾種:

  • 基本類型。比如整形(Integer),雙精度類型(Double),字符串類型(String),布爾值(Boolean),小數類型(Decimal),ID類型等
  • sObject類型。這是Salesforce特有的一種類型,系統中的對象都是繼承自sObject類型,比如Account(客戶)、Opportunity(機會),還包括各種自定義對象,它們的API名字都以“__c”結尾,比如“Example_Object__c”
  • 集合類型。包括了列表(List),集合(Set),地圖(Map)等
  • 枚舉類型

基本類型中要注意的地方

  • Boolean類型的值可以是true、false或null

  • Date(日期)和Datetime(日期時間)是兩種不同的類型。這兩個類型的變量必須使用系統提供的靜態方法來創建(比如:DateTime.newInstance())。Date類型的數學運算只限於增減Integer類型的值,Datetime類型的數學運算只限於增減Intger或Double類型的值。兩個或更多這些類型的變量之間無法直接進行數學運算,必須使用系統提供的Date或Datetime類的靜態方法

  • 在Salesforce中可以定義Currency(貨幣)類型的字段,這些字段中包含的值默認是Decimal(小數)類型

  • ID類型是Salesforce特有的一個基本類型,由18個大小寫不敏感的字符組成。ID類型也有包含15個字符的,這時其值是大小寫敏感的

  • String類型的值在Apex中只能使用單引號(')表示,不能使用雙引號("),比如:'Hello World!',而非:"Hello World!"

集合類型的初始化語法

// List類型
List<String> exampleList = new List<String>();
List<String> exampleList = new List<String> {'Hello', 'World'};
List<String> exampleList = new String[20];
String[] exampleList = new String[20];

// Set類型
Set<String> exampleSet = new Set<String>();
Set<String> exampleSet = new Set<String> {'Hello', 'World'};

// Map類型
Map<ID, Set<String>> exampleMap = new Map<ID, Set<String>>();
Map<String, String> MyStrings = new Map<String, String> {'a' => 'b', 'c' => 'd'.toUpperCase()};

列表類型List

List類型是最常用的一種集合類型,和數組等價,可以相互轉換。

用add()函數可以向列表中添加元素:

List<String> shapes = new List<String> { 'circle', 'rectangle', 'triangle' };

shapes.add('square');

從列表中讀取元素可以通過索引的方式,每個列表的索引都是從0開始。

讀取元素可以直接用方括號加索引,或者用get()函數加索引:

String shape1 = shapes[0];
String shape2 = shapes.get(1);

for(Integer i=0; i<shapes.size(); i++) {
    // 將內容輸出到控制台
    System.debug(shapes[i]);
}

集合類型要注意的部分

  • Set類型中每個元素必須唯一,所以Set類型的變量可以使用contains()函數來檢查是否包含某元素,比如:
Set<String> exampleSet = new Set<String> {'a', 'b'};
Boolean result1 = exampleSet.contains('a'); // result1為真
Boolean result2 = exampleSet.contains('c'); // result2為假
  • Map類型的鍵值(Key)可以是null值

  • 當向Map類型變量中增加值時,如果對應的鍵值已經存在,則新的值會覆蓋原有的值。比如:

Map<String, String> exampleMap = new Map<String, String> {'a' => 'b', 'c' => 'd'};

String result1 = exampleMap.get('a'); // result1的值為'b'

exampleMap.put('a', 'e');

String result2 = exampleMap.get('a'); // result2的值為'e'
  • 當Map類型的鍵值為String類型時,所有鍵值都是大小寫敏感的(這一點和Apex本身的特點不一樣)

常量定義

Apex中使用final關鍵字定義常量,比如:

public class ExampleClass {
    public static final Integer EXAMPLE_INT_CONST = 200;
}

類型轉換

Apex中默認是要求顯式類型轉換的,比如Integer類型不能直接轉換為String類型,而需要使用String類的format()函數。

但是有一些例外:

  • 對於Integer,Long,Double,Decimal四種數值類型,它們形成了一組由低到高的類型層次,所以低層次類型的變量可以自動賦值給高層次類型的變量,比如:
Integer i = 10;
Long l = i;
Double d = l;
Decimal decm = d;
  • ID類型可以使用String類型賦值。但是在運行時,系統會自動檢測String類型的值是否是合法的ID值,如果不是,則會拋出異常。比如:
String exampleString = 'abcde';
ID exampleId = exampleString; // 運行時會提示異常,因為字符串的值不是合法的ID類型的值
  • instanceOf()函數可以用來檢查一個字符串是否符合某對象的ID類型,比如:
String str = 'abcde';
Boolean result = str instanceOf Account; // 檢查字符串str的值是否代表了一個合法的Account對象的ID。這種情況下result的值為假

Apex的類(Class)

和大部分編程語言一樣,Apex中可以定義類。類的內部可以定義函數和變量,也可以通過public等關鍵字控制訪問權限。

public class Student { 
    public String name;
    private String studentNumber;

    public String showName() {
        return name;
    }

    public String getNumber() {
        return studentNumber;
    }

    private void setNumber(String num) {
        studentNumber = num;
    }
}

在Apex中,類和類中的方法默認都是private的。如果想讓它們變為公有,必須添加public關鍵字。

類的擴展

使用extends關鍵字可以擴展類,比如:

public class BaseClass {
    ...
}

public class ExtendedClass extends BaseClass {
    ...
}

共享關鍵字

在Apex中,每一個類都可以添加共享關鍵字,即“with sharing”和“without sharing”。

當加入了“with sharing”關鍵字后,在用戶執行該類的時候,系統會參照當前用戶的共享權限來決定代碼是否執行成功。如果用戶對於代碼中涉及到的對象、字段沒有權限,則該代碼會執行失敗。

匿名代碼段

一個例外的情況是當代碼在匿名代碼段(Anonymous Blocks)執行的時候,“with sharing”關鍵字不起作用。匿名代碼段可以通過以下方式執行:

  • Developer Console
  • executeAnonymous() SOAP API 方法
  • Force.com IDE

注意,執行匿名代碼段的用戶必須獲得“Apex作者(Author Apex)”的權限。

與此相反,“without sharing”關鍵字則聲明了當前用戶的共享權限對於該段代碼沒有作用。

嵌套類

共享關鍵字只會影響到當前的類,不會影響到嵌套類。它們可以獨立的聲明共享規則。比如:

public with sharing OuterClass {
    ...

    public without sharing InnerClass {
        ...
    }
}

在上面的代碼段中,外層類OuterClass和嵌套類InnerClass的共享設定是不同的,它們相互獨立。

Apex的邏輯語句

在Apex中也有着各種邏輯語句,比如“if...else”、“for”、“while”和“do...while”。

有一點要注意的是,截至本文的時間(Apex版本v41.0),在Apex中沒有“switch”語句。

Developer Console簡介

Salesforce中的Developer Console是默認的集成開發環境,用來進行Apex和數據庫的編程和操作。

在Salesforce中主界面點擊右上角的用戶名菜單,在下拉列表中點擊“Developer Console”。

進入Developer Console

建立新的Apex類

在Developer Console主界面,點擊“File”,指向“New”,在子菜單中選擇“Apex Class”。在彈出的對話框中輸入類名,即可建立新的Apex類。

建立新Apex類

在中間的編輯區域即可對類進行編輯。

編輯Apex類

控制台

界面下方的區域是控制台,可以查看日志(Log)、運行測試(Tests)、進行數據查詢(Query Editor)等。

控制台


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM