Oracle Application Express: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica |
m + sezione Note |
||
(40 versioni intermedie di 24 utenti non mostrate) | |||
Riga 1:
{{C|L'italiano risulta scorretto e pieno di anglicismi inutili|informatica|febbraio 2019}}
{{F|software|dicembre 2018}}
{{Software
== Descrizione ==▼
|Sviluppatore =
|UltimaVersione = 23.2
|DataUltimaVersione = Novembre 17, 2023
|SistemaOperativo =
|Genere =
}}
'''Oracle Application Express''' (APEX) è un [[framework]] sviluppato da [[Oracle Corporation|Oracle]], pensato per lo sviluppo di [[siti web]] data-oriented e basato sull'infrastruttura fornita dal [[Oracle Database|database Oracle]].
'''Salesforce APEX''' è tutto ciò che segue: un linguaggio [[programmazione orientata agli oggetti|OOP (programmazione orientata agli oggetti)]] molto simile a [[Java (linguaggio di programmazione)|Java]] per lo sviluppo rapido di [[Applicazione web|applicazioni web]].
▲== Descrizione ==
La tecnologia Apex in Salesforce è una tecnologia che consente il building di applicazioni web in modo davvero rapidissimo. Tale linguaggio e le [[Application programming interface|API]] sono fornite nativamente nel [[Customer relationship management|CRM]] [[Salesforce.com|Salesforce]] in piattaforma [[Platform as a service|PaaS]] (Platform as a Service) chiamata Force.com. La piattaforma Force.com è inclusa nell'org [[Salesforce.com|Salesforce]] e permette l'implementazione del codice Apex sia in un ambiente dev(di sviluppo) chiamato Develop Console incluso o separatamente in un [[Ambiente di sviluppo integrato|IDE]](Integrated Development Environment) come [[Eclipse (informatica)|Eclipse]], [[Visual Studio Code|Visual Studio code]] ed altri mediante l'aggiunta del [[Plugin (informatica)|plugin]] Force.com IDE.<ref>[https://developer.salesforce.com/docs/atlas.en-us.eclipse.meta/eclipse/ide_install.htm Force.com IDE]</ref> L'approccio di sviluppo è chiamato [[Rapid application development|RAD]](Rapid application Development) come per fare un paragone avviene con le pagine web costruite medianti le tecnologie [[Java EE|JAVA EE]], vedi [[Java Server Faces|jsf]] o [[JavaServer Pages|jsp]].
Il codice Apex è completamente memorizzato, compilato ed eseguito in [[Cloud computing|Cloud]] pertanto non necessita di alcuna risorsa in locale come [[framework]] ecc. Il codice viene eseguito in piattaforma Force.com o Lightning a seconda della tecnologia utilizzata. La sintassi dell'Apex è JAVA like tanto da considerarlo un derivato di [[Oracle Corporation|Oracle]] Java, anche se ci sono molte differenze e sicuramente a vantaggio dell'Apex oltre al completo uso in [[Cloud computing|Cloud]] abbiamo sicuramente un modo di performare il manage dei dati negli oggetti del Database sicuramente molto più efficiente di qualsiasi altra tecnologia grazie alle [[Application programming interface|API]] fornite dal linguaggio. In pratica il mappaggio dell'[[Object-relational mapping|ORM]] che con altre tecnologie è realizzabile per mezzo di [[framework]] come [[Hibernate]] ed [[eclipseLink]] per Java con svariate righe di codice di logica applicativa qui in Apex è pressoché immediato e realizzato con semplici statement come se le tabelle del database e gli oggetti gestiti dall'ambiente di sviluppo fossero già mappati.
== Caratteristiche ==▼
▲=== Caratteristiche ===
* completamente su cloud in quanto il codice viene salvato, compilato ed eseguito su server salesforce;
* supporto alla programmazione OOP con interfacce, classi ed ereditarietà;
Riga 19 ⟶ 29:
== Caratteristiche del linguaggio ==
* Blob: collezione di dati binari salvati in un solo oggetto. Puoi trasformare questo tipo a String e viceversa.
* Boolean: true o false valore su singolo bit che descrive una condizione booleana.
* Decimal: numero decimale con punto.
* Double: Numero con la virgola a 64 bit.
* Id: ogni insieme di caratteri di lunghezza 18, se la lunghezza è inferiore viene portato a 18.
* Integer: intero a 32 bit.
* Long: intero su 64 bit.
Riga 31 ⟶ 40:
* Object.
* String
* sObject.
=== Array ===
Il linguaggio ci mette a disposizione gli [[array]] che sono vettori contenenti elementi sia di tipo primitivo che oggetti ma ogni array rappresenta sempre un elenco di tipi omogenei.
Esempio come vediamo di seguito io posso dichiarare un array di stringhe e aggiungerne di nuove ma non posso aggiungergli un tipo diverso dal String.
<
String[] arrayString ; //dichiarazione
arrayString = new String[]();
//se invece conosco già la size il contenuto posso anche inizializzarlo in fase di instanziazione nel seguente modo.
arrayString = new String[4]{ 'guardate', 'come istanzio', 'questo array', 'di String'};
</syntaxhighlight>
per l'accesso in lettura o scrittura distruttiva poi basterà usare uno dei loop che più avanti vi mostrerò.
=== Classi ===
Ora andiamo a vedere un esempio per comprendere meglio i semplici concetti visti sopra:
<
//sintassi dichiarazione classe
public class myFirstClassApex {
Riga 59 ⟶ 68:
Integer idPearson = 123;
}
</syntaxhighlight>
=== Collections ===
Troviamo in Apex le collezioni di oggetti seguenti:
;List (collezione)
<
List<Integer> distance = new List<Integer>();
//operazioni basiche add, get, set, clear l’accesso avviene con indice...
</syntaxhighlight>
Esempio:
<
distance.add(100);
distance.get(0);
Riga 83 ⟶ 92:
// ordinamento
distance.sort();
</syntaxhighlight>
;Set (Collezione)
<
Set<Double> setdistance = new Set<Double>();
// non ammette duplicati, le operazioni sono add, remove ecc..
</syntaxhighlight>
Esempio:
<code>setdistance.add(20);</code>
<code>setdistance.add(200);</code>
<code>setdistance.add(100);</code>
<code>setdistance.remove(20);</code>
<code>setdistance.size();</code>
<code>setdistance.clear();</code>
<code>setdistance.contains(20);</code>
;Map (Collezione)
<
Map<Id,String> myMap = new Map<Id,String>();
// è una coppia chiave valore
</syntaxhighlight>
La mappa
<
Map<String,String> myMap = new Map<String,String>{"name"=>"Generoso", "Matter" => "Apex programming" }
</syntaxhighlight>
Le operazioni principali sono get e put come nel seguente esempio:
<
myMap.put('job', 'employee');
myMap.get('job');
</syntaxhighlight>
=== Costrutti condizionali ===
I costrutti decisionali sono:
<syntaxhighlight lang="java">
{if-else} , {switch}.
Riga 124 ⟶ 149:
lista ancora di actions;
}
</syntaxhighlight>
Ad esempio se mia moglie è incinta io voglio festeggiare altrimenti voglio solo bere latte:
<
// my_wife _state è una stringa.
if (my_wife_state == 'pregnant') {
Riga 138 ⟶ 163:
System.debug(word);
</syntaxhighlight>
=== Costrutti Iterativi ===
Riga 149 ⟶ 174:
Esempio for:
<
for (int counter = 0;
System.debug(distance.get(counter));
Riga 178 ⟶ 203:
}
while(counter < distance.size());
</syntaxhighlight>
Ricapitolando nel linguaggio Apex esistono le classi (I tipi), i trigger (una o più actions generate a seguito di un evento, ad esempio l’inserimento di un record e queste actions possono essere eseguite prima o dopo l’inserimento, un aggiornamento o una cancellazione, troviamo i tipi primitivi (Integer, Double ecc…), le interfacce, le classi sharing o without sharing.
=== I Triggers ===
Quando parliamo di trigger ci riferiamo ad uno script di codice Apex realizzabile in più modi da piattaforma
* before insert;
Riga 195 ⟶ 220:
Per gestire gli attributi dei record oggetto del trigger si usano delle variabili speciali chiamate di contesto, una delle quali è specificata nell'esempio dopo. Le variabili di contesto sono tutte in seguito:
* isBefore: restituisce un valore booleano pari a vero se il trigger esaminato scatta prima di un
* isAfter: restituisce vero se il trigger esaminato scatta dopo l'accurarsi di evento;
* isInsert: vero se è un inserimento di record.
* isUpdate: vero se aggiornamento di record;
* isDelete: vero se l'
* isUndelete: vero se
* isExecution: se il contesto di esecuzione è trigger e non per esempio web service;
* new: restituisce una List<recordName> e si usa solo per insert, update e undelete e i record restituiti possono solo essere modificati in before;
Riga 210 ⟶ 235:
Vediamolo ora da vicino in che modo esso viene scatenato.
<
// Codice trigger
trigger triggerNameIdentificator on recordType(before insert, after insert, before update, after update, before delete, after delete) {
Riga 219 ⟶ 244:
}
}
</syntaxhighlight>
Per definire variabili e costanti, abbiamo il contesto statico legato alla classe e molto altro.
== Salesforce Database ==
La Potenza di questo linguaggio risiede nella possibilità di compilare
* insert
* update
*upsert
* delete
* undelete
La gestione dei record nel database può avvenire o per mezzo del DML solo o mediante l'oggetto Database. Un semplicissimo esempio statement DML
<
Le query vengono performate per mezzo di due linguaggi di interrogazione il Salesforce Object Query Language(SOQL) e il Salesforce Object Search Language(
Per esempio le query Select per leggere nel database i campi della tabella persone è
<
// array di oggetti del tipo
</syntaxhighlight>
==Note==
<references/>
== Voci correlate ==
== Collegamenti esterni ==
* {{cita web|url=https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_intro.htm|titolo=Apex Developer Guide}}▼
▲* https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_intro.htm
▲* Salesforce: Einstein
{{Framework per applicazioni web}}
|