Cómo archivar un formulario ADOBE en un sistema externo y asociarlo a un documento SAP
Aprenda cómo ejecutar un formulario ADOBE (SFP) archivándolo y vinculándolo a un documento SAP.
Dado un formulario ADOBE existe la posiblidad de: impirmirlo, visualizarlo por pantalla o archivarlo en un repositorio externo.
En el presente tip detallaremos el procedimiento para archivarlo en un respositorio externo asociándolo a un documento SAP. (Se recomienda la lectura del tip "Cómo crear formularios de impresión basados en PDF e imprimirlos desde un programa ABAP" publicado años atrás en Teknodatips, para un entendimiento básico sobre la creación de Adobe Forms).
La función asociada al formulario ADOBE, contiene los parámetros necesarios para indicar el documento SAP al cual se anexará el mismo.
El parámetro de entrada /1BCDWB/DOCPARAMS se utilizará para asignar los valores del documento al cual se adjuntará la imagen del formulario:
El parámetro de salida /1BCDWB/FORMOUTPUT contendrá el contenido PDF del formulario:
Para que este parámetro de salida se complete, antes es necesario activar en la función 'FP_JOB_OPEN' el parámetro IE_OUTPUTPARAMS-GETPDF = ‘X’.
En el código ejemplo siguiente se detalla paso a paso el procedimiento que asociará el formulario ADOBE a un documento SAP.
Tener en cuenta que antes de cada porción de código se indican requerimientos y acciones a realizar.
Declaración de datos
data:
v_fm_name type funcname,
wa_input_parm type sfpoutputparams,
wa_docparam type sfpdocparams,
wa_pdf_file type fpformoutput,
wa_outdoc type toadt,
it_archivobject type table of docs,
it_binarchivobject type table of tbl1024,
wa_dara type tfpdara,
it_dara type tfpdara,
v_documentkey type saeobjid.
parameters: p_bukrs type bukrs,
p_belnr type belnr_d,
p_gjahr type gjahr.
Para archivar el PDF y no mostrarlo por pantalla es necesario activarlo
wa_input_parm-getpdf = ‘X’.
Abrir el Spool
call function 'FP_JOB_OPEN'
changing
ie_outputparams = wa_input_parm
exceptions
cancel = 1
usage_error = 2
system_error = 3
internal_error = 4
others = 5.
Obtener el nombre de la función asociada al formulario Adobe.
Como la función generada puede cambiar, es necesario obtenerla nuevamente ingresando como parámetro de entrada el nombre del Formulario ADOBE en SFP.
call function 'FP_FUNCTION_MODULE_NAME'
exporting
i_name = 'Z_NOMBRE_DE_PDF_EN_SFP'
importing
e_funcname = v_fm_name.
En este momento ya es posible llamar al formulario Adobe, indicando los parámetros necesarios de entrada del mismo y además, el documento SAP con el cual se anexará la imagen del formulario.
wa_docparam-langu = sy-langu.
wa_dara-function = ‘DARA’.
wa_dara-mandant = sy-mandt.
En este ejemplo se asignará a un documento financiero, por lo tanto se utilizará el objeto ‘BKPF’. Estos tipos de objetos residen en el BOR (Business Object Repository).
wa_dara-sap_object = 'BKPF'.
concatenate p_bukrs p_belnr p_gjahr into v_documentkey.
wa_dara-object_id = v_documentkey.
Los próximos parámetros determinan el repositorio externo para lo cuál se requiere una parametrización previa de ArchiveLink (Anexo A). (Ver en sección más abajo en este documento).
wa_dara-ar_object = 'ZFINPDFOUT'.
wa_dara-formarchiv = 'ZO'.
wa_dara-reserve = 'COMMIT'.
append wa_dara to it_dara.
wa_docparam-daratab[] = it_dara[].
CALL FUNCTION v_fm_name
EXPORTING
/1bcdwb/docparams = wa_docparam
bukrs = p_bukrs
belnr = p_belnr
gjahr = p_gjahr
IMPORTING
/1bcdwb/formoutput = wa_pdf_file
EXCEPTIONS
usage_error = 1
system_error = 2
internal_error = 3
OTHERS = 4.
Luego, cerrar el spool
CALL FUNCTION 'FP_JOB_CLOSE'
EXCEPTIONS
usage_error = 1
system_error = 2
internal_error = 3
OTHERS = 4.
A partir de aquí las siguientes funciones son las que tratan el PDF en el sistema externo.
Para siempre tener actualizado el PDF, primero se borra el anterior.
call function 'ARCHIV_DELETE_META'
exporting
* ARCHIV_ID = ' '
* ARC_DOC_ID = ' '
ar_object = 'ZFINPDFOUT'
delete_flag = 2
object_id = v_documentkey
sap_object = 'BKPF'
client = sy-mandt
* SINGLE_ENTRY = ' '
* DOCUMENTCLASS =
no_auth_check = 'X'
* IMPORTING
* ALL_CONNECTIONS_DELETED =
exceptions
error_connectiontable = 1
error_parameter = 2
error_archiv = 3
error_kernel = 4
error_communicationtable = 5
error_authority = 6
others = 7.
Ahora, archivar el nuevo PDF. Tener en cuenta que las tablas pueden quedar vacías.
call function 'ARCHIV_CREATE_TABLE'
exporting
ar_object = 'ZFINPDFOUT'
* DEL_DATE =
object_id = v_documentkey
sap_object = 'BKPF'
* FLENGTH =
doc_type = 'PDF'
document = wa_pdf_file-pdf
mandt = sy-mandt
* VSCAN_PROFILE = '/SCMS/KPRO_CREATE'
* FILENAME = ' '
* DESCR = ' '
importing
outdoc = wa_outdoc
tables
archivobject = it_archivobject
binarchivobject = it_binarchivobject
exceptions
error_archiv = 1
error_communicationtable = 2
error_connectiontable = 3
error_kernel = 4
error_parameter = 5
error_user_exit = 6
error_mandant = 7
blocked_by_policy = 8
others = 9.
Si no hay ningún error del PDF en esta instancia, debería estar archivado en ArchiveLink
Con el paso anterior queda finalizado el procedimiento.
Consideraciones:
- La función 'ARCHIV_CREATE_TABLE' devuelve una "work area" con la clave de la imagen del PDF. Según el código ejemplo: wa_outdoc-arc_doc_id.
- La tabla TOA01 contiene la asociación del documento SAP con el Content Repository y la clave de la imagen del PDF.
(Anexo A) Parametrización ArchiveLink
Desde la Transacción SPRO se van a realizar las acciones marcadas, que se detallan a continuación:
1) Definir el Repositorio en función de la documentación del servidor externo que se posea:
2) Crear un nuevo tipo de documento donde la clase de documento sea PDF:
3) Asociar el nuevo tipo de documento al objeto de documento SAP y al repositorio externo:
Especialista Workflow - ABAP |
Copyright 2016 - Teknoda S.A.
IMPORTANTE: “Notas técnicas de SAP ABAP" se envía con frecuencia variable y sin cargo como servicio a nuestros clientes SAP. Contiene notas/tutoriales/artículos técnicos desarrollados en forma totalmente objetiva e independiente. Teknoda es una organización de servicios de tecnología informática y NO comercializa hardware, software ni otros productos. |