|
Ravi, You have to use the offsets from the record format structure. QDBRTVFD is one of the most convoluted APIs ever written, any API that requires a 105 page include structure is trying to do way to much. It does everything, but nothing is strait forward. I have attached a piece of code to help you sort through the offsets. First the re-definition of the heading, format, and key structures. Then the code that parses out the key fields. DKeyInfOff S 5I 0 DAPIKeyHdr DS BASED(pAPIKeyHdr) D APIRtnLen LIKE(QDBBR) Length returned. D APIAvlLen LIKE(QDBBA) Length available. D APIMaxKeyLen LIKE(QDBMKL) Max key length. D APIKeyCnt LIKE(QDBKC) Max key count. D KeyRes01 LIKE(QDBERVED01) Reserved. D APIRcdFmtCnt LIKE(QDBFC01) Record format count. D******************************************** D* API Record Format Key Information Array. * D******************************************** DAPIRcdFmtInf DS BASED(pAPIRcdFmtInf) D APIRcdFmt LIKE(QDBRN00) D RcdRes01 LIKE(QDBRSV102) D APINbrKey LIKE(QDBNBROK00) D RcdRes02 LIKE(QDBRSV202) D APIKeyOff LIKE(QDBKIO00) D************************************ D* API Key Field Information Array. * D************************************ DAPIKeyFldInf DS BASED(pAPIKeyFldInf) D APIIntKeyFld LIKE(QDBIFN) D APIExtKeyFld LIKE(QDBEFN) D APIKeyFldTyp LIKE(QDBDT01) D APIKeyFldLen LIKE(QDBFL) D APIKeyNumDig LIKE(QDBNBROD) D APIKeyDecPos LIKE(QDBDP) D APIKeyFldAtr LIKE(QDBBITS56) D APIAltNamLen LIKE(QDBANL) D APIKeyAltNam LIKE(QDBAN) D KeyFldRes01 LIKE(QDBRSV103) D APIAddKeyAtr LIKE(QDBBITS67) D KeyFldRes02 LIKE(QDBRSV203) ... C* Set address to API key field header C EVAL pAPIKeyHdr = %ADDR(APIKeyInf) C* C* Set initial key information offset to length of key field header C EVAL KeyInfOff = %LEN(APIKeyHdr) C* C* Set initial address to record format information C EVAL pAPIRcdFmtInf = pAPIKeyHdr + KeyInfOff C* C* Set record format count C EVAL RcdFmtCnt = APIRcdFmtCnt C* C* Create data structure for record formats C EVAL RcdFmtStr = CrtDtaStr(%SIZE(RcdFmt): C RcdFmtCnt) C* C* Process each record format C DO RcdFmtCnt RcdFmtOcc C* C* Set occurrence of record format data structure C EVAL pRcdFmt = DtaStrOcc(RcdFmtStr:RcdFmtOcc) C* C* Set record format name C EVAL RcdFmtNam = APIRcdFmt C* C* Set record format key count C EVAL RcdFmtKeyCnt = APINbrKey C* C* Increment key information offset by length of record format information C EVAL KeyInfOff = KeyInfOff + C %LEN(APIRcdFmtInf) C* C* Create data structure for key fields C EVAL KeyFldStr = CrtDtaStr(%SIZE(KeyFld): C APINbrKey) C* C* Process each key field C DO RcdFmtKeyCnt KeyFldOcc C* C* Set occurrence of key field data structure C EVAL pKeyFld = DtaStrOcc(KeyFldStr:KeyFldOcc) C* C* Set API key field address C EVAL pAPIKeyFldInf = pAPIKeyHdr + APIKeyOff + C (%LEN(APIKeyFldInf) * C (KeyFldOcc-1)) C* C* Key field name C EVAL KeyFldNam = APIExtKeyFld C* C* Check if descending key C TESTB '0' APIKeyFldAtr 01 C IF *IN01 = *ON C EVAL KeyFldDsc = *ON C ELSE C EVAL KeyFldDsc = *OFF C ENDIF C* C* Increment key information offset by length of key field information C EVAL KeyInfOff = KeyInfOff + %LEN(APIKeyFldInf) C ENDDO C* C* Set next record format address C EVAL pAPIRcdFmtInf = pAPIKeyHdr + KeyInfOff C ENDDO David Morris >>> Ravi Kumar <RKumar@manhattanassociates.com> 04/13 6:53 AM >>> Hi All, I'm using File API Retrieve Data base File description QDBRTVFD with format parameter as FILD0300(Key field information template). I copied the data structure from QSYSINC/QRPGSRC, according to the data structure i should get no. of keys in pos. 13 to 14 but i don't get that no. in those positions and i also i don't get name of the record in pos. 1 to 10. Any suggestions would be greatly appreciated. TIA Ravi +--- | This is the Midrange System Mailing List! | To submit a new message, send your mail to MIDRANGE-L@midrange.com. | To unsubscribe from this list send email to MIDRANGE-L-UNSUB@midrange.com. | Questions should be directed to the list owner/operator: david@midrange.com +---
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.