Generate an HTML or RTF file, using the
CopyText
fromTemplate= command
Use a JavaScript function to have the file converted into PDF
format via MS Word
Example We add a button "Order confirmation PDF"
in the initial screen of VA03:
In VA03 the document looks as follows::
When the user presses our new button the following PDF is generated
and displayed:
We start the implementation by creating a template file for the order
confirmation document in MS Word.
For each variable part of the document, we use an
expression &[varname] where varname is the name of a GuiXT variable.
For tables we create only one row and use
the notation &[varname###] in the table cells. GuiXT will replace
### by 1,2,3,... and generate the correct number of table rows.
We save the template document in MS Word as RTF file.
Important hint: The expressions
&V[varname] can be in any format you like (font, size, color,...) but no
format changes are allowed within the expression. To assure this, we
suggest you first copy the expression &[varname] into a simple editor
such as notepad.exe and then copy it from there into the template
document.
For the example above we use the following
template file:
Here is a list of the GuiXT variables used in the template:
Order header &[oh.doc_date] &[oh.purch_no]
&[oh.currency]
Order items &[oi.no.###] &[oi.material.###]
&[oi.text.###] &[oi.qty.###] &[oi.unit.###] &[oi.value.###]
Total price &[total_value]
The InputScript reads the order data via BAPIs, then reads the RTF
template into a GuiXT text variable, having all template variables
replaced by GuiXT, and saves the result as a temporary RTF file. Finally
a JavaScript funtion is called up, and it converts the RTF file into a
PDF, using MS Word automation.
InputScript
GuiXT
// current order number in VA03 screen
Set V[ordernumber] "&F[Order]"
// order number specified?
if not V[ordernumber]
Message "E: Please enter an order number" -statusline
Return
endif
// Part 1: Read data into GuiXT variables
// strutures/tables for BAPI calls and RTF generation
CreateStructure V[oh] doc_date purch_no sold_to sales_org currency
CreateTable V[oi] no material text qty unit value currency
CreateStructure V[addr] name city street postl_code
CreateStructure V[item] itm_number material short_text _
cum_cf_qty sales_unit net_value
CreateTable V[items] include=V[item]
// Try to read order
Call BAPI_SALESORDER_GETDETAILBOS -try _
export.SALESDOCUMENT="ordernumber" _
import.ORDERHEADER="oh"
import.ORDERITEMS="items"
// order number valid?
if not V[oh.sold_to]
Message "E: Please enter a valid order number" -statusline
Return
endif
Set V[k] 1
Set V[total_value] 0
label next_item
ReadRow V[item] table=V[items] index=&V[k]
if Q[ok]
Set V[oi.no.&V[k]] "&V[item.itm_number]" + 0 // to remove leading zeros
Set V[oi.material.&V[k]] "&V[item.material]"
Set V[oi.text.&V[k]] "&V[item.short_text]"
// read number of decimal places for given unit
Call RSW_UNIT_DECIMALS_GET cache="session" _
export.I_UNIT="item.sales_unit" _
import.E_decimals="mydecimals"
// format quantity accordung to unit
Set V[oi.qty.&V[k]] "&V[item.cum_cf_qty]" + 0 decimals="&V[mydecimals]" _
decimalSeparator="," groupSeparator="."
Set V[oi.unit.&V[k]] "&V[item.sales_unit]"
// net value
Set V[oi.value.&V[k]] "&V[item.net_value]" + 0 _
decimals=2 decimalSeparator="," groupSeparator="."
// add to total value
Set V[total_value] "&V[total_value]" + "&V[oi.value.&V[k]]" _
decimals=2 decimalSeparator="," groupSeparator="."
// increase item number
Set V[k] &V[k] + 1
goto next_item
endif
// Read customer address
Call BAPI_CUSTOMER_GETDETAIL _
export.CUSTOMERNO="oh.sold_to" _
export.PI_SALESORG="oh.sales_org" _
import.PE_ADDRESS="addr"
// Part 2: Generate PDF
// temporary file names
Set V[rtffile] "&%[TEMP]\guixt.orderconfirmation.&V[today_y-m-d hms].rtf"
Set V[pdffile] "&%[TEMP]\guixt.orderconfirmation.&V[today_y-m-d hms].pdf"
// copy template RTF into a text variable, replace all variables
CopyText fromTemplate="E:\wordjs\orderconfirmation.template.rtf" toText="temp"
// copy to RTF file
CopyText fromText="temp" toFile="&V[rtffile]"
// convert RTF to PDF
CallJS convertfile "&V[rtffile]" "&V[pdffile]"
// open PDF
Start "&V[pdffile]"
Return