以下は、サンプルの拡張方法の例です。
このシナリオは、次の課題を示します。
次の SQL は DB2 ユニバーサル・データベース用です。Oracle を実行している場合は、それに応じて変更しなければならない可能性があります (ステートメントの終了文字として、必ず @ を設定してください)。
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")@
SQL によって新しい表 ADAPTER_ITEM が作成されます。この表には、自動生成される 1 次キー、品目の名前、その品目が属する送り状に対する参照、および品目の価格 4 つの列があります。この新しい表は、ADAPTER_ITEM 表への外部キーとして、INVOICE_KEY を使用します。
ADAPTERINVOICE メッセージを作成するフローの一部のみを更新する必要があります。 MigratedAdapter フローの DatabaseInput ノードをダブルクリックして ESQL を開き、「ソース」ビューまでナビゲートし、ADAPTERINVOICE メッセージを作成する部分までスクロールダウンします。
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);
ネストされた項目を追加し、サイズ属性を、取得された項目の数に設定します。
(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[],
次に、新しい属性を、取得された ADAPTERITEM 行の数に設定します。 SELECT の後に以下を追加します。
CREATE FIRSTCHILD OF Root.MRM.Inv:ITEMS TYPE NameValue NAME 'size' VALUE CARDINALITY(Root.MRM.Inv:ITEMS.Ite:ADAPTERITEM[]);
通常は次のように記述します。
SET Root.MRM.Inv:ITEMS.size = CARDINALITY(Root.MRM.Inv:ITEMS.Ite:ADAPTERITEM[])ただし、メッセージは順序付けられたシーケンスであるため、属性が最初の子であることを確認する必要があります。
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[]);
新しい機能をテストするため、2 つの項目を ITEM 表に追加し、これらの項目を使用する送り状を追加または変更します。
--<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')@
データ・プロジェクト・エクスプローラーで上記の SQL を AdapterMigration データ設計プロジェクト内の新しい SQL スクリプトに挿入します。その後、「データ・プロジェクト・エクスプローラー」ビューの中のプロジェクトを右クリックし、「SQL の実行」を選択します。 これにより、フローが実行され、ADAPTERMIGRATION.INVOICE キューに次のメッセージが表示されます。
<?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>