Hier einige Beispiele, wie der Mustercode erweitert werden kann:
Dieses Szenario stellt folgende Anforderungen:
Der folgende SQL-Code gilt für DB2 Universal Database. Falls Sie Oracle ausführen, müssen Sie ihn möglicherweise entsprechend anpassen (denken Sie daran, @ als Anweisungsabschlusszeichen festzulegen):
CREATE TABLE "ADAPTER_ITEM" ( "PKEY" INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 NO CYCLE NO CACHE), "NAME" VARCHAR(20) NOT NULL, "INVOICE_KEY" VARCHAR(10) NOT NULL, "PRICE" FLOAT(53) DEFAULT 0 ) DATA CAPTURE NONE@ ALTER TABLE "ADAPTER_ITEM" ADD CONSTRAINT "ADAPTER_ITEM_PK" PRIMARY KEY ("PKEY")@
Der SQL-Code erstellt eine neue Tabelle, ADAPTER_ITEM, mit vier Spalten für einen automatisch generierten Primärschlüssel, den Namen des Artikels, einen Verweis auf die Rechnung, zu der er gehört, und den Artikelpreis. Die neue Tabelle verwendet den Schlüssel INVOICE_KEY als Fremdschlüssel für die Tabelle ADAPTER_ITEM.
Sie müssen nur den Teil des Nachrichtenflusses aktualisiern, der die ADAPTERINVOICE-Nachrichten erzeugt. Doppelklicken Sie auf den DatabaseInput-Knoten im Nachrichtenfluss 'MigratedAdapter', um den ESQL-Code zu öffnen, navigieren Sie zur Ansicht 'Quelle' und blättern Sie abwärts zu dem Abschnitt, in dem die ADAPTERINVOICE-Nachricht erzeugt wird:
SET Root.MRM = THE( SELECT DispatchedEvent.Usr.OBJECT_VERB AS verb, INVOICE.PKEY AS Inv:PKEY, INVOICE.ITEM AS Inv:"Item", INVOICE.QUANTITY AS Inv:QUANTITY, INVOICE.CUSTOMER AS Inv:CUSTOMER, 'Retrieve' AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.verb, CUSTOMER.PKEY AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:PKEY, CUSTOMER.FIRSTNAME AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:FIRSTNAME, CUSTOMER.LASTNAME AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:LASTNAME, CUSTOMER.ADDRESS AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:ADDRESS, 'Retrieve' AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:ADAPTERADDRESS.Add:ADAPTERADDRESS.verb, ADDRESS.PKEY AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:ADAPTERADDRESS.Add:ADAPTERADDRESS.Add:PKEY, ADDRESS.FIRSTLINE AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:ADAPTERADDRESS.Add:ADAPTERADDRESS.Add:FIRSTLINE, ADDRESS.SECONDLINE AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:ADAPTERADDRESS.Add:ADAPTERADDRESS.Add:SECONDLINE, ADDRESS.CODE AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:ADAPTERADDRESS.Add:ADAPTERADDRESS.Add:CODE, ADDRESS.CITY AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:ADAPTERADDRESS.Add:ADAPTERADDRESS.Add:CITY, ADDRESS.COUNTRY AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:ADAPTERADDRESS.Add:ADAPTERADDRESS.Add:COUNTRY, CUSTOMER.CCODE AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:CCODE , 'JDBCConnector_' ||CAST(DispatchedEvent.Usr.EVENT_ID AS CHARACTER) ||'ibm_events' ||CAST(DispatchedEvent.Usr.EVENT_TIME AS CHARACTER FORMAT 'yyyyMMddhhmmss.SSS') AS Inv:ObjectEventId FROM Database.ADAPTER_INVOICE AS INVOICE, Database.ADAPTER_CUSTOMER AS CUSTOMER, Database.ADAPTER_ADDRESS AS ADDRESS WHERE INVOICE.PKEY = DispatchedEvent.Usr.OBJECT_KEY AND CUSTOMER.PKEY = INVOICE.CUSTOMER AND ADDRESS.PKEY = CUSTOMER.ADDRESS);
Fügen Sie die verschachtelten Artikel hinzu und setzen Sie das Größenattribut auf die Anzahl der abgerufenen Artikel.
(SELECT ADAPTER_ITEM.PKEY, ADAPTER_ITEM.NAME, ADAPTER_ITEM.INVOICE_KEY, ADAPTER_ITEM.PRICE FROM Database.ADAPTER_ITEM WHERE ADAPTER_ITEM.INVOICE_KEY = INVOICE.PKEY) AS Inv:ITEMS.Ite:ADAPTERITEM[],
Füllen Sie jetzt das neue Attribut mit der Anzahl der abgerufenen ADAPTERITEM-Zeilen. Fügen Sie Folgendes hinter SELECT ein:
CREATE FIRSTCHILD OF Root.MRM.Inv:ITEMS TYPE NameValue NAME 'size' VALUE CARDINALITY(Root.MRM.Inv:ITEMS.Ite:ADAPTERITEM[]);
Normalerweise können Sie folgende Codezeile schreiben:
SET Root.MRM.Inv:ITEMS.size = CARDINALITY(Root.MRM.Inv:ITEMS.Ite:ADAPTERITEM[])Da es sich bei der Nachricht jedoch um eine geordnete Folge handelt, müssen Sie sicherstellen, dass das Attribut das erste untergeordnete Element ist.
SET Root.MRM = THE( SELECT DispatchedEvent.Usr.OBJECT_VERB AS verb, INVOICE.PKEY AS Inv:PKEY, (SELECT ADAPTER_ITEM.PKEY, ADAPTER_ITEM.NAME, ADAPTER_ITEM.INVOICE_KEY, ADAPTER_ITEM.PRICE FROM Database.ADAPTER_ITEM WHERE ADAPTER_ITEM.INVOICE_KEY = INVOICE.PKEY) AS Inv:ITEMS.Ite:ADAPTERITEM[], INVOICE.QUANTITY AS Inv:QUANTITY, INVOICE.CUSTOMER AS Inv:CUSTOMER, 'Retrieve' AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.verb, CUSTOMER.PKEY AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:PKEY, CUSTOMER.FIRSTNAME AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:FIRSTNAME, CUSTOMER.LASTNAME AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:LASTNAME, CUSTOMER.ADDRESS AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:ADDRESS, 'Retrieve' AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:ADAPTERADDRESS.Add:ADAPTERADDRESS.verb, ADDRESS.PKEY AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:ADAPTERADDRESS.Add:ADAPTERADDRESS.Add:PKEY, ADDRESS.FIRSTLINE AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:ADAPTERADDRESS.Add:ADAPTERADDRESS.Add:FIRSTLINE, ADDRESS.SECONDLINE AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:ADAPTERADDRESS.Add:ADAPTERADDRESS.Add:SECONDLINE, ADDRESS.CODE AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:ADAPTERADDRESS.Add:ADAPTERADDRESS.Add:CODE, ADDRESS.CITY AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:ADAPTERADDRESS.Add:ADAPTERADDRESS.Add:CITY, ADDRESS.COUNTRY AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:ADAPTERADDRESS.Add:ADAPTERADDRESS.Add:COUNTRY, CUSTOMER.CCODE AS Inv:ADAPTERCUSTOMER.Cus:ADAPTERCUSTOMER.Cus:CCODE , 'JDBCConnector_' ||CAST(DispatchedEvent.Usr.EVENT_ID AS CHARACTER) ||'ibm_events' ||CAST(DispatchedEvent.Usr.EVENT_TIME AS CHARACTER FORMAT 'yyyyMMddhhmmss.SSS') AS Inv:ObjectEventId FROM Database.ADAPTER_INVOICE AS INVOICE, Database.ADAPTER_CUSTOMER AS CUSTOMER, Database.ADAPTER_ADDRESS AS ADDRESS WHERE INVOICE.PKEY = DispatchedEvent.Usr.OBJECT_KEY AND CUSTOMER.PKEY = INVOICE.CUSTOMER AND ADDRESS.PKEY = CUSTOMER.ADDRESS); CREATE FIRSTCHILD OF Root.MRM.Inv:ITEMS TYPE NameValue NAME 'size' VALUE CARDINALITY(Root.MRM.Inv:ITEMS.Ite:ADAPTERITEM[]);
Testen Sie die neue Funktion, indem Sie einige Artikel zur Tabelle ITEM hinzufügen und eine Rechnung hinzufügen oder ändern, die diese Artikel verwendet:
--<ScriptOptions statementTerminator="@"/> INSERT INTO ADAPTER_ITEM (NAME,INVOICE_KEY,PRICE) VALUES ('Trousers', 'inv10', 2.17)@ INSERT INTO ADAPTER_ITEM (NAME,INVOICE_KEY,PRICE) VALUES ('Jumpers', 'inv10', 12.00)@ INSERT INTO ADAPTER_INVOICE VALUES ('inv10', '', 10, 'cust1')@
Fügen Sie den oben gezeigten SQL-Code in ein neues SQL-Script im Datenentwurfsprojekt 'AdapterMigration' im Datenprojektexplorer ein. Klicken Sie dann mit der rechten Maustaste auf das Projekt in der Ansicht 'Datenprojektexplorer' und wählen Sie 'SQL ausführen' aus. Dadurch wird der Fluss ausgeführt und folgende Nachricht in der Warteschlange ADAPTERMIGRATION.INVOICE angezeigt:
<?xml version="1.0"?> <Q1:ADAPTERINVOICE xmlns:Q1="http://www.ibm.com/websphere/crossworlds/2002/BOSchema/ADAPTERINVOICE" xmlns:Q4="http://dbinput/amartens" xmlns:Q3="http://www.ibm.com/websphere/crossworlds/2002/BOSchema/ADAPTERADDRESS" xmlns:Q2="http://www.ibm.com/websphere/crossworlds/2002/BOSchema/ADAPTERCUSTOMER" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" verb="Create"> <Q1:PKEY>inv10</Q1:PKEY> <Q1:ITEMS size="2"> <Q4:ADAPTERITEM> <PKEY>9</PKEY> <NAME>Trousers</NAME> <INVOICE_KEY>inv10</INVOICE_KEY> <PRICE>2.17E+0</PRICE> </Q4:ADAPTERITEM> <Q4:ADAPTERITEM> <PKEY>10</PKEY> <NAME>Jumpers</NAME> <INVOICE_KEY>inv10</INVOICE_KEY> <PRICE>1.2E+1</PRICE> </Q4:ADAPTERITEM> </Q1:ITEMS> <Q1:QUANTITY>10</Q1:QUANTITY> <Q1:CUSTOMER>cust1</Q1:CUSTOMER> <Q1:ADAPTERCUSTOMER> <Q2:ADAPTERCUSTOMER verb="Retrieve"> <Q2:PKEY>cust1</Q2:PKEY> <Q2:FIRSTNAME>Barney</Q2:FIRSTNAME> <Q2:LASTNAME>Rubble</Q2:LASTNAME> <Q2:ADDRESS>add1</Q2:ADDRESS> <Q2:ADAPTERADDRESS> <Q3:ADAPTERADDRESS verb="Retrieve"> <Q3:PKEY>add1</Q3:PKEY> <Q3:FIRSTLINE>MP211</Q3:FIRSTLINE> <Q3:SECONDLINE>IBM Hursley Park</Q3:SECONDLINE> <Q3:CODE>SO21 2JN</Q3:CODE> <Q3:CITY>Winchester</Q3:CITY> <Q3:COUNTRY>GB</Q3:COUNTRY> </Q3:ADAPTERADDRESS> </Q2:ADAPTERADDRESS> <Q2:CCODE>Dev</Q2:CCODE> </Q2:ADAPTERCUSTOMER> </Q1:ADAPTERCUSTOMER> <Q1:ObjectEventId>JDBCConnector_160ibm_events20101108020022.046</Q1:ObjectEventId> </Q1:ADAPTERINVOICE>