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 =
L''''Oracle Application Express''' (APEX) è 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]].Il software consente lo sviluppo veloce di applicazioni web come dice il nome, il quale combina la parola della casa che lo ha reso noto, la [[Oracle Corporation|Oracle]] e il suo evidente sviluppo [[Rapid application development|RAD]] ancora maggiore in termini di velocità di sviluppo rispetto a [[Java Server Faces|jsf]] del [[Java (linguaggio di programmazione)|Java]]. Esso permette uno sviluppo rapidissimo completamente su [[Cloud computing|cloud]] su piattaforma Lightning di [[Salesforce.com|Salesforce]], rendendo per lo sviluppatore molto più semplice l'attuazione del mappaggio tra oggetti e tabelle per mezzo di tecnologia [[Object-relational mapping|ORM]].
|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]].
Il codice Apex può essere inizializzato con una richiesta web service request e [[Trigger (basi di dati)|triggers]] su Object e il suo ambiente in cui viene integrato è il [[Salesforce.com|CRM Salesforce]].{{Chiarire}} Nel [[Customer relationship management|CRM]] di Sales Force è usato questo linguaggio per lo sviluppo facile di applicazioni web utili a persone come gli uomini di affari che necessitano di un [[Front-end e back-end|backend]] per il management dei loro clienti. Ipotizzando che un utente non tecnico voglia scrivere in Apex una interfaccia web di gestionale, è possibile usare l’account sales force e dopo essersi loggati, usare la funzionalità Develop Console. Se invece si vuole usare [[Eclipse (informatica)|Eclipse]] è possibile aggiungere il plugin "Force.com IDE" e accedere col proprio account per scrivere il codice dell’app e farne il [[Deployment|deploy]] su Sales Force.
 
== 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.
 
<sourcesyntaxhighlight lang=java>
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>
</source >
 
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:
 
<sourcesyntaxhighlight lang=java>
//sintassi dichiarazione classe
public class myFirstClassApex {
Riga 59 ⟶ 68:
Integer idPearson = 123;
}
</syntaxhighlight>
</source>
 
=== Collections ===
Troviamo in Apex le collezioni di oggetti seguenti:
 
;List (collezione)
 
<sourcesyntaxhighlight lang=java>
List<Integer> distance = new List<Integer>();
//operazioni basiche add, get, set, clear l’accesso avviene con indice...
</syntaxhighlight>
</source>
 
Esempio:
 
<sourcesyntaxhighlight lang=java>
distance.add(100);
distance.get(0);
Riga 83 ⟶ 92:
// ordinamento
distance.sort();
</syntaxhighlight>
</source>
 
;Set (Collezione)
 
<sourcesyntaxhighlight lang=java>
Set<Double> setdistance = new Set<Double>();
// non ammette duplicati, le operazioni sono add, remove ecc..
</syntaxhighlight>
</source>
 
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)
 
<sourcesyntaxhighlight lang=java>
Map<Id,String> myMap = new Map<Id,String>();
// è una coppia chiave valore
</syntaxhighlight>
</source>
 
La mappa puopuò essere inizializzata nel seguente modo:
 
<sourcesyntaxhighlight lang=java>
Map<String,String> myMap = new Map<String,String>{"name"=>"Generoso", "Matter" => "Apex programming" }
</syntaxhighlight>
</source>
 
Le operazioni principali sono get e put come nel seguente esempio:
 
<sourcesyntaxhighlight lang=java>
myMap.put('job', 'employee');
myMap.get('job');
</syntaxhighlight>
</source>
 
=== Costrutti condizionali ===
I costrutti decisionali sono:
 
<syntaxhighlight lang="java">
<source>
{if-else} , {switch}.
 
Riga 124 ⟶ 149:
lista ancora di actions;
}
</syntaxhighlight>
</source>
 
Ad esempio se mia moglie è incinta io voglio festeggiare altrimenti voglio solo bere latte:
 
<sourcesyntaxhighlight lang=java>
// my_wife _state è una stringa.
if (my_wife_state == 'pregnant') {
Riga 138 ⟶ 163:
 
System.debug(word);
</syntaxhighlight>
</source>
 
=== Costrutti Iterativi ===
Riga 149 ⟶ 174:
Esempio for:
 
<sourcesyntaxhighlight lang="java">
for (int counter = 0; coutercounter < distance.size(); counter++)
System.debug(distance.get(counter));
 
Riga 178 ⟶ 203:
}
while(counter < distance.size());
</syntaxhighlight>
</source>
 
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 SalesForceSalesforce il quale abilita l'utente ad eseguire delle Actions castomizzatecustomizzate prima o dopo il verificarsi di eventi, lo script è autonomo e la parola richiama senza ombra di dubbio i trigger usati nei database(concetto analogo). Gli eventi che possono scatenare il trigger sono i parametri del trigger stesso e sono elencati di seguito:
 
* 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 ventoevento, falso altrimenti;
* 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'eventevento è ununa deletecancellazione di record;
* isUndelete: vero se undeletel'evento è un ripristino di record cancellati;
* 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.
 
<sourcesyntaxhighlight lang=java>
// Codice trigger
trigger triggerNameIdentificator on recordType(before insert, after insert, before update, after update, before delete, after delete) {
Riga 219 ⟶ 244:
}
}
</syntaxhighlight>
</source>
 
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 , salvare e eseguire tutto on cloud su server Salesforce in piattaforma Lightning , esso quindi non richiede spazio in memoria ne installazioni di software oltre al grande beneficio che permette la costruzione di applicazioni con connessione nativa al database [[Oracle Database|Oracle]] che si concretizza con invocazione diretta di script SOQL o SOSL. Ogni interrogazione e modifica del modello dati avviene per mezzo di un linguaggio [[Data Manipulation Language|DML(Data Manipulation Language)]] i cui statement sono i seguenti:
 
* 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 performatolanciato senza l'uso dell'oggetto database è il seguente:
 
<sourcesyntaxhighlight lang=java>insert new Account(Name='accountName');</sourcesyntaxhighlight>
 
Le query vengono performate per mezzo di due linguaggi di interrogazione il Salesforce Object Query Language(SOQL) e il Salesforce Object Search Language(LanguageSOSL). Le differenze sostanziali sono che il primo è usato per query su un solo tipo di tabella e non ammette interrogazioni troppo complesse mcome èla iljoin 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 keywordcommand sono un sottoinsieme dell'SQL ma performate per sole SELECT di lettura che non ammette il simbolo jolly '*' mentre inserimenti, aggiornamenti e cancellazioni vengono performatirealizzati 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ù tabellatabelle in contemporaneo.
 
Per esempio le query Select per leggere nel database i campi della tabella persone è cosicosì:
 
<sourcesyntaxhighlight lang="java">
pearsonperson[] pearsonspersons = [SELECT * FROM pearsonperson];
// array di oggetti del tipo pearsonperson.
</syntaxhighlight>
</source>
==Note==
<references/>
== Voci correlate ==
* [[Salesforce: Einstein.com]]
 
== Collegamenti esterni ==
* {{cita web|url=https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_intro.htm|titolo=Apex Developer Guide}}
 
* https://resources.docs.salesforce.com/206/latest/en-us/sfdc/pdf/basics.pdf
* http://resources.docs.salesforce.com/202/9/en-us/sfdc/pdf/basics.pdf
* https://www.salesforce.com/company/careers/candidate-resources/study-guide/
* https://resources.docs.salesforce.com/210/latest/en-us/sfdc/pdf/salesforce_knowledge_implementation_guide.pdf
* https://developer.salesforce.com/docs/atlas.en-us.securityImplGuide.meta/securityImplGuide/salesforce_security_guide.htm
* Trailhead di sales force al seguente link: https://trailhead.salesforce.com/en/home
* https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_intro.htm
* Guida sul linguaggio Apex: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_dev_guide.htm
* Salesforce Lightning Platform: https://developer.salesforce.com/platform/force.com
* Salesforce: Einstein
* Documentazione di Sales Force al seguente link: https://help.salesforce.com/articleView?id=salesforce_help_map.htm&type=5
{{Framework per applicazioni web}}