这就是我正在尝试的,甚至还没有看到临时表,甚至不能正确创建它:
4 gl代码:
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 cSchemaLocation AS CHARACTER NO-UNDO.
DEFINE VARIABLE cFieldTypeMapping AS CHARACTER NO-UNDO.
DEFINE VARIABLE cVerifySchemaMode AS CHARACTER NO-UNDO.
DEFINE VARIABLE lRetOK AS LOGICAL NO-UNDO.
DEFINE VARIABLE ttOrd AS HANDLE NO-UNDO.
CREATE TEMP-TABLE ttOrd.
ASSIGN
cSourceType = "file"
cFile = "ORD1.xml"
cReadMode = "empty"
cSchemaLocation = "Orders.xsd"
lOverrideDefaultMapping = ?
cFieldTypeMapping = ?
cVerifySchemaMode = ?.
lRetOK = ttOrd:READ-XML(cSourceType, cFile, cReadMode, cSchemaLocation,
lOverrideDefaultMapping, cFieldTypeMapping, cVerifySchemaMode).
ERROR I GET:
Temp-Table定义的内部元素名称'ORDER'无效。(14748)无法从XML架构创建临时表或数据集架构。(13032)过程完成。按空格键继续。
订单。xsd文件:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<!-- XML Schema Generated from XML Document on Mon Mar 08 2021 10:09:16 GMT-0500 (Eastern Standard Time) -->
<!-- with XmlGrid.net Free Online Service http://xmlgrid.net -->
<xs:element name="EXPORTEDORDERS">
<xs:complexType>
<xs:sequence>
<xs:element name="ORDERS">
<xs:complexType>
<xs:sequence>
<xs:element name="ORDER" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="CUSTNO" type="xs:string"></xs:element>
<xs:element name="ORDERNO" type="xs:int"></xs:element>
<xs:element name="RELEASE_DT" type="xs:string"></xs:element>
<xs:element name="FULLNAME" type="xs:string"></xs:element>
<xs:element name="PONUM" type="xs:int"></xs:element>
<xs:element name="DESCR"></xs:element>
<xs:element name="TOT_AMT" type="xs:double"></xs:element>
<xs:element name="BO_AMT" type="xs:int"></xs:element>
<xs:element name="COMMITAMT" type="xs:int"></xs:element>
<xs:element name="TERMS" type="xs:string"></xs:element>
<xs:element name="STATUS" type="xs:string"></xs:element>
<xs:element name="SALESREP" type="xs:string"></xs:element>
<xs:element name="SALESEMAIL"></xs:element>
<xs:element name="INVNO"></xs:element>
<xs:element name="GROSS" type="xs:int"></xs:element>
<xs:element name="FREIGHT" type="xs:int"></xs:element>
<xs:element name="INS" type="xs:int"></xs:element>
<xs:element name="TAX" type="xs:int"></xs:element>
<xs:element name="COD_CHG" type="xs:int"></xs:element>
<xs:element name="ORDER_DT" type="xs:string"></xs:element>
<xs:element name="CLOSED_DT"></xs:element>
<xs:element name="POST_DT"></xs:element>
<xs:element name="INV_DT"></xs:element>
<xs:element name="SHIP_DT" type="xs:string"></xs:element>
<xs:element name="SHIP_METH" type="xs:string"></xs:element>
<xs:element name="WH_NUM"></xs:element>
<xs:element name="DIV_NUM" type="xs:int"></xs:element>
<xs:element name="SH_REL_DT"></xs:element>
<xs:element name="REL_WH_DT"></xs:element>
<xs:element name="CURR_CODE" type="xs:string"></xs:element>
<xs:element name="EXCH_RATE" type="xs:int"></xs:element>
<xs:element name="LAST_MOD_DT" type="xs:string"></xs:element>
<xs:element name="FLEX_FLD1" type="xs:int"></xs:element>
<xs:element name="FLEX_FLD2" type="xs:int"></xs:element>
<xs:element name="FLEX_FLD3" type="xs:int"></xs:element>
<xs:element name="FLEX_FLD4" type="xs:string"></xs:element>
<xs:element name="FLEX_FLD5"></xs:element>
<xs:element name="FLEX_FLD6"></xs:element>
<xs:element name="FLEX_FLD7"></xs:element>
<xs:element name="FLEX_FLD8"></xs:element>
<xs:element name="FLEX_FLD9"></xs:element>
<xs:element name="PENDING_NOTES"></xs:element>
<xs:element name="RELEASE_NOTES"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
ORD1.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<EXPORTEDORDERS>
<ORDERS>
<ORDER>
<CUSTNO>V70-50200022BL01</CUSTNO>
<ORDERNO>297740</ORDERNO>
<RELEASE_DT>09-24-2020</RELEASE_DT>
<FULLNAME>GETPAID Administrator</FULLNAME>
<PONUM>9010066064</PONUM>
<DESCR></DESCR>
<TOT_AMT>7066.50</TOT_AMT>
<BO_AMT>0.00</BO_AMT>
<COMMITAMT>0.00</COMMITAMT>
<TERMS>NET 60</TERMS>
<STATUS>APR-REL</STATUS>
<SALESREP>NONE</SALESREP>
<SALESEMAIL></SALESEMAIL>
<INVNO></INVNO>
<GROSS>3660.00</GROSS>
<FREIGHT>0.00</FREIGHT>
<INS>0.00</INS>
<TAX>0.00</TAX>
<COD_CHG>0.00</COD_CHG>
<ORDER_DT>03-02-2020</ORDER_DT>
<CLOSED_DT></CLOSED_DT>
<POST_DT></POST_DT>
<INV_DT></INV_DT>
<SHIP_DT>04-21-2020</SHIP_DT>
<SHIP_METH>WSI</SHIP_METH>
<WH_NUM></WH_NUM>
<DIV_NUM>0</DIV_NUM>
<SH_REL_DT></SH_REL_DT>
<REL_WH_DT></REL_WH_DT>
<CURR_CODE>USD</CURR_CODE>
<EXCH_RATE>0.00</EXCH_RATE>
<LAST_MOD_DT>03-02-2020</LAST_MOD_DT>
<FLEX_FLD1>0.00</FLEX_FLD1>
<FLEX_FLD2>0.00</FLEX_FLD2>
<FLEX_FLD3>0.00</FLEX_FLD3>
<FLEX_FLD4>GLOVIA</FLEX_FLD4>
<FLEX_FLD5></FLEX_FLD5>
<FLEX_FLD6></FLEX_FLD6>
<FLEX_FLD7></FLEX_FLD7>
<FLEX_FLD8></FLEX_FLD8>
<FLEX_FLD9></FLEX_FLD9>
<PENDING_NOTES></PENDING_NOTES>
<RELEASE_NOTES></RELEASE_NOTES>
</ORDER>
</ORDERS>
</EXPORTEDORDERS>
…哎哟!
使用数据集代替。我想他们是有空的。另外,我将跳过模式。它真的没有任何帮助,最后我静态地定义数据集和temp-table,因为它会让你的生活更容易。
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 cSchemaLocation AS CHARACTER NO-UNDO.
DEFINE VARIABLE cFieldTypeMapping AS CHARACTER NO-UNDO.
DEFINE VARIABLE cVerifySchemaMode AS CHARACTER NO-UNDO.
DEFINE VARIABLE lRetOK AS LOGICAL NO-UNDO.
DEFINE TEMP-TABLE ttOrders NO-UNDO SERIALIZE-NAME "ORDERS"
FIELD parentid AS RECID SERIALIZE-HIDDEN. //Disregard this field
DEFINE TEMP-TABLE ttOrd NO-UNDO SERIALIZE-NAME "ORDER"
FIELD parentid AS RECID SERIALIZE-HIDDEN
FIELD custno AS CHARACTER SERIALIZE-NAME "CUSTNO"
/* Rest of fields here.... */.
DEFINE DATASET dsExportOrders SERIALIZE-NAME "EXPORTEDORDERS"
FOR ttOrders, ttOrd
PARENT-ID-RELATION FOR ttOrders, ttOrd PARENT-ID-FIELD parentId.
ASSIGN
cSourceType = "file"
cFile = "c:tempORD1.xml"
cReadMode = "empty"
//cSchemaLocation = "c:tempOrders.xsd"
lOverrideDefaultMapping = ?
cFieldTypeMapping = ?
cVerifySchemaMode = ?.
lRetOK = DATASET dsExportOrders:READ-XML(cSourceType, cFile, cReadMode, cSchemaLocation,
lOverrideDefaultMapping, cFieldTypeMapping, cVerifySchemaMode).
FOR EACH ttOrd:
DISPLAY ttOrd.
END.
在10.1c版本中,现在可以正常工作了:
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 cSchemaLocation AS CHARACTER NO-UNDO.
DEFINE VARIABLE cFieldTypeMapping AS CHARACTER NO-UNDO.
DEFINE VARIABLE cVerifySchemaMode AS CHARACTER NO-UNDO.
DEFINE VARIABLE lRetOK AS LOGICAL NO-UNDO.
DEFINE TEMP-TABLE ORDERS NO-UNDO
FIELD parentid AS RECID
.
DEFINE TEMP-TABLE ORDER
FIELD parentid AS RECID
FIELD custno AS CHARACTER
FIELD ORDERNO as CHARACTER
FIELD RELEASE_DT as CHARACTER
FIELD FULLNAME as CHARACTER
FIELD PONUM as CHARACTER
FIELD DESCR as CHARACTER
FIELD TOT_AMT as decimal
FIELD BO_AMT as decimal
FIELD COMMITAMT as decimal
FIELD TERMS as CHARACTER
FIELD STATUS1 as CHARACTER
FIELD SALESREP as CHARACTER
FIELD SALESEMAIL as CHARACTER
FIELD INVNO as CHARACTER
FIELD GROSS as decimal
FIELD FREIGHT as decimal
FIELD INS as decimal
FIELD TAX as decimal
FIELD COD_CHG as decimal
FIELD ORDER_DT as CHARACTER
FIELD CLOSED_DT as CHARACTER
FIELD POST_DT as CHARACTER
FIELD INV_DT as CHARACTER
FIELD SHIP_DT as CHARACTER
FIELD SHIP_METH as CHARACTER
FIELD WH_NUM as CHARACTER
FIELD DIV_NUM as int
FIELD SH_REL_DT as CHARACTER
FIELD REL_WH_DT as CHARACTER
FIELD CURR_CODE as CHARACTER
FIELD EXCH_RATE as decimal
FIELD LAST_MOD_DT as CHARACTER
FIELD FLEX_FLD1 as CHARACTER
FIELD FLEX_FLD2 as CHARACTER
FIELD FLEX_FLD3 as CHARACTER
FIELD FLEX_FLD4 as CHARACTER
FIELD FLEX_FLD5 as CHARACTER
FIELD FLEX_FLD6 as CHARACTER
FIELD FLEX_FLD7 as CHARACTER
FIELD FLEX_FLD8 as CHARACTER
FIELD FLEX_FLD9 as CHARACTER
FIELD PENDING_NOTES as CHARACTER
FIELD RELEASE_NOTES as CHARACTER
.
DEFINE DATASET dsExportedOrders FOR ORDERS, ORDER
DATA-RELATION drOrderLine FOR ORDERS, ORDER RELATION-FIELDS (parentid, parentid)
.
ASSIGN
cSourceType = "file"
cFile = "ORD2.xml"
cReadMode = "empty"
lOverrideDefaultMapping = ?
cFieldTypeMapping = ?
cVerifySchemaMode = ?
.
lRetOK = DATASET dsExportedOrders:READ-XML(cSourceType, cFile, cReadMode, cSchemaLocation,
lOverrideDefaultMapping, cFieldTypeMapping, cVerifySchemaMode).
FOR EACH ORDER:
Display
custno
orderno
status1
.
END.