Introduction to SmartForms
SmartForms is SAP's powerful tool for designing and creating business documents. When you execute a SmartForm, it generates a function module that provides a layout for creating business documents. These documents can be downloaded in PDF format or sent via email to users outside the SAP system.
Key Characteristics
• Purpose: Create business documents like sales orders, material master data, purchase orders, and invoices
• Transaction Code: SMARTFORMS
• Output: Generated function module that can be called from ABAP programs
• Flexibility: Documents can be exported as PDF or sent via email
SmartForm Structure Overview
SmartForms consist of two main subfolders:
1. Global Settings
Form Attributes
Contains all generic information about the SmartForm, including basic configuration and metadata.
Form Interface
This acts as the interface of the function module that will be generated by the SmartForm.
It enables:
• Input: Send data from ABAP programs to the SmartForm
• Output: Receive processed data from the SmartForm
Global Definitions
Defines global data objects, types, and values available throughout the SmartForm:
a. Global Data • Define global variables like internal tables, work areas, and normal variables
• Available throughout the entire SmartForm execution
b. Types
• Create global table types and structures
• Reusable data type definitions
c. Field Symbol
• Dynamic data referencing capabilities
d. Initialization
• Contains logic that executes at the beginning of SmartForm processing
• Used for initial data preparation and calculations
e. Form Routine
• Define subroutines for complex business logic
• Modular code organization
f. Currency/Quantity Field
• Pass reference fields for currency or quantity columns
• Ensures proper formatting and decimal places
2. Pages and Windows
Contains the visual layout structure with pages and windows. A default Main Window is always available for every SmartForm.
Types of Windows in SmartForms
1. Main Window
• Default: Always available when creating any SmartForm
• Purpose: Display dynamic data that can flow from one page to another
• Auto-pagination: Automatically transfers content to the next page when current page is full
• Best Practice: Use for displaying table data due to automatic page break handling
2. Secondary Window
• Purpose: Display output of fixed length
• Usage: Template-based displays with predefined structure
• Default: Any window you create manually is a secondary window by default
3. Copy Window
• Special Case: Special type of secondary window
• Purpose: Making pages as "copy" or "original"
• Usage: Create duplicate versions of documents with different markers
4. Final Window
• Execution: Processes at the very end of SmartForm execution
• Purpose: Display content that should appear last
• Use Case: Summary information, totals, or final processing results
Data Display Approach in SmartForms
Fixed Data Display
For predetermined, fixed number of records:
• Method: Design templates with defined columns and rows
• Structure: Static layout with known data positions
Dynamic Data Display
For variable-length data with unpredictable size:
• Method: Create tables inside windows
• Automatic Looping: Tables provide built-in iteration over internal table data
• Configuration: Simply pass internal table and work area names
• Recommendation: Always use Main Window for table data to ensure proper pagination
Types of Text in SmartForms
1. Text Element
• Reusability: Non-reusable text
• Scope: Dedicated to only one section of the SmartForm
• Usage: Section-specific content that won't be reused elsewhere
2. Text Module
• Reusability: Fully reusable text
• Creation: Created via SMARTFORMS transaction code
• Scope: Can be reused across multiple SmartForms
• Management: Centralized text management for consistency
3. Include Text
• Creation: Created using SO10 transaction code
• Reusability: Can be reused in SmartForms, ABAP programs, and function modules
• Integration: Use standard function module READ_TEXT
to access in ABAP programs
• Flexibility: Highest level of reusability across SAP components
4. Dynamic Text
• Definition: Text passed at runtime during execution
• Standard Type: Uses SAP standard table type TSFTEXT
• Flexibility: Content determined during program execution
Styling and Formatting
SmartStyles (Transaction: SMARTSTYLES)
Configure text appearance including colors and alignment through two main folders:
Paragraph Format
• Purpose: Define font properties and colors for text
• Scope: Overall text block formatting
• Features: Font family, size, color, alignment
Character Format
• Purpose: Create barcodes for text elements
• Usage: Special formatting for specific characters or text segments
• Barcode Creation: Use SE73 transaction for creating or utilizing existing barcodes
• Syntax: <BA>&VARIABLE_NAME&<BA>
for barcode implementation
Graphics and Logo Integration
Adding Logos to SmartForms
Using Existing Graphics
• Availability: SAP provides numerous pre-installed logos and graphics
• Access: Browse available graphics during SmartForm design
Uploading Custom Images
• Transaction: SE78 for uploading images from local system
• Format Requirement: Images must be in BMP format
• Process: Upload via SE78, then reference in SmartForm graphics node
Converting SmartForms to PDF
PDF conversion is essential as it's the widely accepted format for business documents. The process involves three main steps:
Step 1: Extract OTF Data
• Format: Get Open Text Format (OTF) data from SmartForm
• Setting: Set GETOTF = 'X'
in control parameters
• Output: Raw SmartForm data in OTF format
Step 2: Convert OTF to PDF
• Function Module: CONVERT_OTF_2_PDF
• Input: OTF data from Step 1
• Output: PDF data in TLINE format
Step 3: Download PDF File
• Method: Use GUI_DOWNLOAD
function module or CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
• Important: Specify correct PDF file path to avoid data corruption
• Result: PDF file saved to local system
Sample Implementation Structure
" Step 1: Set control parameters for OTF extraction
DATA: ls_control TYPE ssfctrlop,
ls_output TYPE ssfcrescl.
ls_control-getotf = 'X'.
" Step 2: Call SmartForm function module
CALL FUNCTION 'YOUR_SMARTFORM_FM'
EXPORTING
control_parameters = ls_control
" other parameters
IMPORTING
job_output_info = ls_output.
" Step 3: Convert OTF to PDF
DATA: lt_pdf TYPE TABLE OF tline.
CALL FUNCTION 'CONVERT_OTF_2_PDF'
TABLES
otf = ls_output-otfdata
lines = lt_pdf.
" Step 4: Download PDF
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = 'path_to_pdf_file'
filetype = 'BIN'
TABLES
data_tab = lt_pdf.
Email Integration with SmartForms
SmartForms can be automatically sent as PDF attachments via email, useful for scheduled reports and automated document distribution.
Required SAP Classes
1. CL_BCS
• Purpose: Create send requests, add recipients, and send documents
• Core Functions: Email orchestration and delivery management
2. CL_DOCUMENT_BCS
• Purpose: Create documents and manage attachments
• Functions: Document creation, content management, attachment handling
3. CL_CAM_ADDRESS_BCS
• Purpose: Manage email addresses for external recipients
• Usage: Define destination email addresses outside SAP system
Email Integration Steps
1. Extract Binary File
• Process: Get BIN_FILE from SmartForm output
• Format: Extract in binary format for email attachment
2. Convert to Binary Format
• Function: SCMS_XSTRING_TO_BINARY
• Purpose: Convert Xstring format to SOLIX_TAB for email processing
3. Create Send Request
• Class: CL_BCS
• Method: CREATE_PERSISTENT
• Purpose: Initialize email sending framework
4. Define External Email Address
• Class: CL_CAM_ADDRESS_BCS
• Method: CREATE_INTERNET_ADDRESS
• Input: Recipient email address
5. Add Recipient
• Method: ADD_RECIPIENT
• Purpose: Associate email address with send request
6. Create Document
• Class: CL_DOCUMENT_BCS
• Method: CREATE_DOCUMENT
• Content: Email body text and metadata
7. Add PDF Attachment
• Method: ADD_ATTACHMENT
• Type: 'PDF'
• Content: Binary SmartForm data
8. Set Document to BCS
• Method: SET_DOCUMENT
• Purpose: Associate document with send request
9. Configure Sending Options
• Method: SET_SEND_IMMEDIATELY
• Parameter: 'X' for immediate sending
10. Send Email
• Method: SEND
• Error Handling: Include proper exception handling
11. Commit Transaction
• Purpose: Finalize email sending process
• Success Message: Confirm email delivery status
Sample Email Integration Structure
" Create send request
DATA: lo_bcs TYPE REF TO cl_bcs.
lo_bcs = cl_bcs=>create_persistent( ).
" Create external address
DATA: lo_external_user TYPE REF TO cl_cam_address_bcs.
lo_external_user = cl_cam_address_bcs=>create_internet_address(
i_address_string = 'recipient@example.com' ).
" Add recipient
lo_bcs->add_recipient( i_recipient = lo_external_user ).
" Create document with body text
DATA: lt_text TYPE TABLE OF soli.
" Populate lt_text with email body content
DATA: lo_document TYPE REF TO cl_document_bcs.
lo_document = cl_document_bcs=>create_document(
i_type = 'RAW'
i_subject = 'SmartForm Report'
i_text = lt_text ).
" Add PDF attachment
lo_document->add_attachment(
i_attachment_type = 'PDF'
i_attachment_subject = 'Report Details'
i_att_content_hex = lt_binary_tab ).
" Set document and send
lo_bcs->set_document( i_document = lo_document ).
lo_bcs->set_send_immediately( i_send_immediately = 'X' ).
DATA: lv_result TYPE os_boolean.
lv_result = lo_bcs->send( ).
IF lv_result IS NOT INITIAL.
COMMIT WORK.
MESSAGE 'Email sent successfully' TYPE 'S'.
ENDIF.
Best Practices and Important Notes
SmartForm Development
• Patience Required: SmartForm designing is a lengthy and detailed process
• ABAP Knowledge: Basic ABAP programming knowledge is sufficient
• Logic Placement: Write business logic in ABAP programs rather than directly in SmartForms
• Version Control: Always create copies before making changes to existing SmartForms
Function Module Management
• Dynamic Names: Use SSF_FUNCTION_MODULE_NAME
to get generated function module names
• Re-generation: Function modules change when SmartForms are modified
• Testing: Always test function module calls after SmartForm changes
System Configuration
• Email Setup: Basis team must configure system for external email sending
• Email Monitoring: Use SOST transaction code to monitor sent emails
• Error Handling: Implement comprehensive error handling for all operations
Performance Considerations
• Data Preparation: Prepare data in calling programs rather than in SmartForms
• Window Usage: Use appropriate window types for different content types
• Resource Management: Consider storage and processing overhead for large documents