/* RUN w:\ttexport.p */
/* (INPUT TEMP-TABLE tt-User:HANDLE, */
/* INPUT "c:\temp\fwdcovtt.csv"). */
&SCOPED-DEFINE IO_DELIMITER ","
DEFINE INPUT PARAMETER ipHandle AS HANDLE NO-UNDO.
DEFINE INPUT PARAMETER ipFile AS CHARACTER NO-UNDO.
RUN ExportTempTableToCrystalTextFile
(INPUT TABLE-HANDLE ipHandle,
INPUT ipFile,
INPUT "blah",
INPUT "FOR EACH " + ipHandle:NAME,
INPUT TRUE,
INPUT "").
PROCEDURE ExportTempTableToCrystalTextFile :
/*------------------------------------------------------------------------------
Purpose: Dump Content of TT to a specified txt file...
Parameters: iphTempTableHandle - Temp Table Handle
iplvReportFile - Txt file
iplvReportTitle - Report Header for use in text files.
iplvCustomQueryString - Custom query string if you dont want
a standard FOR EACH...
Notes:
------------------------------------------------------------------------------*/
DEFINE INPUT PARAMETER TABLE-HANDLE iphTempTableHandle.
DEFINE INPUT PARAMETER iplvReportFile AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER iplvReportTitle AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER iplvCustomQueryString AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER iplvSuppressNameTitle AS LOGICAL NO-UNDO.
DEFINE INPUT PARAMETER ipFiltersSelected AS CHARACTER NO-UNDO.
DEFINE VARIABLE lhQuery AS HANDLE NO-UNDO.
DEFINE VARIABLE lhBuffer AS HANDLE NO-UNDO.
DEFINE VARIABLE lhField AS HANDLE NO-UNDO.
DEFINE VARIABLE lvReportFile AS CHARACTER NO-UNDO.
DEFINE VARIABLE lvNoOfFieldsToPrint AS INT NO-UNDO.
DEFINE VARIABLE lvCounter AS INT NO-UNDO.
DEFINE VARIABLE lvReportHeader AS CHARACTER NO-UNDO.
DEFINE VARIABLE lvQueryString AS CHARACTER NO-UNDO.
DEFINE VARIABLE lvCastDataType AS CHARACTER NO-UNDO.
DEFINE VARIABLE lvi AS INTEGER NO-UNDO.
IF NOT iphTempTableHandle:HAS-RECORDS THEN
DO:
IF VALID-HANDLE(iphTempTableHandle) THEN
DELETE OBJECT iphTempTableHandle NO-ERROR.
RETURN.
END.
DO ON ERROR UNDO, RETURN
ON STOP UNDO, RETURN:
CREATE BUFFER lhBuffer FOR TABLE iphTempTableHandle:DEFAULT-BUFFER-HANDLE.
CREATE QUERY lhQuery.
IF NOT lhQuery:SET-BUFFERS(lhBuffer) THEN
RETURN.
IF iplvCustomQueryString NE "" THEN
lvQueryString = iplvCustomQueryString.
ELSE
lvQueryString = "FOR EACH " + iphTempTableHandle:NAME.
IF NOT lhQuery:QUERY-PREPARE(lvQueryString) THEN
RETURN.
IF NOT lhQuery:QUERY-OPEN THEN
RETURN.
OUTPUT TO VALUE(iplvReportFile).
IF NOT iplvSuppressNameTitle THEN
PUT UNFORMATTED
QUOTER("GV_NAME_FOR_REPORTS") {&IO_DELIMITER}
QUOTER("GV_CURRENT_USER_NAME") {&IO_DELIMITER}
QUOTER("REPORT_TITLE") {&IO_DELIMITER}
QUOTER("Filter Selection") {&IO_DELIMITER}.
lhQuery:GET-FIRST().
/* Once We have a record ... outoput HEADER ROW... */
IF lhBuffer:AVAILABLE THEN
DO:
ASSIGN lvNoOfFieldsToPrint = lhBuffer:NUM-FIELDS.
DO lvCounter = 1 TO lvNoOfFieldsToPrint :
lhField = lhBuffer:BUFFER-FIELD(lvCounter) NO-ERROR.
IF ERROR-STATUS:ERROR THEN
RETURN.
IF lhField:EXTENT GT 0 THEN
DO lvi = 1 TO lhField:EXTENT:
ASSIGN lvReportHeader = lhField:NAME
lvReportHeader = lvReportHeader + "_" + STRING(lvi).
PUT UNFORMATTED QUOTER(lvReportHeader).
IF lvi < lhField:EXTENT THEN
PUT UNFORMATTED {&IO_DELIMITER}.
END.
ELSE
DO:
ASSIGN lvReportHeader = lhField:NAME.
PUT UNFORMATTED QUOTER(lvReportHeader).
END.
IF lvCounter < lvNoOfFieldsToPrint THEN
PUT UNFORMATTED {&IO_DELIMITER}.
END. /* lvCounter = 1 TO lvNoOfFieldsToPrint */
PUT SKIP.
END. /* IF lhBuffer:AVAILABLE THEN */
DO WHILE NOT lhQuery:QUERY-OFF-END:
lvCounter = 0.
DO lvCounter = 1 TO lvNoOfFieldsToPrint :
lhField = lhBuffer:BUFFER-FIELD(lvCounter) NO-ERROR.
IF VALID-HANDLE(lhField) THEN
DO:
IF lhField:HELP NE "" THEN
ASSIGN lvCastDataType = lhField:HELP.
ELSE
ASSIGN lvCastDataType = "STRING".
IF lhField:EXTENT GT 0 THEN
DO lvi = 1 TO lhField:EXTENT:
CASE lvCastDataType :
WHEN "CHARACTER" OR
WHEN "STRING" THEN
PUT UNFORMATTED QUOTER(lhField:BUFFER-VALUE(lvi)).
WHEN "FORCECHAR" THEN
PUT UNFORMATTED "=" QUOTER(lhField:BUFFER-VALUE(lvi)).
/* To be completed as / if required */
OTHERWISE
PUT UNFORMATTED lhField:BUFFER-VALUE(lvi).
END CASE.
IF lvi < lhField:EXTENT THEN
PUT UNFORMATTED {&IO_DELIMITER}.
END.
ELSE
DO:
CASE lvCastDataType :
WHEN "CHARACTER" OR
WHEN "STRING" THEN
PUT UNFORMATTED QUOTER(lhField:BUFFER-VALUE).
WHEN "FORCECHAR" THEN
PUT UNFORMATTED "=" QUOTER(lhField:BUFFER-VALUE).
/* To be completed as / if required */
OTHERWISE
PUT UNFORMATTED lhField:BUFFER-VALUE .
END CASE.
END.
END.
IF lvCounter < lvNoOfFieldsToPrint THEN
PUT UNFORMATTED {&IO_DELIMITER}.
END.
PUT SKIP.
lhQuery:GET-NEXT().
END.
OUTPUT CLOSE.
IF VALID-HANDLE(lhQuery) THEN
DELETE OBJECT lhQuery NO-ERROR.
IF VALID-HANDLE(lhBuffer) THEN
DELETE OBJECT lhBuffer NO-ERROR.
IF VALID-HANDLE(lhField) THEN
DELETE OBJECT lhField NO-ERROR.
IF VALID-HANDLE(iphTempTableHandle) THEN
DELETE OBJECT iphTempTableHandle NO-ERROR.
{&ResetError}
END.
END PROCEDURE.