2016-07-24 51 views
1

我目前在Openedge 10.1c上。我正在使用READ-XML填充數據集。我無法更改源XML,並想知道如何在我的連接中沒有父子關係唯一鍵時迭代數據集。迭代使用READ-XML填充的數據集而不使用父 - 子關係的列?

當我到我的桌子時,我會包括示例XML和顯示循環。

在它的東西,像這樣同時...

<data> 
    <fulfillments> 
    <field1>field1</field1> 
    <field2>field2</field2> 
    <field3>field3</field3> 
    <customer> 
     <name>test</name> 
    </customer> 
    </fulfillments> 
    <fulfillments> 
    <field1>field11</field1> 
    <field2>field22</field2> 
    <field3>field33</field3> 
    <customer> 
     <name>test2</name> 
    </customer> 
    </fulfillments> 
</data> 

我使用讀取XML後,我得到的所有數據,但試圖遍歷它,我不知道如何來滿足每一個客戶的顯示。相反,它只會顯示所有客戶的每個履行。

示例代碼讀取和顯示數據集...

PROCEDURE _read_xml: 
    DEFINE INPUT-OUTPUT PARAMETER DATASET-HANDLE idshndl. 
    DEFINE INPUT  PARAMETER ifileloc AS CHARACTER NO-UNDO. 
    DEFINE OUTPUT  PARAMETER oreturn AS LOGICAL NO-UNDO. 

    DEFINE VARIABLE cSourceType    AS CHARACTER NO-UNDO. 
    DEFINE VARIABLE cReadMode    AS CHARACTER NO-UNDO. 
    DEFINE VARIABLE lOverrideDefaultMapping AS LOGICAL NO-UNDO. 
    DEFINE VARIABLE cFile     AS CHARACTER NO-UNDO. 
    DEFINE VARIABLE cEncoding    AS CHARACTER NO-UNDO. 
    DEFINE VARIABLE cSchemaLocation   AS CHARACTER NO-UNDO. 
    DEFINE VARIABLE cFieldTypeMapping  AS CHARACTER NO-UNDO. 
    DEFINE VARIABLE cVerifySchemaMode  AS CHARACTER NO-UNDO. 

    IF SEARCH(ifileloc) <> ? THEN 
    DO: 
     ASSIGN 
      cSourceType = "file" 
      cFile = ifileloc 
      cReadMode = "empty" 
      cSchemaLocation = ? 
      lOverrideDefaultMapping = ? 
      cFieldTypeMapping = ? 
      cVerifySchemaMode = ?. 

     oreturn = idshndl:READ-XML(cSourceType, 
            cFile, 
            cReadMode, 
            cSchemaLocation, 
            lOverrideDefaultMapping, 
            cFieldTypeMapping, 
            cVerifySchemaMode). 
    END. 
    ELSE 
    DO: 
     oreturn = FALSE. 
    END. 

END PROCEDURE. 

PROCEDURE _fulfillment_display_data: 
    DISPLAY "DATA". 
    FOR EACH tt_biz_fulfillments NO-LOCK, 
     EACH tt_biz_ship_to: 
      DISPLAY "FULFILLMENTS". 
      DISPLAY tt_biz_fulfillments WITH SIDE-LABELS.   
      DISPLAY tt_biz_ship_to WITH SIDE-LABELS. 
    END. 
END PROCEDURE. 

示例XML ...

<?xml version="1.0" encoding="UTF-8"?> 
<data> 
    <fulfillments> 
     <shipping_method>AIM - Direct</shipping_method> 
     <picker_id /> 
     <sales_order_id>234722</sales_order_id> 
     <packaging_id>1</packaging_id> 
     <scheduled_delivery_date>07/01/2016</scheduled_delivery_date> 
     <net_weight>225</net_weight> 
     <shipper_name>TEST</shipper_name> 
     <external_note>Test Note</external_note> 
     <packaging_type>box</packaging_type> 
     <bill_to>sender</bill_to> 
     <shipping_cost /> 
     <fulfillment_id>12345</fulfillment_id> 
     <ship_to> 
     <city>Pittsburgh</city> 
     <name>Bizowie</name> 
     <zip>15219</zip> 
     <is_residential>0</is_residential> 
     <company /> 
     <address>429 Fourth Avenue Suite 1206</address> 
     <phone_extension /> 
     <contact_id>8</contact_id> 
     <phone /> 
     <state>PA</state> 
     <country /> 
     <email /> 
     </ship_to> 
     <location_id>1</location_id> 
     <parent_fulfillment_id /> 
     <location_name>201 - PA</location_name> 
     <manifest_number /> 
     <picker_name /> 
     <scheduled_pick_date /> 
     <pick_timestamp /> 
     <delivery_timestamp /> 
     <packaging_weight>0.150000</packaging_weight> 
     <insured_value /> 
     <bill_to_zip /> 
     <internal_note>test note internal</internal_note> 
     <bill_to_account /> 
     <status>shipped</status> 
     <dock_number /> 
     <route_id>1</route_id> 
     <delivery_latitude /> 
     <shipper_id>1</shipper_id> 
     <scheduled_ship_date>06/29/2016</scheduled_ship_date> 
     <acceptance_timestamp /> 
     <shipping_carrier /> 
     <packaging_height>4.0000</packaging_height> 
     <packaging_length>4.0000</packaging_length> 
     <gross_weight>225.15</gross_weight> 
     <packaging_width>4.0000</packaging_width> 
     <delivery_longitude /> 
     <delivery_signer_location /> 
     <packing_layer /> 
     <truck_number /> 
     <route_name /> 
     <flag_message /> 
     <delivery_signer_name /> 
     <tracking_number /> 
     <packing_row /> 
     <ship_timestamp>06/09/2016 07:15:15 AM</ship_timestamp> 
    </fulfillments> 
    <fulfillments> 
     <shipping_method>TEST</shipping_method> 
     <picker_id /> 
     <sales_order_id>234722</sales_order_id> 
     <packaging_id>1</packaging_id> 
     <scheduled_delivery_date>08/05/2016</scheduled_delivery_date> 
     <net_weight>440</net_weight> 
     <shipper_name>BLAH</shipper_name> 
     <external_note>TESTING</external_note> 
     <packaging_type>box</packaging_type> 
     <bill_to>sender</bill_to> 
     <shipping_cost /> 
     <fulfillment_id>12346</fulfillment_id> 
     <ship_to> 
     <city>Wyoming</city> 
     <name /> 
     <zip>18644</zip> 
     <is_residential /> 
     <company>Walmart</company> 
     <address>10 Moosic St</address> 
     <phone_extension /> 
     <contact_id>1226058</contact_id> 
     <phone /> 
     <state>PA</state> 
     <country /> 
     <email /> 
     </ship_to> 
     <location_id>1</location_id> 
     <parent_fulfillment_id /> 
     <location_name>201 - PA</location_name> 
     <manifest_number /> 
     <picker_name /> 
     <scheduled_pick_date /> 
     <pick_timestamp /> 
     <delivery_timestamp /> 
     <packaging_weight>0.150000</packaging_weight> 
     <insured_value /> 
     <bill_to_zip /> 
     <internal_note>TESTING NOTE</internal_note> 
     <bill_to_account /> 
     <status>shipped</status> 
     <dock_number /> 
     <route_id>1</route_id> 
     <delivery_latitude /> 
     <shipper_id>1</shipper_id> 
     <scheduled_ship_date>07/18/2016</scheduled_ship_date> 
     <acceptance_timestamp /> 
     <shipping_carrier /> 
     <packaging_height>4.0000</packaging_height> 
     <packaging_length>4.0000</packaging_length> 
     <gross_weight>440.15</gross_weight> 
     <packaging_width>4.0000</packaging_width> 
     <delivery_longitude /> 
     <delivery_signer_location /> 
     <packing_layer /> 
     <truck_number /> 
     <route_name /> 
     <flag_message /> 
     <delivery_signer_name /> 
     <tracking_number /> 
     <packing_row /> 
     <ship_timestamp>06/09/2016 07:15:15 AM</ship_timestamp> 
    </fulfillments> 
</data> 
+0

你的代碼是什麼樣的? –

+0

添加了我正在做的示例代碼。我遇到的問題是,它會循環所有船舶的每次履行。根據代碼,我預測會發生什麼。問題是我如何在顯示父母子女關係時保持這種關係,以便我只顯示每個滿足的shipto信息,而不是每個滿足的每個shipto信息。 – dayv2005

回答

1

我不是100%肯定,如果這個工程在10.C與否。它當然在11.6工作。

如果使用PARENT-ID-RELATION當你定義的數據集時,你READ-XML

我已經在這裏添加了一個簡化版本父緩衝的記錄ID將被添加到所有兒童。您可能想要更改數據類型。只需要PARENT-FIELDS-BEFOREPARENT-FIELDS-AFTER即可使輸出數據集看起來相同(基本上,如果將「ship_to」部分放在正確的位置)。只需讀取XML並遍歷記錄就不需要了。

DEFINE TEMP-TABLE ttFulfillments NO-UNDO SERIALIZE-NAME "fulfillments" 
    FIELD shipping_method   AS CHARACTER 
    FIELD picker_id    AS CHARACTER 
    FIELD sales_order_id   AS CHARACTER 
    FIELD packaging_id    AS CHARACTER 
    FIELD scheduled_delivery_date AS CHARACTER 
    FIELD net_weight    AS CHARACTER 
    FIELD shipper_name    AS CHARACTER 
    FIELD external_note   AS CHARACTER 
    FIELD packaging_type   AS CHARACTER 
    FIELD bill_to     AS CHARACTER 
    FIELD shipping_cost   AS CHARACTER 
    FIELD fulfillment_id   AS CHARACTER 
    FIELD location_id    AS CHARACTER 
    FIELD parent_fulfillment_id AS CHARACTER 
    FIELD location_name   AS CHARACTER 
    FIELD manifest_number   AS CHARACTER 
    FIELD picker_name    AS CHARACTER 
    FIELD scheduled_pick_date  AS CHARACTER 
    FIELD pick_timestamp   AS CHARACTER 
    FIELD delivery_timestamp  AS CHARACTER 
    FIELD packaging_weight   AS CHARACTER 
    FIELD insured_value   AS CHARACTER 
    FIELD bill_to_zip    AS CHARACTER 
    FIELD internal_note   AS CHARACTER 
    FIELD bill_to_account   AS CHARACTER 
    FIELD fullfill_status   AS CHARACTER SERIALIZE-NAME "status" 
    FIELD dock_number    AS CHARACTER 
    FIELD route_id     AS CHARACTER 
    FIELD delivery_latitude  AS CHARACTER 
    FIELD shipper_id    AS CHARACTER 
    FIELD scheduled_ship_date  AS CHARACTER 
    FIELD acceptance_timestamp  AS CHARACTER 
    FIELD shipping_carrier   AS CHARACTER 
    FIELD packaging_height   AS CHARACTER 
    FIELD packaging_length   AS CHARACTER 
    FIELD gross_weight    AS CHARACTER 
    FIELD packaging_width   AS CHARACTER 
    FIELD delivery_longitude  AS CHARACTER 
    FIELD delivery_signer_location AS CHARACTER 
    FIELD packing_layer   AS CHARACTER 
    FIELD truck_number    AS CHARACTER 
    FIELD route_name    AS CHARACTER 
    FIELD flag_message    AS CHARACTER 
    FIELD delivery_signer_name  AS CHARACTER 
    FIELD tracking_number   AS CHARACTER 
    FIELD packing_row    AS CHARACTER 
    FIELD ship_timestamp   AS CHARACTER. 

DEFINE TEMP-TABLE ttShipTo NO-UNDO SERIALIZE-NAME "ship_to" 
    FIELD parent_recid AS RECID SERIALIZE-HIDDEN 
    FIELD city   AS CHARACTER 
    FIELD shipto_name  AS CHARACTER SERIALIZE-NAME "name" 
    FIELD zip    AS CHARACTER 
    FIELD is_residential AS CHARACTER 
    FIELD company   AS CHARACTER 
    FIELD address   AS CHARACTER 
    FIELD phone_extension AS CHARACTER 
    FIELD contact_id  AS CHARACTER 
    FIELD phone   AS CHARACTER 
    FIELD state   AS CHARACTER 
    FIELD country   AS CHARACTER 
    FIELD email   AS CHARACTER. 

DEFINE DATASET dsData SERIALIZE-NAME "data" 
    FOR ttFulfillments, ttShipTo 
    PARENT-ID-RELATION pr1 FOR ttFulFillments, ttShipTo 
     PARENT-ID-FIELD parent_recid 
     PARENT-FIELDS-BEFORE (shipping_method, picker_id, sales_order_id, packaging_id, scheduled_deliv, net_weight, shipper_name, external_note, packaging_type, bill_to, shipping_cost, fulfillment_id) 
     PARENT-FIELDS-AFTER (location_id,parent_fulfillment_id,location_name,manifest_number,picker_name,scheduled_pick_date,pick_timestamp, delivery_timestamp, packaging_weight, insured_value, bill_to_zip, internal_note, bill_to_account, fullfill_status, dock_number, route_id, delivery_latitude, shipper_id, scheduled_ship_date, acceptance_timestamp, shipping_carrier, packaging_height, packaging_length, gross_weight, packaging_width, delivery_longitude, delivery_signer_location, packing_layer, truck_number, route_name, flag_message, delivery_signer_name, tracking_number, packing_row, ship_timestamp). 

DATASET dsData:READ-XML("file", "c:\temp\sample-data.xml", "empty", ?, ?, ?, ?). 

/* Output dataset just to have a reference to compare to the input... */ 
DATASET dsData:WRITE-XML("file","c:\temp\output-data.xml"). 

/* Iterate on temp-tables */ 
FOR EACH ttFulfillments : 
    DISPLAY ttFulfillments. 

    FOR EACH ttShipTo WHERE ttShipTo.parent_recid = RECID(ttFulfillments): 
     DISPLAY ttShipTo EXCEPT ttShipTo.parent_recid. 
    END. 

END. 
+1

自11.x開始添加了「父母身份關係」。 –

+1

這可以起作用,但不會起作用。我繼續前進,只是手動解析XML所需的數據。我只是希望有一種方法可以輕鬆使用read-xml功能。 – dayv2005

相關問題