giovedì 26 novembre 2009

Caricare una immagine in una dynpro

Per poter caricare una immagine è necessario caricarla sul server sap seguendo le seguenti istruzioni:
-From transaction SMW0, select Binary data for WEBRFC applications.
-The new logo must be in a .gif format.
-From this transaction create a new object and then choose IMPORT.

Successivamente inserire il seguente codice nel PAI della dynpro:

DATA container TYPE REF TO cl_gui_custom_container.
DATA picture TYPE REF TO cl_gui_picture.
CLASS cl_gui_cfw DEFINITION LOAD.


CREATE OBJECT container
EXPORTING container_name = 'CUSTOM'.
" nome del container custom

CREATE OBJECT picture
EXPORTING parent = container.

CALL METHOD picture->set_display_mode
EXPORTING display_mode = 1.
CALL METHOD picture->set_3d_border
EXPORTING border = 1.

CLEAR url.
PERFORM load_pic_from_db CHANGING url.


CALL METHOD picture->load_picture_from_url
EXPORTING url = url.
init = 'X'.

CALL METHOD cl_gui_cfw=>flush
EXCEPTIONS cntl_system_error = 1
cntl_error = 2.



FORM load_pic_from_db CHANGING url.

DATA query_table LIKE w3query OCCURS 1 WITH HEADER LINE.
DATA html_table LIKE w3html OCCURS 1.
DATA return_code LIKE w3param-ret_code.
DATA content_type LIKE w3param-cont_type.
DATA content_length LIKE w3param-cont_len.
DATA pic_data LIKE w3mime OCCURS 0.
DATA pic_size TYPE i.

REFRESH query_table.
query_table-name = '_OBJECT_ID'.
query_table-value = 'ZTAGETIK'.
" Inserire il nome dell'immagine custom
APPEND query_table.

CALL FUNCTION 'WWW_GET_MIME_OBJECT'
TABLES
query_string = query_table
html = html_table
mime = pic_data
CHANGING
return_code = return_code
content_type = content_type
content_length = content_length
EXCEPTIONS
invalid_table = 1
parameter_not_found = 2
OTHERS = 3.
IF sy-subrc = 0.
pic_size = content_length.
ENDIF.

CALL FUNCTION 'DP_CREATE_URL'
EXPORTING
type = 'image'
subtype = cndp_sap_tab_unknown
size = pic_size
lifetime = cndp_lifetime_transaction
TABLES
data = pic_data
CHANGING
url = url
EXCEPTIONS
OTHERS = 1.

ENDFORM.

mercoledì 18 novembre 2009

Sottomettere RSNAST00 e ottenere N° spool

DATA: v_jobgroup LIKE  tbtcjob-jobgroup.
DATA: v_jobname LIKE tbtcjob-jobname.
DATA: v_jobcount LIKE tbtcjob-jobcount.
DATA: v_status TYPE tbtco-status.
DATA: v_spool TYPE tbtcp-listident.
RANGES: r_kappl FOR nast-kappl,
r_objky FOR nast-objky,
r_kschl FOR nast-kschl,
r_nacha FOR nast-nacha.


MOVE: '1209770006' TO r_objky-low,
'EQ' TO r_objky-option,
'I' TO r_objky-sign.
APPEND r_objky.

MOVE: 'ZADC' TO r_kschl-low,
'EQ' TO r_kschl-option,
'I' TO r_kschl-sign.

APPEND r_kschl.

MOVE: '1' TO r_nacha-low,
'EQ' TO r_nacha-option,
'I' TO r_nacha-sign.

APPEND r_nacha.



MOVE: 'V3' TO r_kappl-low,
'EQ' TO r_kappl-option,
'I' TO r_kappl-sign.

APPEND r_kappl.




v_jobgroup = 'Test'.
v_jobname = sy-repid.

CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobgroup = v_jobgroup
jobname = v_jobname
IMPORTING
jobcount = v_jobcount
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.



SUBMIT rsnast00
VIA JOB v_jobname
NUMBER v_jobcount
WITH s_kappl IN r_kappl
WITH s_objky IN r_objky
WITH s_kschl IN r_kschl
WITH s_nacha IN r_nacha " '1'
WITH p_again = vstato
AND RETURN.



*Close job to start immediately
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = v_jobcount
jobname = v_jobname
strtimmed = 'X'
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
OTHERS = 8.

* Check the status.
DO.
SELECT SINGLE status FROM tbtco
INTO v_status
WHERE jobname = v_jobname
AND jobcount = v_jobcount.

IF sy-subrc = 0 AND v_status = 'F'.
EXIT.
ENDIF.

ENDDO.

* Get the spool
SELECT SINGLE listident FROM tbtcp
INTO v_spool
WHERE jobname = v_jobname
AND jobcount = v_jobcount.

WRITE: / v_spool.

giovedì 12 novembre 2009

Generare ALV dinamicamente da tabella interna

Ecco un esempio di report che genera un ALV dinamicamente in base ai campi di una tabella interna. L'unica attenzione è che il report non deve avere righe più lunghe di 72 caratteri.


TYPE-POOLS: slis.
DATA: lt_layout TYPE slis_layout_alv.

DATA: BEGIN OF tb_tb001 OCCURS 0,
bukrs TYPE bukrs,
butxt TYPE butxt,
ort01 TYPE ort01,
land1 TYPE land1.
DATA: END OF tb_tb001.

DATA t_fil TYPE slis_t_fieldcat_alv.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-repid
i_internal_tabname = 'TB_TB001'
* I_STRUCTURE_NAME =
* I_CLIENT_NEVER_DISPLAY = 'X'
i_inclname = sy-repid
i_bypassing_buffer = 'X'
* I_BUFFER_ACTIVE =
CHANGING
ct_fieldcat = t_fil
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

SELECT * FROM t001 INTO CORRESPONDING FIELDS OF TABLE tb_tb001.

lt_layout-zebra = 'X'.
lt_layout-colwidth_optimize = 'X'.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = lt_layout
it_fieldcat = t_fil
TABLES
t_outtab = tb_tb001
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc = 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

Listare contenuto di una directory

Per poter listare il contenuto di una directory locale del server SAP è possibile utilizzare la seguente function:

EPS_GET_DIRECTORY_LISTING

La function accetta come parametri una directory di partenza e restituisce una tabella contenente la lista dei file presenti.

mercoledì 11 novembre 2009

Customizzare formato data e numero

Nella tabella T005X è possibile customizzare il formato della data e dei numeri rappresentati in sistema.
La scelta avviene per paese.

Ecco un esempio delle possibili scelte per la rappresentazione dei numeri:


Per poter usufruire della customizzazione appena fatta è necessario impostare il paese nel programma generato utilizzando l'istruzione

SET COUNTRY 'IT'.