一些背景信息。我们使用 Infor XA 作为我们的 ERP,我尝试编写一个 RPGLE 程序作为用户操作,将采购订单信息保存到 IFS 上的 XML 中。然后,表单包将获取该信息。有一张包含采购订单标题信息的表格,还有一张包含行的表格。
问题是程序运行时代码不会返回任何结果,即使 where 子句中有正确的订单号。
如果我将该语句从程序中取出并直接运行它,它将返回所有标头信息。当我单步执行并调试它时,没有填充任何变量。我根据数据库字段声明了所有变量类型。
exec sql
select p.ordno, // Order Number
p.revnb, // Revesion Number
p.revdt, // Revision Date
p.actdt, // PO Completion Date
s.viads, // Ship Via Description
t.trmds, // Terms Description
p.reprt, // Reprint code
p.UUSAPM, // User switch field to send PO as email.
b.buynm, // Buyer Name
b.buyph, // Buyer Phone
b.eadr, // Buyer Email
v.vn35, // Vendor Name
v.v135, // Vender Address 1
v.v235, // Vendor Address 2
v.vcity, // Vendor City
v.vstac, // Vendor State Code
v.vzipc, // Vendor Zip
v.vcntr, // Vendor Country,
v.vetel, // Vendor Tel
v.eadr, // Vendor Email Address
d.sn35, // Ship To Name
d.s135, // Ship To Address 1
d.s235, // Ship To Address 2
d.s335, // Ship To Address 3
d.scity, // Ship To City
d.sstac, // Ship To State Code
d.shpzp, // Ship to Zip
d.scntr, // Ship to Country
d.stele, // Ship to Telephone
d.eadr, // Ship to Email Address
c.sn35, // bill To Name
c.s135, // Bill To Address 1
d.s235, // Bill To Address 2
c.s335, // Bill To Address 3
c.scity, // Bill To City
c.sstac, // Bill To State Code
c.shpzp, // Bill To Zip
c.scntr, // Bill To Country
c.stele, // Bill To Telehpone
c.eadr // Bill to Email
into :Order, // Purchase Order Number
:OrdRev, // Revision Number
:OrdRevDt, // Revision Date
:Pocmpdt, // PO Complete Date
:Shpvids, // Ship Via Descirption
:Terms, // Terms Description
:rpprt, // Reprint Code
:EmlPO, // Send PO as Email
:Buynm, // Buyer FileName
:BuyTel, // Buyer Telephone
:Buyeadr, // Buyer Email
:VName, // Vendor Name
:Vadd1, // Vendor Address 1
:Vadd2, // Vendor Address 2
:Vadd3, // Vendor Address 3
:Vcity, // Vendor City
:Vstac, // Vendor State Code
:Vzipc, // Vendor Zip
:Vcntr, // Vendor Country
:Vtel, // Vendor Telphone
:Veadr, // Vendor Email
:Shptnm, // Ship To Name
:Shptst1, // Ship to Address 1
:Shptst2, // Ship to Address 2
:Shptst3, // Ship to Address 3
:Shptcty, // Ship to City
:Shptstc, // Ship to State
:ShptZip, // Ship to Zip
:Shptcnt, // Ship to Country
:cnteml, // Contact Email
:Bname, // Bill To FileName
:BAdd1, // Bill to Address 1
:Badd2, // Bill to Address 2
:Badd3, // Bill to Address 3
:Bcity, // Bill to City
:Bstc, // Bill to State Code
:Bzip, // Bill to zip
:Bcntr, // Bill to Country
:BTel, // Bill to Telephone
:Beadr // Bill to Email
from amflibn.pomast as p
join amflibn.vennam as v
on p.vndnr = v.vndnr
join amflibn.buyerf as b
on p.buyno = b.buyno
left outer join amflibn.termsf as t
on p.trmcd = t.trmcd
left outer join amflibn.shipvf as s
on p.viacd = s.viacd
join amflibn.shpmst as d
on p.shpid = d.shpid
and p.house = d.house
join amflibn.shpmst as c
on p.bilid = c.shpid
and p.house = c.house
where p.ORDNO = 'P974625';
XMLdata = '<?xml version="1.0" encoding="UTF-8"?>'
+ '<PurchaseOrder>'
+ '<Header>'
+ '<OrderNumber>' + %trim(Order) +'</OrderNumber>'
+ '<OrderRev>' + %char(OrdRev) +'</OrderRev>'
+ '<OrderRevDate>' + %char(OrdRevDt) + '</OrderRevDate>'
+ '<ShipVia>' + %trim(Shpvids) + '</ShipVia>'
+ '<Terms>' + %trim(Terms) + '</Terms>'
+ '<ReprintCode>' + %trim(rpprt) + '</ReprintCode>'
+ '<EmailPO>' + %trim(EmlPO) + '</EmailPO>'
+ '<BuyerName>' +%trim(Buynm) + '</BuyerName>'
+ '<BuyerTel>' + %trim(BuyTel) + '</BuyerTel>'
+ '<BuyerEadr>' + %trim(Buyeadr) + '</BuyerEadr>'
+ '<VendorName>' + %trim(VName) + '</VendorName>'
+ '<VendorAddress1>' + %trim(Vadd1) + '</VendorAddress1>'
+ '<VendorAddress2>' + %trim(Vadd2) + '</VendorAddress2>'
+ '<VendorAddress3>' + %trim(Vadd3) + '</VendorAddress3>'
+ '<VendorCity>' + %trim(Bcity) + '</VendorCity>'
+ '<VendorState>' + %trim(Bstc) + '</VendorState>'
+ '<VendorZip>' + %trim(Bzip) + '</VendorZip>'
+ '<VendorCountry>' + %trim(Vcntr) + '</VendorCountry>'
+ '<VendorTel>' + %trim(Vtel) + '</VendorTel>'
+ '<VendorEmail>' + %trim(Veadr) +'</VendorEmail>'
+ '<ShipToName>' + %trim(Shptnm) + '</ShipToName>'
+ '<ShipToStreet1>' + %trim(BAdd1) + '</ShipToStreet1>'
+ '<ShipToStreet2>' + %trim(BAdd2) + '</ShipToStreet2>'
+ '<ShipToStreet3>' + %trim(BAdd3) + '</ShipToStreet3>'
+ '<ShipToCity>' + %trim(Shptcty) + '</ShipToCity>'
+ '<ShipToState>' + %trim(Shptstc) + '</ShipToState>'
+ '<ShipToZip>' + %trim(Bzip) + '</ShipToZip>'
+ '<ShipToCountry>' + %trim(Shptcnt) + '</ShipToCountry>'
+ '<ContactName>' + %trim(Shptcnt) + '<ContactName>'
+ '<ContactEmail>' + %trim(cnteml) + '<ContactEmail>'
+ '<BillToName>' + %trim(Bname) + '</BillToName>'
+ '<BillToStreet1>' + %trim(Shptst1) + '</BillToStreet1>'
+ '<BillToStreet2>' + %trim(Shptst2) + '</BillToStreet2>'
+ '<BillToStreet3>' + %trim(Shptst3) + '</BillToStreet3>'
+ '<BillToCity>' + %trim(Shptcty) + '</BillToCity>'
+ '<BillToState>' + %trim(Shptstc) + '</BillToState>'
+ '<BillToZip>' + %trim(ShptZip) + '</BillToZip>'
+ '<BillToCountry>' + %trim(Bcntr) + '</BillToCountry>'
+ '<ContactName>' + %trim(BTel) + '<ContactName>'
+ '<ContactEmail>' + %trim(Beadr) + '<ContactEmail>'
+ '</Header>'
+ '<Detail>';
我不知道如何进行进一步的调试。任何帮助都会很棒。对于 RGPLE 语言来说还是个新手。如果您知道从数据库和 XML 文件中获取此信息的更好方法,我洗耳恭听。
经过大量挖掘之后。问题是我有一个外部联接,这将导致返回结果中出现空值。 RPGLE 不能很好地处理空字段,需要格外小心。但是,如果您将可能具有空值的列包装在合并中返回,则可以解决问题。
还要确保您正在查看 SQL 错误代码。