Posted: Sat Sep 08, 2007 7:19 am Post subject: Save SmartForms OTF-output as GOS PDF-attachment
Author: J.M. Maillé
Description
This code saves SmartForms OTF-output as PDF-attachment by the use of Generic Object Services.
Code:
function z_gos_pdf_attachment_create.
*"----------------------------------------------------------------------
*"*"Lokale interface:
*" IMPORTING
*" VALUE(IC_OBJTYP) TYPE SWO_OBJTYP
*" VALUE(IC_TYPEID) TYPE SWO_TYPEID
*" VALUE(ITB_OTFDATA) TYPE TSFOTF
*" VALUE(IC_FILENAME) TYPE LOCALFILE
*" EXPORTING
*" VALUE(ES_RETURN) TYPE BAPIRET2
*"----------------------------------------------------------------------
*&---------------------------------------------------------------------*
*& Function Z_GOS_PDF_ATTACHMENT *
*&---------------------------------------------------------------------*
*& Purpose : Saving the OTF-output of a SmartForm as a *
*& PDF-attachment using Generic Object Services *
*&---------------------------------------------------------------------*
*& Name : Jean-Marc Maillé - Uphantis B.V. *
*& Date : Juni 2007 *
*&---------------------------------------------------------------------*
data:
ltb_otfdata type tsfotf,
ltb_objcont type soli_tab.
data:
ls_folder_id type soodk,
ls_attach_id type soodk.
data:
lc_objtyp type swo_objtyp,
lc_typeid type swo_typeid,
lc_objlen type so_obj_len,
lc_filename type localfile.
clear es_return.
* Importparameters to local variables
ltb_otfdata[] = itb_otfdata[].
lc_objtyp = ic_objtyp.
lc_typeid = ic_typeid.
lc_filename = ic_filename.
* Convert OTF to PDF in correct format
perform convert_otf
using ltb_otfdata
changing ltb_objcont
lc_objlen
es_return.
check es_return is initial.
* Get folder ID
perform get_folder_id
changing ls_folder_id
es_return.
check es_return is initial.
* Create attachment (in database)
perform create_attachment
using ls_folder_id
ltb_objcont
lc_objlen
lc_filename
changing ls_attach_id
es_return.
check es_return is initial.
* Create link between object and attachment
perform create_link
using ls_folder_id
ls_attach_id
lc_objtyp
lc_typeid
changing es_return.
if es_return is initial.
es_return-type = 'S'.
es_return-id = 'SO'.
es_return-number = '182'.
endif.
* Constants*-----------------------------------------------------------------------
constants:
cc_textpool_repid type syrepid value 'SAPFSSO3',
cc_id_textsymbol type textpoolid value 'I',
cc_key_message type textpoolky value '001',
cc_objtyp_message type swo_objtyp value 'MESSAGE',
cc_doctp_ext type so_doc_tp value 'EXT',
cc_relationtype_atta type binreltyp value 'ATTA'.
*-----------------------------------------------------------------------
* Internal tables
*-----------------------------------------------------------------------
data:
gtb_textpool type standard table of textpool.
* ----------------------------------------------------------------------
***INCLUDE LZ_GOS_PDF_ATTACHMENTF01 .
*----------------------------------------------------------------------
*&---------------------------------------------------------------------
*& Form convert_otf
*&---------------------------------------------------------------------
* -->ITB_OTF
* <--ETB_OBJCONT
* <--EC_OBJLEN
* <--ES_RETURN
*----------------------------------------------------------------------
form convert_otf
using itb_otf type tsfotf
changing etb_objcont type soli_tab
ec_objlen type so_obj_len
es_return type bapiret2.
data:
ltb_pdf type tsftext.
data:
ls_string type string.
data:
li_bin_filesize type i.
refresh etb_objcont.
clear: ec_objlen,
es_return.
* Convert OTF format (smartforms output) to PDF
call function 'CONVERT_OTF'
exporting
format = 'PDF'
importing
bin_filesize = li_bin_filesize
tables
otf = itb_otf
lines = ltb_pdf
exceptions
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
others = 4.
if sy-subrc ne 0.
es_return-type = 'E'.
es_return-id = 'SO'.
es_return-number = '754'.
exit.
endif.
ec_objlen = li_bin_filesize.
* Convert OTF format to String
call function 'SWA_STRING_FROM_TABLE'
exporting
character_table = ltb_pdf
importing
character_string = ls_string
exceptions
no_flat_charlike_structure = 1
others = 2.
if sy-subrc ne 0.
es_return-type = 'E'.
es_return-id = 'SO'.
es_return-number = '754'.
exit.
endif.
* Convert String to Sap Office table
call function 'SWA_STRING_TO_TABLE'
exporting
character_string = ls_string
importing
character_table = etb_objcont
exceptions
no_flat_charlike_structure = 1
others = 2.
if sy-subrc ne 0.
es_return-type = 'E'.
es_return-id = 'SO'.
es_return-number = '754'.
exit.
endif.
endform. " convert_otf
&---------------------------------------------------------------------
*& Form get_folder_id
&---------------------------------------------------------------------
* <--ES_FOLDER_ID
* <--ES_RETURN
*----------------------------------------------------------------------
form get_folder_id
changing es_folder_id type soodk
es_return type bapiret2.
clear: es_folder_id,
es_return.
call function 'SO_FOLDER_ROOT_ID_GET'
exporting
region = 'B'
importing
folder_id = es_folder_id
exceptions
others = 1.
if sy-subrc ne 0.
es_return-type = 'E'.
es_return-id = 'SO'.
es_return-number = '005'.
exit.
endif.
endform. " get_folder_id
* &---------------------------------------------------------------------
*& Form create_attachment
*&---------------------------------------------------------------------
* -->IS_FOLDER_ID
* -->ITB_OBJCONT
* -->IC_OBJLEN
* -->IC_FILENAME
* <--ES_ATTACH_ID
* <--ES_RETURN
*----------------------------------------------------------------------
form create_attachment
using is_folder_id type soodk
itb_objcont type soli_tab
ic_objlen type so_obj_len
ic_filename type localfile
changing es_attach_id type soodk
es_return type bapiret2.
data:
ltb_objhead type soli_tab.
data:
ls_object_id type soodk,
ls_object_hd_change type sood1.
data:
lc_attach_type type so_obj_tp value cc_doctp_ext,
lc_owner type so_usr_nam.
clear es_attach_id.
ls_object_id = is_folder_id.
ls_object_hd_change-objlen = ic_objlen.
ls_object_hd_change-objla = sy-langu.
* Extract object description and extention from filename
perform extract_object_description
using ic_filename
changing ls_object_hd_change-objdes
ls_object_hd_change-file_ext.
* Get objectname
perform get_objectname
changing ls_object_hd_change-objnam.
lc_owner = sy-uname.
call function 'SO_ATTACHMENT_INSERT'
exporting
object_id = ls_object_id
object_hd_change = ls_object_hd_change
attach_type = lc_attach_type
owner = lc_owner
importing
attach_id = es_attach_id
tables
objcont = itb_objcont
objhead = ltb_objhead
exceptions
active_user_not_exist = 1
object_type_not_exist = 2
operation_no_authorization = 3
owner_not_exist = 4
parameter_error = 5
substitute_not_active = 6
substitute_not_defined = 7
x_error = 8
system_failure = 9
communication_failure = 10
others = 11.
if sy-subrc ne 0.
es_return-type = 'E'.
es_return-id = 'SO'.
es_return-number = '897'.
es_return-message_v1 = ls_object_hd_change-objdes.
exit.
else.
commit work and wait.
endif.
endform. " create_attachment
*&---------------------------------------------------------------------
*& Form extract_object_description
*&---------------------------------------------------------------------
* -->IC_FILENAME
* <--EC_OBJDES
* <--EC_FILE_EXT
*----------------------------------------------------------------------
form extract_object_description
using ic_filename type localfile
changing ec_objdes type so_obj_des
ec_file_ext type so_fileext.
data:
li_length type i,
li_start_position type i,
lc_filename type localfile,
lc_stripped_name type localfile.
clear: ec_objdes,
ec_file_ext.
lc_filename = ic_filename.
call function 'SO_SPLIT_FILE_AND_PATH'
exporting
full_name = lc_filename
importing
stripped_name = lc_stripped_name
exceptions
x_error = 1
others = 2.
if sy-subrc eq 0.
split lc_stripped_name
at '.'
into ec_objdes
ec_file_ext.
set locale language sy-langu.
translate ec_file_ext to upper case.
set locale language space.
else.
ec_objdes = ic_filename.
ec_file_ext = 'PDF'.
endif.
endform. " extract_object_description
* &---------------------------------------------------------------------
*& Form get_objectname
*&---------------------------------------------------------------------
* <--EC_OBJNAM
*----------------------------------------------------------------------
form get_objectname
changing ec_objnam type so_obj_nam.
data:
ls_textpool type textpool.
field-symbols:
<fs_textpool> type textpool.
if gtb_textpool[] is initial.
perform read_textpool.
endif.
read table gtb_textpool
assigning <fs_textpool>
with key id = cc_id_textsymbol
key = cc_key_message
binary search.
if sy-subrc eq 0.
ec_objnam = <fs_textpool>-entry(<fs_textpool>-length).
set locale language sy-langu.
translate ec_objnam to upper case.
set locale language space.
endif.
endform. " get_objectname
* &---------------------------------------------------------------------
*& Form read_textpool
*&---------------------------------------------------------------------
form read_textpool.
refresh gtb_textpool.
* Read textpool from program SAPFSSO3
read textpool cc_textpool_repid
into gtb_textpool
language sy-langu.
sort gtb_textpool by id key.
endform. " read_textpool
* &---------------------------------------------------------------------
*& Form create_link
*&---------------------------------------------------------------------
* -->IS_FOLDER_ID
* -->IS_ATTACH_ID
* -->IC_OBJTYP
* -->IC_TYPEID
* <--ES_RETURN
*----------------------------------------------------------------------
form create_link
using is_folder_id type soodk
is_attach_id type soodk
ic_objtyp type swo_objtyp
ic_typeid type swo_typeid
changing es_return type bapiret2.
data:
ls_obj_rolea type borident,
ls_obj_roleb type borident.
data:
lc_relationtype type binreltyp value cc_relationtype_atta.
concatenate is_folder_id
is_attach_id
into ls_obj_roleb-objkey.
ls_obj_roleb-objtype = cc_objtyp_message.
ls_obj_rolea-objkey = ic_typeid.
ls_obj_rolea-objtype = ic_objtyp.
call function 'BINARY_RELATION_CREATE'
exporting
obj_rolea = ls_obj_rolea
obj_roleb = ls_obj_roleb
relationtype = lc_relationtype
exceptions
others = 1.
if sy-subrc ne 0.
es_return-type = 'E'.
es_return-id = 'SO'.
es_return-number = '897'.
es_return-message_v1 = ls_obj_roleb-objkey.
exit.
else.
commit work and wait.
endif.
endform. " create_link
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.