Accesso a più ricorrenze conosciute di un elemento

Quando si fa riferimento o si crea il contenuto dei messaggi, è probabile che i dati contengano campi ripetuti. Se si conosce il numero di istanze di un campo ripetuto e si desidera accedere ad una istanza specifica di questo campo, è possibile utilizzare un indice di array come parte di un riferimento di campo.

Ad esempio, è possibile che si desideri applicare un filtro alla prima riga di un indirizzo, per accelerare la consegna di un ordine. Tre istanze dell'elemento Billling.Address sono sempre presenti nel messaggio di esempio. Per verificare la prima riga, scrivere un'espressione come quella riportata di seguito:

IF Body.Invoice.Customer.Billing.Address[1] = 'Patent Office' THEN
   DO;
     -- ulteriore ESQL --
END IF;   

L'indice di array [1] indica che quella è la prima istanza del campo ripetuto a cui si è interessati (gli indici di array iniziano con 1). Un indice di array come questo può essere utilizzato in qualsiasi punto in un riferimento di campo, per cui è possibile, ad esempio, applicare un filtro sul seguente test:

IF Body.Invoice."Item"[1].Quantity > 2 THEN
   DO;
     -- ulteriore ESQL --
END IF;   

E' possibile fare riferimento all'ultima istanza di un campo ripetuto utilizzando l'indice di array speciale [<] ed alle istanze collegate all'ultima (ad esempio, la penultima) nel modo riportato di seguito:

È anche possibile utilizzare l'indice di array [>] per rappresentare il primo elemento e, in una modalità simile, gli elementi ai quali è collegato.

Gli esempi riportati di seguito fanno riferimento al messaggio Invoice utilizzando tali indici:

IF Body.Invoice.Customer.Billing.Address[<] = 'Hampshire' THEN 
      DO;
     -- ulteriore ESQL --
END IF;   
IF Body.Invoice.Customer.Billing.Address[<2 ] = 'Southampton' THEN
   DO;
     -- ulteriore ESQL --
END IF;   

E' anche possibile utilizzare tali indici speciali per gli elementi che si ripetono per un numero di volte sconosciuto.

Eliminazione dei campi ripetuti

Se si passa un messaggio con diverse ripetizioni di un elemento attraverso un flusso di messaggi e si desidera eliminare alcune delle ripetizioni, tenere presente che la numerazione delle ripetizioni viene riordinata dopo ciascuna eliminazione. Ad esempio, se si dispone di un messaggio con cinque ripetizioni di un particolare elemento ed il flusso di messaggi contiene il seguente codice ESQL:

SET OutputRoot.MRM.e_PersonName[1] = NULL;
SET OutputRoot.MRM.e_PersonName[4] = NULL;

E' prevedibile che vengano eliminati gli elementi uno e quattro. Tuttavia, poiché gli elementi ripetuti sono memorizzati in uno stack, quando un elemento viene eliminato il suo posto viene preso da quello nel posto immediatamente superiore. Ciò significa che, nell'esempio sopra riportato, vengono eliminati gli elementi uno e cinque. Per evitare questo problema, eliminare in ordine inverso: eliminare prima l'elemento quattro, quindi eliminare l'elemento uno.

Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ak04862_