Since Alpha added this nice little section, and since people keep asking for this, I've decided to be the first to post part of a script here. This sends a report to WinFax using DDE. There are a couple lines refencing a v5 command [ last_printer = report.printer_override("WinFax") ] so don't use it yet. It's just a little enhancement you can add in a few months.
Jim
'Found the original, added a few comments, and show which
'section refers to v5 enhancements that you should only add
'later.
It's a bit lng, but here it is.
'
IDLE_MODE: ' INITIALIZE GENERIC WINFAX STUFF
DDE_TERMINATE_ALL() ' CLOSE ALL EXISTING DDE CONNECTIONS
ON ERROR GOTO DDE_ERROR ' SET ERROR TRAP
' WHILE WINFAX SAYS TO USE THE FOLLOWING 4 LINES WE'VE HAD EFFICIENCY PROBLEMS WITH THEM AND DROPPED ALL "CHANNEL1"
CHANNEL1 = DDE_INITIATE("FAXMNG32", "CONTROL") ' SPECIFY WHICH PROGRAM
ON ERROR GOTO 0
DDE_EXECUTE(CHANNEL1, "GoIdle") ' TELL WINFAX NOT TO DO ANYTHING
DDE_TERMINATE(CHANNEL1) ' CLEAR THE CHANNEL
'
'****************************** FOLLOWING SECTION IS ONLY FOR FUTURE REFERENCE FOR ENHANCING IN v5 ****************
' CAN DO A UI_RADIO HERE TO DETERMINE HOW IT GOES OUT (FAX, PRINT, PREVIEW, EMAIL, ETC) SEEN BELOW IN REMmed LINES REFERENCING
' PrintOrFax. PUT HERE FOR v5 USE.
' I DIDN'T CHECK THE UI_ LINES FOR SYNTAX - JUST RUFFED IT IN FOR THIS TEXT COPY
' PrintOrFax = UI_RADIO_GET("FAX OPTIONS", 1, "FAX", "PRINT", "PREVIEW", "E-MAIL", 48)
' Uses a v5 command which lets you change to output to report's printer. Added here for your future use in a more powerful output controller.
' Actually would use it in a SELECT and use report.print, report.preview, etc. Just added it here as a tease.
'SELECT
' CASE RIGHT (PrintOrFax, 3) = "FAX"; last_printer = report.printer_override("WinFax")
' CASE RIGHT (PrintOrFax, 3) = "EMAIL";
' CASE RIGHT (PrintOrFax, 5) = "PRINT"; last_printer = report.printer_override("HP 970")
' CASE RIGHT (PrintOrFax, 3) = "PREVIEW"; last_printer = report.printer_override("HP 970")
'END SELECT
' YOU COULD COMBINE THESE OPTIONS IN TO THE ABOVE FOR v5
'****************************** END OF SECTION FOR FUTURE REFERENCE FOR ENHANCING IN v5 ****************
PrintOrFax = UI_RADIO_GET("FAX OPTIONS", 1, "FAX NOW WITHOUT COVER", "FAX NOW WITH COVER", "FAX NOW WITHOUT COVER",
"FAX LATER WITH COVER", 48)
'
SEND_FAX:
FaxNbr = trim(YOUR_TABLE->FAX)
' WE DIDN'T SAVE THE FORMATTING CHARS IN OUR v1 DATA (ANOTHER THING TO FIX ON MOVING DATA).
' IF YOU ARE SMARTER THAN US AND DID YOU'LL HAVE TO MODIFY LEFT(FaxNbr, 3) and RIGHT(FaxNbr,7)
IF LEFT(FaxNbr, 3) = "703" THEN ' OUR AREA CODE IS 703. IF FAXING TO SAME, DROP THE AREA CODE
FaxNbr = RIGHT(FaxNbr, 7)
ELSE
FaxNbr = "1" + FaxNbr ' OTHERWISE ADD A "1" FOR LONG DISTANCE ACCESS
END IF
'
FaxNm = LEFT(TRIM(YOUR_TABLE->FULL_NAME), 30) ' RECEIVER'S NAME (most will be using trim(FirstName) + " " + trim(LastName)
'
BillingCode = TRIM(ANOTHER_TABLE->LOAN_NBR) ' CAN SET THIS AND NEXT IN A SELECT OR WHATEVER.
KeyWord = "LATE_NOTICE"
FaxRes = "LOW" ' WILL DISPLAY AS "STANDARD" IN WinFax. OTHER OPTION IS "HIGH"
'
if left(PrintOrFax, 7) = "FAX NOW" then
SendTime = TIME() ' IF YOU'RE SEND A LOT OF FAXES (AS IN A LOOP), ADD 5 OR 10 MINUTES SO YOU DON'T SLOW DOWN THE LOOP
else
SendTime = "19:30:00"
end if
'
SendDate = DTOC(DATE()); SendDate = left(SendDate, 6) + right(SendDate, 2) ' EXPECTED FORMAT IS MM/DD/YY
'
CHANNEL2 = DDE_INITIATE("FAXMNG", "TRANSMIT") ' SEND RECIPIENT INFO AND PRINT TO FAX
'
' (WinFax's format is "sendfax", "recipient("FaxNbr","SendTime","SendDate ","FaxNm","FaxToCompanyName","FaxSubject","KeyWord","BillingCode")") and MUST
' have the transferred fields surruonded by double quotes. Forgetting or messing them up is where most syntax erros occur.
'
DDE_POKE (CHANNEL2, "sendfax", "recipient("" + FaxNbr + "","" + SendTime + "","" + SendDate + "","" +FaxNm + "",,,"" + KEYWORD + "","" + BillingCode + "")")
'
SELECT ' SET ATTACHMENT BASED ON SOME SIMPLE LOGIC
CASE YOUR_TABLE->FIELD_NAME = REPORT_NAME_TRIGGER_VALUE_1; Report_To_Fax = "A5 Reprot Name You Want To Fax"
CASE YOUR_TABLE->FIELD_NAME = REPORT_NAME_TRIGGER_VALUE_N; Report_To_Fax = "A5 Report Name You Want To Fax"
CASE ELSE; ' YOU SHOULDN'T GET HERE
END SELECT
'
SELECT ' ALL SORTS OF ATTACHMENT TYPES. SEE WinFax HELP UNDER DDE
CASE YOUR_TABLE->FIELD_NAME = WHATEVER_TRIGGER_VALUE_1; AttachDoc = "C:Attachment_Doc_PathDesired_Doc.txt"
CASE YOUR_TABLE->FIELD_NAME = WHATEVER_TRIGGER_VALUE_N; AttachDoc = "C:Attachment_Doc_PathDesired_Doc.txt"
CASE ELSE; AttachDoc = ""
END SELECT
'
if AttachDoc > "" then
DDE_POKE (CHANNEL2, "sendfax", "attach("" + AttachDoc + "")")
end if
'
DDE_POKE (CHANNEL2, "sendfax", "resolution("" + FaxRes + "")")
'
'if right(PrintOrFax, 10) = "WITH COVER" then ' kept getting errors on this one, various rejected lines shown here
' CoverPg = "C:Program FilesSymanticWinFaxCoverSREPLY.CVP"
' DDE_POKE (CHANNEL2, "sendfax", "setcoverpage("" + CoverPg + "")")
' DDE_POKE (CHANNEL2, "sendfax", "setcoverpage("" + "C:Program FilesSymanticWinFaxCoverSREPLY.CVP" + "")")
' DDE_POKE (CHANNEL2, "sendfax", "setcoverpage(" + "Quick Cover Page" + ")")
'end if
' next DDE not as useful as DDE in next IF. All info is lost except for the FAX image
' DDE_POKE (CHANNEL2, "sendfax", "SendfaxUI")
'
' next check decides if to bring up the WinFax screen that lets you add and fill a cover page, set send time, select from phonebook, etc.
IF RIGHT (PrintOrFax, 10) = "WITH COVER" then
DDE_POKE (CHANNEL2, "sendfax", "ShowSendScreen("" + "1" + "")")
end if
'
RecToPrt = TableName->Unique_Key_Field
REPORT.PRINT(Report_To_Fax, "BETWEEN(TableName->Unique_Key_Field, RecToPrt, RecToPrt)")
'
CleanUp: ' RESET FAX STUFF
dde_terminate(CHANNEL2) ' CLEAR THE CHANNEL
'
ACTIVE_MODE:
CHANNEL4 = DDE_INITIATE("FAXMNG32", "CONTROL") ' SPECIFY WHICH PROGRAM
DDE_EXECUTE(CHANNEL4, "GoActive") ' TELL WINFAX IT'S OK TO GO BACK TO NORMAL
DDE_TERMINATE(CHANNEL4) ' CLEAR THE CHANNEL
'
goto Fin
'
'*****
'
DDE_ERROR: ' IF WINFAX IS LOADED THIS ISN'T NEEDED
SYS_SHELL("C:Program FilesSymanticWinFaxFAXMNG32.EXE") ' LOADS WINFAX IF IT'S NEEDED BUT NOT LOADED
ON ERROR GOTO 0
RESUME 0
'
'*****
Fin:
end
Jim
'Found the original, added a few comments, and show which
'section refers to v5 enhancements that you should only add
'later.
It's a bit lng, but here it is.
'
IDLE_MODE: ' INITIALIZE GENERIC WINFAX STUFF
DDE_TERMINATE_ALL() ' CLOSE ALL EXISTING DDE CONNECTIONS
ON ERROR GOTO DDE_ERROR ' SET ERROR TRAP
' WHILE WINFAX SAYS TO USE THE FOLLOWING 4 LINES WE'VE HAD EFFICIENCY PROBLEMS WITH THEM AND DROPPED ALL "CHANNEL1"
CHANNEL1 = DDE_INITIATE("FAXMNG32", "CONTROL") ' SPECIFY WHICH PROGRAM
ON ERROR GOTO 0
DDE_EXECUTE(CHANNEL1, "GoIdle") ' TELL WINFAX NOT TO DO ANYTHING
DDE_TERMINATE(CHANNEL1) ' CLEAR THE CHANNEL
'
'****************************** FOLLOWING SECTION IS ONLY FOR FUTURE REFERENCE FOR ENHANCING IN v5 ****************
' CAN DO A UI_RADIO HERE TO DETERMINE HOW IT GOES OUT (FAX, PRINT, PREVIEW, EMAIL, ETC) SEEN BELOW IN REMmed LINES REFERENCING
' PrintOrFax. PUT HERE FOR v5 USE.
' I DIDN'T CHECK THE UI_ LINES FOR SYNTAX - JUST RUFFED IT IN FOR THIS TEXT COPY
' PrintOrFax = UI_RADIO_GET("FAX OPTIONS", 1, "FAX", "PRINT", "PREVIEW", "E-MAIL", 48)
' Uses a v5 command which lets you change to output to report's printer. Added here for your future use in a more powerful output controller.
' Actually would use it in a SELECT and use report.print, report.preview, etc. Just added it here as a tease.
'SELECT
' CASE RIGHT (PrintOrFax, 3) = "FAX"; last_printer = report.printer_override("WinFax")
' CASE RIGHT (PrintOrFax, 3) = "EMAIL";
' CASE RIGHT (PrintOrFax, 5) = "PRINT"; last_printer = report.printer_override("HP 970")
' CASE RIGHT (PrintOrFax, 3) = "PREVIEW"; last_printer = report.printer_override("HP 970")
'END SELECT
' YOU COULD COMBINE THESE OPTIONS IN TO THE ABOVE FOR v5
'****************************** END OF SECTION FOR FUTURE REFERENCE FOR ENHANCING IN v5 ****************
PrintOrFax = UI_RADIO_GET("FAX OPTIONS", 1, "FAX NOW WITHOUT COVER", "FAX NOW WITH COVER", "FAX NOW WITHOUT COVER",
"FAX LATER WITH COVER", 48)
'
SEND_FAX:
FaxNbr = trim(YOUR_TABLE->FAX)
' WE DIDN'T SAVE THE FORMATTING CHARS IN OUR v1 DATA (ANOTHER THING TO FIX ON MOVING DATA).
' IF YOU ARE SMARTER THAN US AND DID YOU'LL HAVE TO MODIFY LEFT(FaxNbr, 3) and RIGHT(FaxNbr,7)
IF LEFT(FaxNbr, 3) = "703" THEN ' OUR AREA CODE IS 703. IF FAXING TO SAME, DROP THE AREA CODE
FaxNbr = RIGHT(FaxNbr, 7)
ELSE
FaxNbr = "1" + FaxNbr ' OTHERWISE ADD A "1" FOR LONG DISTANCE ACCESS
END IF
'
FaxNm = LEFT(TRIM(YOUR_TABLE->FULL_NAME), 30) ' RECEIVER'S NAME (most will be using trim(FirstName) + " " + trim(LastName)
'
BillingCode = TRIM(ANOTHER_TABLE->LOAN_NBR) ' CAN SET THIS AND NEXT IN A SELECT OR WHATEVER.
KeyWord = "LATE_NOTICE"
FaxRes = "LOW" ' WILL DISPLAY AS "STANDARD" IN WinFax. OTHER OPTION IS "HIGH"
'
if left(PrintOrFax, 7) = "FAX NOW" then
SendTime = TIME() ' IF YOU'RE SEND A LOT OF FAXES (AS IN A LOOP), ADD 5 OR 10 MINUTES SO YOU DON'T SLOW DOWN THE LOOP
else
SendTime = "19:30:00"
end if
'
SendDate = DTOC(DATE()); SendDate = left(SendDate, 6) + right(SendDate, 2) ' EXPECTED FORMAT IS MM/DD/YY
'
CHANNEL2 = DDE_INITIATE("FAXMNG", "TRANSMIT") ' SEND RECIPIENT INFO AND PRINT TO FAX
'
' (WinFax's format is "sendfax", "recipient("FaxNbr","SendTime","SendDate ","FaxNm","FaxToCompanyName","FaxSubject","KeyWord","BillingCode")") and MUST
' have the transferred fields surruonded by double quotes. Forgetting or messing them up is where most syntax erros occur.
'
DDE_POKE (CHANNEL2, "sendfax", "recipient("" + FaxNbr + "","" + SendTime + "","" + SendDate + "","" +FaxNm + "",,,"" + KEYWORD + "","" + BillingCode + "")")
'
SELECT ' SET ATTACHMENT BASED ON SOME SIMPLE LOGIC
CASE YOUR_TABLE->FIELD_NAME = REPORT_NAME_TRIGGER_VALUE_1; Report_To_Fax = "A5 Reprot Name You Want To Fax"
CASE YOUR_TABLE->FIELD_NAME = REPORT_NAME_TRIGGER_VALUE_N; Report_To_Fax = "A5 Report Name You Want To Fax"
CASE ELSE; ' YOU SHOULDN'T GET HERE
END SELECT
'
SELECT ' ALL SORTS OF ATTACHMENT TYPES. SEE WinFax HELP UNDER DDE
CASE YOUR_TABLE->FIELD_NAME = WHATEVER_TRIGGER_VALUE_1; AttachDoc = "C:Attachment_Doc_PathDesired_Doc.txt"
CASE YOUR_TABLE->FIELD_NAME = WHATEVER_TRIGGER_VALUE_N; AttachDoc = "C:Attachment_Doc_PathDesired_Doc.txt"
CASE ELSE; AttachDoc = ""
END SELECT
'
if AttachDoc > "" then
DDE_POKE (CHANNEL2, "sendfax", "attach("" + AttachDoc + "")")
end if
'
DDE_POKE (CHANNEL2, "sendfax", "resolution("" + FaxRes + "")")
'
'if right(PrintOrFax, 10) = "WITH COVER" then ' kept getting errors on this one, various rejected lines shown here
' CoverPg = "C:Program FilesSymanticWinFaxCoverSREPLY.CVP"
' DDE_POKE (CHANNEL2, "sendfax", "setcoverpage("" + CoverPg + "")")
' DDE_POKE (CHANNEL2, "sendfax", "setcoverpage("" + "C:Program FilesSymanticWinFaxCoverSREPLY.CVP" + "")")
' DDE_POKE (CHANNEL2, "sendfax", "setcoverpage(" + "Quick Cover Page" + ")")
'end if
' next DDE not as useful as DDE in next IF. All info is lost except for the FAX image
' DDE_POKE (CHANNEL2, "sendfax", "SendfaxUI")
'
' next check decides if to bring up the WinFax screen that lets you add and fill a cover page, set send time, select from phonebook, etc.
IF RIGHT (PrintOrFax, 10) = "WITH COVER" then
DDE_POKE (CHANNEL2, "sendfax", "ShowSendScreen("" + "1" + "")")
end if
'
RecToPrt = TableName->Unique_Key_Field
REPORT.PRINT(Report_To_Fax, "BETWEEN(TableName->Unique_Key_Field, RecToPrt, RecToPrt)")
'
CleanUp: ' RESET FAX STUFF
dde_terminate(CHANNEL2) ' CLEAR THE CHANNEL
'
ACTIVE_MODE:
CHANNEL4 = DDE_INITIATE("FAXMNG32", "CONTROL") ' SPECIFY WHICH PROGRAM
DDE_EXECUTE(CHANNEL4, "GoActive") ' TELL WINFAX IT'S OK TO GO BACK TO NORMAL
DDE_TERMINATE(CHANNEL4) ' CLEAR THE CHANNEL
'
goto Fin
'
'*****
'
DDE_ERROR: ' IF WINFAX IS LOADED THIS ISN'T NEEDED
SYS_SHELL("C:Program FilesSymanticWinFaxFAXMNG32.EXE") ' LOADS WINFAX IF IT'S NEEDED BUT NOT LOADED
ON ERROR GOTO 0
RESUME 0
'
'*****
Fin:
end
Comment