Linguaggio XLANG-s
Il linguaggio XLANG/s è stato progettato per l'utilizzo di standard Internet, ad esempio XML, XSD e Web Services Description Language (WSDL), e dispone di un supporto integrato per l'utilizzo di messaggi e oggetti basati su .NET. XLANG/s può essere considerato un linguaggio per la messaggistica con alcune funzionalità delle espressioni di C#. Il codice non è tuttavia portabile tra XLANG/s e C#.
XLANG/s favorisce una netta separazione tra processo e implementazione. Ad esempio, si specifica il protocollo o il processo di business in XLANG/s, mentre gli aspetti locali dell'applicazione, come l'accesso al database, vengono implementati in altri linguaggi di programmazione .NET, come C# o Visual Basic.NET.
La sintassi delle assegnazioni e delle espressioni di XLANG/s è modellata sul linguaggio C# ed è necessario fare riferimento alla specifica di tale linguaggio per la sintassi esatta. XLANG/s definisce un'ampia gamma di costrutti di alto livello utilizzati per definire i processi di business. Sebbene XLANG/s fornisca supporto per tipi di dati di basso livello, ad esempio stringhe e integer, sono definiti anche tipi di dati di alto livello: messaggi, porte, correlazioni e collegamenti al servizio. Questi tipi di dati vengono usati per definire rigorosamente la semantica associata a un processo aziendale e sono integrati da istruzioni di controllo del processo, ad esempio mentre o ambito.
Le istruzioni XLANG/s in genere rientrano in una delle due categorie: istruzioni semplici che agiscono autonomamente, ad esempio ricezione o invio e istruzioni complesse che contengono o raggruppano istruzioni semplici o altre istruzioni complesse, ad esempio ambito, parallela e listen. La semantica incorporata in XLANG/s rispecchia quella definita nella specifica Business Process Execution Language for Web Services (BPEL4WS) pubblicata da Microsoft, IBM e BEA per la definizione della semantica dei processi di business.
La conoscenza dei costrutti principali di XLANG/s è facoltativa poiché essi vengono generati a seguito della progettazione dei diagrammi di orchestrazione in Progettazione orchestrazioni BizTalk, Progettazione orchestrazioni è uno strumento grafico completo che consente di rappresentare in forma visiva i processi di business. Mediante tale strumento vengono generati file XLANG/s con estensione odx, contenenti nell'intestazione ulteriori informazioni visive e nel corpo informazioni relative agli attributi personalizzati.
Nota
Il linguaggio XLANG/s è proprietario e non interamente documentato. In questa sezione vengono esposte alcune parti del linguaggio che potrebbe essere necessario conoscere quando si sviluppano orchestrazioni. La modifica diretta dei file con estensione odx non è supportata.
Per il programma XLANG/s più semplice è necessario che sia definito un tipo di messaggio per dare all'orchestrazione dei dati con cui iniziare a operare. L'orchestrazione riceve il messaggio tramite una porta, quindi termina l'esecuzione. Di seguito viene riportato un esempio di codice:
module HelloWorldApp
{
private porttype ptPOReceive
{
oneway opPOReceive
{
HelloWorldApp.PurchaseOrder
}
}
private porttype ptPOSend
{
oneway opPOSend
{
HelloWorldApp.PurchaseOrder
}
}
private service HelloWorld
{
port implements HelloWorldApp.ptPOReceive poPOReceive;
port uses HelloWorldApp.ptPOSend poPOSend;
message HelloWorldApp.PurchaseOrder msgPO;
body ()
{
activate receive (poPOReceive.opPOReceive, msgPO);
send (poPOSend.opPOSend, msgPO);
}
}
}
Nel programma XLANG/s precedente, la module
parola chiave definisce l'unità di compilazioni per un programma XLANG/s. Tutti i tipi usati nel programma, ad esempio porttype, correlationsettype, servicelinktype e messagetype, sono inclusi nell'ambito di questo livello.
Una porta è un costrutto che XLANG/s può inviare o ricevere messaggi da o verso e la porta ha un tipo definito denominato porttype. Il costrutto porttype definisce una raccolta di operazioni che possono essere usate sulla porta. Queste operazioni definiscono un singolo scambio di messaggi validi tramite la porta. Nella definizione dei costrutti porttype, messagetype, servicelinktype o correlationsettype , l'autore di un programma XLANG/s sta essenzialmente creando definizioni complesse dei tipi di dati. Queste definizioni presentano gli stessi vantaggi dei tipi di dati complessi in altre lingue: astraggono le nozioni contenute nel tipo di dati a un livello superiore e consentono di riutilizzare facilmente il tipo di dati.
La porta ptPOReceive nel modulo HelloWorldApp precedente viene definita con un'operazione di porta di ricezione unidirezionale, opPOReceive. Il blocco HelloWorld del servizio definisce l'effettiva implementazione del processo e tutte le variabili utilizzabili, incluse le variabili delle porte e del messaggio. Le prime tre righe di codice all'interno di questo blocco definiscono rispettivamente le variabili di porta poPOReceive e poPOSend e il messaggio msgPO . Il corpo contiene il codice che descrive i parametri per il servizio e il comportamento di esecuzione. Tutte le variabili, se non definite in un blocco con ambito annidato, sono definite a livello di questo ambito. L'istruzione di ricezione, che è una ricezione attiva, riceve il messaggio msgPO dalla porta poPOReceive.opPOReceive e crea una nuova istanza dell'orchestrazione. Dopo la ricezione del messaggio, l'istruzione send indirizza il messaggio a una porta di trasmissione. Nelle due dichiarazioni di porta nel codice precedente, poPOReceive usa il modificatore implementa, mentre poPOSend usa il modificatore uses. Il modificatore implements comunica al runtime che riceverà un messaggio tramite quella porta. Il modificatore uses comunica al runtime che invierà un messaggio tramite quella porta.