• 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)等。

    控制台

  • 相关阅读:
    【VS开发】【C++开发】const在函数前与函数后的区别
    【VS开发】【C++开发】正确使用auto_ptr智能指针
    【VS开发】【C++开发】正确使用auto_ptr智能指针
    【数据库开发】Redis数据库设置密码
    【数据库开发】Redis数据库设置密码
    【数据库开发】Redis数据库服务器启动配置
    【数据库开发】Redis数据库服务器启动配置
    【数据库开发】windows下hiredis的编译(主要是包括一些异步编程的错误)
    【数据库开发】windows下hiredis的编译(主要是包括一些异步编程的错误)
    【VS开发】Windows平台下Makefile学习笔记
  • 原文地址:https://www.cnblogs.com/chengcheng0148/p/apex_introduction.html
Copyright © 2020-2023  润新知