Oracle Application Express: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m + sezione Note |
|||
(15 versioni intermedie di 12 utenti non mostrate) | |||
Riga 1:
{{F|informatica|dicembre 2018}}▼
{{C|L'italiano risulta scorretto e pieno di anglicismi inutili|informatica|febbraio 2019}}
{{Software
'''Oracle Application Express''' (APEX) è un framework sviluppato da Oracle, pensato per lo sviluppo di siti web data-oriented e basato sull'infrastruttura fornita dal database Oracle.▼
|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 [[
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.
=== Caratteristiche ===
Riga 27 ⟶ 33:
* 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 37 ⟶ 43:
=== 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 62 ⟶ 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 86 ⟶ 92:
// ordinamento
distance.sort();
</syntaxhighlight>
;Set (Collezione)
<
Set<Double> setdistance = new Set<Double>();
// non ammette duplicati, le operazioni sono add, remove ecc..
</syntaxhighlight>
Esempio:
Riga 111 ⟶ 117:
<code>setdistance.contains(20);</code>
;Map (Collezione)
<
Map<Id,String> myMap = new Map<Id,String>();
// è una coppia chiave valore
</syntaxhighlight>
La mappa può essere inizializzata nel seguente modo:
<
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 143 ⟶ 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 157 ⟶ 163:
System.debug(word);
</syntaxhighlight>
=== Costrutti Iterativi ===
Riga 168 ⟶ 174:
Esempio for:
<
for (int counter = 0;
System.debug(distance.get(counter));
Riga 197 ⟶ 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 214 ⟶ 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 229 ⟶ 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 238 ⟶ 244:
}
}
</syntaxhighlight>
Per definire variabili e costanti, abbiamo il contesto statico legato alla classe e molto altro.
Riga 253 ⟶ 259:
La gestione dei record nel database può avvenire o per mezzo del DML solo o mediante l'oggetto Database. Un semplicissimo esempio statement DML lanciato senza l'uso dell'oggetto database è il seguente:
<
Le query vengono performate per mezzo di due linguaggi di interrogazione il Salesforce Object Query Language(SOQL) e il Salesforce Object Search Language(SOSL). Le differenze sostanziali sono che il primo è usato per query su un solo tipo di tabella e non ammette interrogazioni troppo complesse come la join ma è più usato mentre il secondo è usato per recuperare dati da più record contemporaneamente e supera le limitazioni dell'altro quando non si ha certezza sui campi da recuperare e i dati sono più tabelle. Con SOQL le command sono un sottoinsieme dell'SQL ma performate per sole SELECT di lettura che non ammette il simbolo jolly '*' mentre inserimenti, aggiornamenti e cancellazioni vengono realizzati solo pe rmezzo di DML puro. In SOSL le query sono delle FIND che si scostano dalla sintassi SQL e usate per il retrieve(recupero) di dati da più tabelle in contemporaneo.
Riga 259 ⟶ 265:
Per esempio le query Select per leggere nel database i campi della tabella persone è così:
<
// array di oggetti del tipo
</syntaxhighlight>
==Note==
<references/>
== Voci correlate ==
* [[Salesforce.com]]
|