What is Apex in Salesforce?
Apex é uma linguagem de programação orientada a objetos e fortemente tipada desenvolvida pela Salesforce para a construção de Software como um serviço (SaaS) e gerenciamento de Relacionamento com clientes (CRM). Apex ajuda desenvolvedores a criar aplicativos SaaS de terceiros e adicionar lógica de negócios aos eventos do sistema, fornecendo suporte de banco de dados back-end e interfaces cliente-servidor.,
Apex ajuda os desenvolvedores a adicionar lógica de negócios aos eventos do sistema, como cliques de botões, atualizações de registros relacionadas, e páginas do Visualforce. Apex tem uma sintaxe similar a Java.
neste tutorial inicial do Salesforce Apex, irá aprender as bases do Apex como –
- O que é o Apex?,ge
- Quando o Desenvolvedor Deve Escolher Apex
- Estrutura de Trabalho Da Apex
- Apex Sintaxe
- Apex Ambiente de Desenvolvimento
- Tipo de Dados no Ápice
- Apex Especificador de Acesso
- Palavras-chave no Ápice
- Apex String
- Apex Governador Limites
- Apex Getter e Setter
- Apex Classe
- Apex Trigger
- Lote de Classe no Ápice
Características do Apex Linguagem de Programação
Aqui são as características importantes do Salesforce Apex:
- Apex é sensível a maiúsculas e minúsculas idioma.,
- Pode efectuar operações DML como inserir, actualizar, UPSERT, apagar nos registos sObject usando o apex.
- Pode consultar os registos do sObject usando o SOQL(Salesforce object query language) e o SOSL (salesforce object search language) no apex.
- Permite-lhe criar um teste de unidade e executá-los para verificar a cobertura de código e a eficiência do código no apex.
- Apex executa em um ambiente multi-inquilino, e a Salesforce definiu alguns limites de governador que impedem um usuário de controlar os recursos compartilhados., Qualquer código que cruza o limite do governador da salesforce falha, um erro aparece.
- objeto Salesforce pode ser usado como um tipo de dados no apex. For example –
Account acc = new Account();
,here Account is a standard salesforce object.
- Apex atualiza automaticamente todas as versões da Salesforce.
quando o programador deve escolher o código Apex
Apex só deve ser escrito se um cenário de Negócio for demasiado complexo e não puder ser implementado usando a funcionalidade pré-construída fornecida pela Salesforce.,
a seguir estão os poucos cenários onde precisamos escrever código apex:
- para criar serviços web que integram a Salesforce com outras aplicações.
- para implementar validação personalizada em sobjets.
- para executar uma lógica Apex personalizada quando uma operação DML é realizada.
- para implementar funcionalidades que não podem ser implementadas usando fluxos de trabalho existentes e funcionalidade de construtores de processos.
- para configurar os Serviços de E-mail, você precisa incluir o processamento do conteúdo, cabeçalhos e anexos de E-mail usando o código apex.,
Estrutura de Trabalho Da Apex
Agora, neste Apex tutorial, vamos aprender sobre a estrutura de trabalho da Apex:
a Seguir está o fluxo de ações para um vértice código:
- Desenvolvedor de Ação: Todas as apex código escrito por um programador é compilado em um conjunto de instruções que podem ser entendidas pela apex tempo de execução do intérprete, quando o desenvolvedor salva o código para a plataforma e a estas instruções, em seguida, salvar como metadados para a plataforma.,
- Acção do utilizador final: quando o evento do utilizador executa um código apex, o servidor de plataforma obtém as instruções compiladas dos meta-dados e executa-as através do interpretador apex antes de devolver o resultado.
Apex Sintaxe
Declaração de variável:
Como o apex é fortemente tipada idioma, é obrigatório declarar uma variável com o tipo de dados no apex.,
por exemplo
contact con = new contact();
Aqui a variável con é declarada com contacto como um tipo de dados.
SOQL Query:
SOQL significa Salesforce object query language. O SOQL é usado para obter os registos sObject da Base de dados Salesforce. For example –
Account acc = ;
the above query fetches account record from salesforce database.
Loop Statement:
Loop statement is used to iterate over the records in a list. O número de iterações é igual ao número de registros na lista., Por exemplo:
no excerto de código acima, listOfAccounts é uma variável do tipo de dados da lista.
Declaração de controlo de fluxo:
declaração de controlo de fluxo é benéfica quando se pretende executar algumas linhas do código com base em algumas condições.
Por exemplo:
o excerto de código acima é pesquisar registos de contas da base de dados e verificar o tamanho da lista.
declaração DML:
DML significa Linguagem de manipulação de dados. As declarações DML são usadas para manipular dados na Base de dados Salesforce., Por exemplo,
Account acc = new Account(Name = ‘ Test Account’);Insert acc; //DML statement to create account record.
Apex Ambiente de Desenvolvimento
Agora, neste Apex programação tutorial, vamos aprender sobre a Apex Ambiente de Desenvolvimento:
Apex código pode ser desenvolvido na área de segurança e developer edition do Salesforce.
é uma boa prática para desenvolver o código no ambiente sandbox e, em seguida, implantá-lo para o ambiente de produção.
Apex code development tools: Following are the three tools available to develop apex code in all editions of Salesforce.,
- Force.com Console do Desenvolvedor
- Force.com IDE
- Editor de Código no Salesforce Usuário InterfaceYou
Tipo de Dados no Ápice
a Seguir estão os tipos de dados suportados pela apex:
Primitiva:
Integer, Double, Longa, Data, Data e Hora, String, ID, e Booleanos são considerados como tipos de dados primitivos.Todos os tipos de dados primitivos são passados por valor, não por referência.,
coleções:
três tipos de coleção estão disponíveis na lista Apex
- : É uma coleção ordenada de primitivos, sobjetos, coleções ou objetos Apex baseados em índices.
- Conjunto: uma colecção não ordenada de primitivos únicos.
- Map: é uma coleção de chaves únicas e primitivas que mapeiam para valores únicos que podem ser primitivos, sobjetos, coleções ou objetos Apex.
sObject:
Este é um tipo de dados especial na Salesforce. É semelhante a uma tabela em SQL e contém campos que são semelhantes às colunas em SQL.,
Enum
Enum é um tipo de dados abstrato que armazena um valor de um conjunto finito de identificadores
Classes
Objetos :
refere-se a qualquer tipo de dados que é suportado no Apex.
Interfaces
Apex Especificador de Acesso
a Seguir está o especificador de acesso apoiados pela apex:
Público:
Este especificador de acesso permite o acesso a uma classe, método, a variável a ser utilizada por um vértice dentro de um espaço de nomes.,
Private:
This access specifier gives access to a class, method, variable to be used locally or within the section of code, it is defined. Toda a técnica, variáveis que não têm nenhum especificador de acesso definido têm o especificador de acesso padrão do private.
protegido:
Este especificador de acesso dá acesso a um método, variável a ser usada por qualquer classe interna dentro da definição de classe Apex.,
Global:
Este especificador de acesso dá acesso a uma classe, método, variável a ser usada por um ápice dentro de um espaço de nomes, bem como fora do espaço de nomes. É uma boa prática não usar palavra-chave global até que seja necessário.
palavras-chave em Apex
com partilha:
Se uma classe é definida com esta palavra-chave, então todas as regras de partilha se aplicam ao utilizador actual e se esta palavra-chave estiver ausente, então o código executa no contexto do sistema.,
Por exemplo:
public with sharing class MyApexClass{// sharing rules enforced when code in this class execute}
Sem partilha:
Se uma classe é definida com esta palavra-chave, então todas as regras de partilha se aplicam ao utilizador actual não são aplicadas.
Por Exemplo:
public without sharing class MyApexClass{// sharing rules is not enforced when code in this class execute}
Estática:
Uma variável, o Método é definido com a palavra-chave estática é inicializada uma vez e associado com a classe. Variáveis estáticas, métodos podem ser chamados diretamente pelo nome da classe sem criar a instância de uma classe.
Final:
a constant, Method is defined with the final keyword can’t be overridden., Por exemplo:
public class myCls {static final Integer INT_CONST = 10;}
Se você tentar sobrepor o valor para esta variável INT_CONST, então você terá um sistema de exceção.Conclusão: a variável Final já foi inicializada.
Return:
Esta palavra-chave devolve um valor de um método. Por exemplo:
public String getName() {return 'Test' ;}
Null:
define uma constante nula e pode ser atribuída a uma variável. Por exemplo
Boolean b = null;
Virtual:
Se uma classe é definida com uma palavra-chave virtual, ela pode ser estendida e substituída.,
Abstract:
If a class is defined with abstract keyword, it must contain at least one method with keyword abstract, and that method should only have a signature.
Por exemplo:
public abstract class MyAbstrtactClass {abstract Integer myAbstractMethod1();}
cadeia Apex
uma cadeia é um conjunto de caracteres sem limites de caracteres. Por exemplo:
String name = 'Test';
Existem vários métodos in-built fornecidos pela classe String na salesforce., A seguir estão as poucas funções usadas frequentemente e na sua maioria:
abreviatura (maxWidth):
este método trunca uma cadeia de caracteres para o comprimento especificado e devolve-a se o comprimento da cadeia de caracteres indicada for maior, em seguida, o comprimento especificado; caso contrário, devolve a cadeia de caracteres original. Se o valor da variável maxWidth for inferior a 4, este método devolve um sistema de exceção em tempo de execução.Stringexcepção: a largura mínima da abreviatura é 4
Por exemplo:
String s = 'Hello World';String s2 = s.abbreviate(8);System.debug('s2'+s2); //Hello...
capitalize ():
este método converte a primeira letra de um texto para o caso do título e devolve-o.,
Por exemplo:
String s = 'hello;String s2 = s.capitalize();System.assertEquals('Hello', s2);
contém(substring):
Este método retorna true se a String de chamar o método contém a subcadeia de caracteres especificado.
String name1 = 'test1';String name2 = 'test2';Boolean flag = name.contains(name2);System.debug('flag::',+flag); //true
é igual(stringOrId):
este método devolve verdadeiro se o parâmetro passado não for nulo e indicar a mesma sequência binária de caracteres que a cadeia que chama o método.
ao comparar os valores de Id, o comprimento do ID pode não ser igual., Por exemplo: se uma string que representa 15 caracteres id é comparada com um objeto que representa 18 caracteres ID este método retorna verdadeiro. Por exemplo:
no exemplo acima é igual a método é comparar 15 caracteres objeto Id a 18 caracteres objeto ID e se ambos representam a mesma sequência binária, ele retornará verdadeiro.
Use este método para fazer comparações com distinção de maiúsculas.
escapeSingleQuotes (stringToEscape):
este método adiciona um carácter de escape ( \ ) antes de qualquer citação única num texto e devolve-o., Este método previne a injecção de SOQL ao criar uma consulta dinâmica de SOQL. Este método garante que todas as aspas simples são consideradas como cadeias de caracteres, em vez de comandos de banco de dados.
Por exemplo:
String s = 'Hello Tom';system.debug(s); // Outputs 'Hello Tom'String escapedStr = String.escapeSingleQuotes(s);// Outputs \'Hello Tom\'
remove(substring):
este método remove toda a ocorrência da substring mencionada da cadeia que chama o método e devolve a cadeia resultante.,
Por exemplo:
String s1 = 'Salesforce and force.com';String s2 = s1.remove('force');System.debug( 's2'+ s2);// 'Sales and .com'
substring(startIndex):
este método devolve um substring que começa a partir do carácter no startIndex estende-se até à última da cadeia de caracteres.
Por exemplo:
String s1 = 'hamburger';String s2 = s1.substring(3);System.debug('s2'+s2); //burger
reverse ():
este método inverte todos os caracteres de uma cadeia de caracteres e devolve-a. Por exemplo:
String s = 'Hello';String s2 = s.reverse();System.debug('s2::::'+s2);// olleH // Hello
trim(): este método remove todos os espaços brancos iniciais de um texto e devolve-o.
value of(toConvert):
este método devolve a representação em cadeia do objecto passado.,
Apex Governador Limites
Apex governador limites são os limites exigidos pela apex mecanismo de tempo de execução para garantir que qualquer pista apex código e processos de não controlar os recursos compartilhados e não violam o processamento para outros usuários no ambiente multi. Estes limites são verificados em cada transação apex., A seguir estão o governador limites definidos pela salesforce em cada vértice de transação:
Descrição | Limite |
consultas SOQL que pode ser feito em uma transação síncrona | 100 |
consultas SOQL que pode ser feito em uma transação Assíncrona | 200 |
Registros que podem ser recuperadas por uma consulta SOQL | 50000 |
Registros que podem ser recuperados do Banco de dados.,getQueryLocator | 10000 |
SOSL consultas que podem ser feitas em um vértice de transação | 20 |
Registros que podem ser obtidos por um SOSL consulta | 2000 |
instruções DML que pode ser feito em um vértice de transação | 150 |
Registros que podem ser processados como um resultado de uma instrução DML, Aprovação.processo ou Base de dados.emptyRecycleBin | 10000 |
Chamadas que podem ser feitas em um vértice de transação., | 100 |
limite cumulativo de tempo limite em todos os callouts que estão sendo realizados em uma transação apex | |
limite em trabalhos apex que podem ser adicionados à fila com o sistema.,enqueueJob | 50 |
Execution time limit for each Apex transaction | 10 minutes |
Limit on characters that can be used in an apex class and trigger | 1 million |
CPU time limit for synchronous transaction | 10,000 milliseconds |
CPU time limit for asynchronous transaction | 60,000 milliseconds |
Apex Getter and Setter
Apex property is similar to apex variable. Getter and setter are necessary to an apex property., Getter e setter podem ser usados para executar código antes que o valor da propriedade seja acessado ou alterado. O código no processador get executa quando um valor de propriedade é lido. O código no acessor set é executado quando um valor de propriedade é alterado. Qualquer propriedade que tenha obtido o accessor é considerada apenas de leitura, qualquer propriedade que tenha definido o accessor é considerada para escrever apenas qualquer propriedade que tenha tanto o get como o set accessor é considerado como de leitura-escrita. Sintaxe de uma propriedade apex:
public class myApexClass {// Property declarationaccess_modifierreturn_typeproperty_name {get {//code }set{//code}}
Aqui, access_modifier é o modificador de acesso da propriedade. return_type é o tipo de dados da propriedade., property_name é o nome da propriedade.
abaixo está um exemplo de uma propriedade apex que tem tanto acesso get Como set.
public class myApex{public String name{get{ return name;}set{ name = 'Test';}}}
Aqui, o nome da propriedade é nome, e é propriedade pública, e está retornando um tipo de string dataType.
não é obrigatório ter algum código no bloco get e set. Estes blocos podem ser deixados em branco para definir uma propriedade automática. Por exemplo:
public double MyReadWriteProp{ get; set; }
Get and set accessor can also be defined with their access modifier., Se um acessor é definido com um modificador, então ele substitui o modificador de Acesso para a propriedade. Por exemplo:
public String name{private get; set;}// name is private for read and public to write.
classe Apex
uma classe apex é um modelo ou modelo a partir do qual os objetos são criados. Um objeto é a instância de uma classe.
Existem três formas de criar classes apex na Salesforce:
Consola de Desenvolvimento
Force.com IDE
Apex class detail page.
no apex, você pode definir uma classe externa também chamada classe de alto nível, e você também pode definir classes dentro de uma classe externa chamada classes internas.,
é obrigatório usar modificador de acesso como global ou público na declaração da classe exterior.
não é necessário usar modificador de acesso na declaração de classes internas.
uma classe apex é definida usando a palavra-chave de classe seguida pelo nome da classe.
Extends keyword is used to extend an existing class by an apex class, and implements keyword is used to implement an interface by an apex class.
A Apex da Salesforce não suporta múltiplas heranças, uma classe apex só pode estender uma classe apex existente, mas pode implementar várias interfaces.,
uma classe apex pode conter um construtor definido pelo utilizador, e se um construtor definido pelo Utilizador não estiver disponível, é usado um construtor predefinido. O código em um construtor executa quando uma instância de uma classe é criada.
sintaxe do exemplo da classe Apex:
public class myApexClass{// variable declaration//constructorpublic myApexClass{}//methods declaration}
a nova palavra-chave é usada para criar uma instância de uma classe apex. Abaixo está a sintaxe para criar uma instância de uma classe apex.
myApexClass obj = new myApexClass();
Apex triggers
Apex triggers permitem-lhe executar Apex personalizados antes e depois de uma operação DML ser realizada.,
suporte Apex seguindo dois tipos de gatilhos:
Antes de gatilhos: estes gatilhos são usados para validar e atualizar o valor do campo antes do registo gravar na base de dados.
Depois dos gatilhos: estes gatilhos são usados para aceder aos campos(ID de Registo, campo LastModifiedDate) definidos pelo sistema após um registo enviado à base de dados. Estes campos podem ser usados para modificar outros registros. Registos que atiram depois de disparados são apenas para leitura.
é uma boa prática escrever gatilhos volumosos. Um gatilho volumoso pode processar um único registro, bem como vários registros de cada vez.,
sintaxe de um trigger apex:
trigger TriggerName on ObjectName (trigger_events) {//Code_block }
Aqui, TriggerName é o nome do trigger, ObjectName é o nome do objeto no qual o trigger a ser escrito, trigger_ events é a lista de eventos separados por vírgulas.
a seguir estão os eventos suportados pelos gatilhos da apex: antes de inserir, antes da atualização, antes de apagar, após inserir, após uma atualização, depois de excluir, depois de undelete.
palavras-chave estáticas não podem ser usadas num gatilho de topo. Todas as palavras-chave aplicáveis às classes internas podem ser usadas em um gatilho Apex.,
existem variáveis implícitas definidas por cada gatilho que devolve o contexto do tempo de execução. Estas variáveis são definidas no sistema. Classe de gatilho. Estas variáveis são chamadas variáveis de contexto. Por baixo da imagem, mostra a variável de contexto suportada pela aplicação apex.
a Seguir está a consideração da variável de contexto no ápice trigger:
- não use o gatilho.novo e gatilho.antigo nas operações DML.gatilho.o novo não pode ser apagado.,gatilho.o novo É só para leitura. gatilho.o novo pode ser usado para alterar os valores dos Campos no mesmo objeto antes do trigger apenas.
abaixo screenshots listam as considerações sobre acções específicas em diferentes eventos trigger.
Lote de Classe no Ápice
Lote de classe no salesforce é usado para processar um grande número de registros que exceder o ápice governador limites se processado normalmente. A classe em lote executa o código de forma assíncrona.,
a seguir estão as vantagens da classe do lote:
- classe do lote processar os dados em blocos e se um bloco não processar com sucesso, todos os blocos processados com sucesso não retrocedem.cada pedaço de dados de uma classe de lote processado com um novo conjunto de limites de governador que garantem que o código executa dentro dos limites de execução do Governador.base de dados. A interface “Batchable” deve ser implementada através de uma classe apex a ser usada como uma classe de lote. Ele fornece três métodos que devem ser implementados pela classe de lote.,
a seguir estão os três métodos fornecidos pela base de dados. Interface Batchable:
1.start ():
este método gera o escopo de registros ou objetos a serem processados pelo método de interface executar. Durante a execução do lote, ele é chamado apenas uma vez. Este método devolve uma base de dados.Objecto QueryLocator ou iterável. O número de registros recuperados pela consulta SQL usando o banco de dados.Objeto QueryLocator é de 50 milhões de registros, mas usando um iterável, o número total de registros que podem ser recuperados pela consulta SQL é de 50000 apenas., Iterable é usado para gerar escopo complexo para a classe de lote.
sintaxe do método inicial:
global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContextbc) {}
2.execute ():
este método é usado para o processamento de cada pedaço de dados. Para cada pedaço de registros executar método é chamado. O tamanho padrão do lote para a execução é de 200 registros. O método Execute leva dois argumentos:
uma referência à base de dados.Objeto de texto BatchableContext,
a list of sObjects, such as List<sObject>, or a list of parameterized types., Sintaxe do método de execução:
global void execute(Database.BatchableContext BC, list<P>){}
3.acabamento():
o método de acabamento é chamado uma vez durante a execução da classe de lote. As operações de pós-processamento podem ser realizadas no método de acabamento. Por exemplo: enviar o e-mail de confirmação. Este método é chamado quando todo o lote é processado. Sintaxe do método de acabamento:
global void finish(Database.BatchableContext BC){}
base de dados.Objeto de texto BatchableContext:
cada método da Base de dados. A interface Batchable tem uma referência à base de dados.Objecto BatchableContext.
Este objecto é usado para acompanhar o progresso da tarefa em lote.,
a seguir estão os métodos de instância fornecidos pelo texto de BatchableContext:
- getChildJobId(): este método devolve o ID de uma tarefa em lote que é actualmente processada.
- getJobId (): este método devolve o ID da tarefa em lote.
abaixo está a sintaxe de uma classe de lote:
base de dados.método de execução:
base de dados.o método executeBatch é usado para executar uma classe de lote.
Este método toma dois parâmetros: instância da classe de lote a ser processado, parâmetro de opções para especificar o tamanho do lote, se não especificado ele leva o tamanho padrão de 200.,
sintaxe da Base de dados.executeBatch:
Database.executeBatch(myBatchObject,scope)
executando um nome de classe em lote MyBatchClass :
MyBatchClassmyBatchObject = new MyBatchClass(); Id batchId = Database.executeBatch(myBatchObject,100);
base de dados.stateful:
Batch class is stateless by default. Cada vez que o método de execução é chamado de uma nova cópia de um objeto é recebido, todas as variáveis da classe são inicializadas. base de dados.stateful é implementado para fazer uma classe batch stateful.
Se a sua classe de lote implementou a base de dados, interface de Estado todas as variáveis de instância mantêm os seus valores, mas as variáveis estáticas são reinicializadas entre a transacção.,
Resumo:
- Apex é fortemente tipada orientada a objetos linguagem de programação que compila e executa em force.com plataforma
- Apex linguagem de programação é sensível a maiúsculas e minúsculas idioma
- Dois tipos de fluxo de ações em Apex são: 1) Desenvolvedor de ação 2) ação do usuário Final
- Apex ajuda você a criar serviços da web que integram o Salesforce com outras aplicações.
- Datatypes suportados pela apex são: 1).,todos, Private, Protected e Global estão de suporte especificado pela Apex
- Palavras-chave a utilizar no Apex são : 1) Com a Partilha, 2), Sem o partilhar, 3) Estática, 4) Final 5)o Retorno, 6)Null, 7) Virtual, 8) Resumo
- Uma string é um conjunto de caracteres sem limites de caracteres
- Apex governador limites são os limites exigidos pela apex mecanismo de tempo de execução para garantir que qualquer pista apex código e processos
- Getter e setter pode ser usado para executar código antes de o valor da propriedade é acessado ou alterado
- Existem três formas de criação de classes do apex no Salesforce: 1)Console do Desenvolvedor 2)Força.,com IDE e, 3) Apex class detail page.os gatilhos da Apex permitem-lhe executar uma apex personalizada antes e depois de uma operação DML ser realizada.a classe de lote da salesforce é usada para processar um grande número de registros que excederiam os limites do regulador apex se processados normalmente.