Difference between revisions of "SAP ABAP FIELD EXIT"
From SapWiki
(Created page with "*NOTA: Para poder activar los Field Exits debemos tener el parámetro abap/fieldexit = YES seteado en el servidor (Transacción RZ10). *Crear field exit: # ejecutar reporte...") |
|||
| Line 62: | Line 62: | ||
l_por_i = 0. | l_por_i = 0. | ||
CLEAR w_eval. | CLEAR w_eval. | ||
| − | + | ||
| + | * copia de C14Z_DYNP_READ_FIELD, permite leer valores de una línea de tabla | ||
CALL FUNCTION 'Z_C14Z_DYNP_READ_FIELD' | CALL FUNCTION 'Z_C14Z_DYNP_READ_FIELD' | ||
EXPORTING | EXPORTING | ||
Revision as of 17:16, 29 March 2020
- NOTA: Para poder activar los Field Exits debemos tener el parámetro abap/fieldexit = YES seteado en el servidor (Transacción RZ10).
- Crear field exit:
- ejecutar reporte RSMODPRF
- Crear módulo de función con nombre FIELD_EXIT_*
- Ejemplo, validar campo KBSTAT en trn. VK11, VK12 & VK13
FUNCTION field_exit_kbstat.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" REFERENCE(INPUT)
*" EXPORTING
*" REFERENCE(OUTPUT)
*"----------------------------------------------------------------------
DATA wa_por_niv_sec TYPE zsd_por_niv_sec.
DATA: w_eval LIKE dynpread-fieldvalue.
DATA: w_eval_2 LIKE dynpread-fieldvalue.
DATA: w_eval_3 LIKE dynpread-fieldvalue.
DATA l_matnr TYPE mara-matnr.
DATA l_spart TYPE mara-spart.
DATA l_por TYPE zsd_por_niv_sec-por_01.
DATA l_por_i TYPE konp-kbetr.
DATA l_input(1).
DATA l_sizec LIKE gt_t691i-sizec.
DATA t185v TYPE t185v.
DATA ls_t681s TYPE t681s.
DATA l_kschl TYPE rv13a-kschl.
DATA: lw_var(40) TYPE c.
FIELD-SYMBOLS <fs> TYPE any.
lw_var = '(SAPMV13A)T681S'.
ASSIGN (lw_var) TO <fs>.
IF sy-subrc = 0 AND <fs> IS ASSIGNED.
MOVE <fs> TO ls_t681s.
ENDIF.
IMPORT t185v FROM MEMORY
ID 'SD_COND_MEM_01'.
CHECK sy-tcode = 'VK12' OR sy-tcode = 'VK11' OR sy-tcode = 'VK13'.
CHECK sy-title(1) <> 'V'. "Visualizar
GET PARAMETER ID 'VKS' FIELD l_kschl.
CHECK l_kschl = 'ZAB0'
OR l_kschl = 'ZAB1'
OR l_kschl = 'ZAB2'
OR l_kschl = 'ZAB3'
OR l_kschl = 'ZAB4'
OR l_kschl = 'ZAB5'.
MOVE input TO l_input.
IF l_input IS INITIAL.
MESSAGE e000(0k) WITH 'Error:'
'debe ingresar valor en Status de tratamiento'.
ENDIF.
l_por = 0.
l_por_i = 0.
CLEAR w_eval.
* copia de C14Z_DYNP_READ_FIELD, permite leer valores de una línea de tabla
CALL FUNCTION 'Z_C14Z_DYNP_READ_FIELD'
EXPORTING
i_program = 'SAPMV13A'
i_dynpro = ls_t681s-dynpronr "'1305'
i_fieldname = 'KOMG-MATNR'
i_fieldname_2 = 'KONP-KBETR'
i_fieldname_3 = 'KOMG-SPART'
i_flg_steploop = 'X'
i_flg_request = 'X'
CHANGING
e_value = w_eval "material
e_value_2 = w_eval_2 "porcentaje
e_value_3 = w_eval_3. "sector
MOVE w_eval TO l_matnr.
CONDENSE w_eval_3.
MOVE w_eval_3 TO l_spart.
CONDENSE w_eval_2.
TRANSLATE w_eval_2 USING ',.'.
MOVE w_eval_2 TO l_por_i.
* insert some logic here
*
IF 1 = 2 . "dummy, asignación de valor posible a campo
output = 'B'.
ELSE.
output = 'L'.
ENDIF.
IF l_input <> output.
MESSAGE e000(0k) WITH 'Error en Status de tratamiento:'
'Solo se permite valor'
output.
ENDIF.
ENDFUNCTION.
FUNCTION Z_C14Z_DYNP_READ_FIELD.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" VALUE(I_PROGRAM) LIKE D020S-PROG
*" VALUE(I_DYNPRO) LIKE D020S-DNUM
*" VALUE(I_FIELDNAME) LIKE DYNPREAD-FIELDNAME
*" REFERENCE(I_FIELDNAME_2) TYPE DYNPREAD-FIELDNAME OPTIONAL
*" REFERENCE(I_FIELDNAME_3) LIKE DYNPREAD-FIELDNAME OPTIONAL
*" VALUE(I_FLG_STEPLOOP) TYPE C
*" VALUE(I_FLG_REQUEST) TYPE ESP1_BOOLEAN DEFAULT ESP1_FALSE
*" EXPORTING
*" VALUE(E_STEPL) LIKE SY-STEPL
*" VALUE(E_FLG_FIELD_INPUT) TYPE ESP1_BOOLEAN
*" CHANGING
*" VALUE(E_VALUE) LIKE DYNPREAD-FIELDVALUE
*" VALUE(E_VALUE_2) LIKE DYNPREAD-FIELDVALUE OPTIONAL
*" VALUE(E_VALUE_3) LIKE DYNPREAD-FIELDVALUE OPTIONAL
*"----------------------------------------------------------------------
DATA: BEGIN OF DYNPTAB OCCURS 1.
INCLUDE STRUCTURE DYNPREAD.
DATA: END OF DYNPTAB.
DATA: STEPL LIKE SY-STEPL.
* Begin Correction 05.07.2004 751985 ***********************************
DATA: request LIKE d020s-type.
* End Correction 05.07.2004 751985 *************************************
* Initialization
TRANSLATE i_program TO UPPER CASE. "#EC TRANSLANG
" translate i_dynpro to upper case.
TRANSLATE I_FIELDNAME TO UPPER CASE. "#EC TRANSLANG
* Get the currently entered value
CLEAR E_STEPL.
clear e_value_2.
IF I_FLG_STEPLOOP = 'X'.
* CALL FUNCTION 'DYNP_GET_STEPL'
* IMPORTING
* POVSTEPL = STEPL
* EXCEPTIONS
* STEPL_NOT_FOUND = 01.
* E_STEPL = STEPL.
move sy-STEPL to E_STEPL.
move sy-STEPL to STEPL.
ENDIF.
DYNPTAB-FIELDNAME = I_FIELDNAME.
DYNPTAB-STEPL = STEPL.
APPEND DYNPTAB.
* Begin Correction 05.07.2004 751985 ***********************************
* Check whether the field accepts input
IF ( i_flg_request = 'X' ).
request = 'A'.
ELSE.
CLEAR: request.
ENDIF. " IF ( i_flg_request = esp1_true
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
DYNAME = I_PROGRAM
DYNUMB = I_DYNPRO
request = request
TABLES
DYNPFIELDS = DYNPTAB
* TRANSLATE_TO_UPPER = ' '
EXCEPTIONS
INVALID_ABAPWORKAREA = 01
INVALID_DYNPROFIELD = 02
INVALID_DYNPRONAME = 03
INVALID_DYNPRONUMMER = 04
INVALID_REQUEST = 05
NO_FIELDDESCRIPTION = 06
UNDEFIND_ERROR = 07.
* End Correction 05.07.2004 751985 *************************************
* IF i_flg_steploop = 'X'.
* READ TABLE DYNPTAB WITH KEY FIELDNAME = I_FIELDNAME STEPL = STEPL.
* ELSE.
* READ TABLE DYNPTAB WITH KEY FIELDNAME = I_FIELDNAME.
* ENDIF.
* read TABLE DYNPTAB with key FIELDNAME = 'KONP-KONWA' STEPL = STEPL.
* if sy-subrc = 0 and dynptab-fieldvalue = '%'.
READ TABLE DYNPTAB WITH KEY FIELDNAME = I_FIELDNAME STEPL = STEPL.
if sy-subrc = 0.
e_value = dynptab-fieldvalue.
endif.
read TABLE DYNPTAB with key FIELDNAME = I_FIELDNAME_2 STEPL = STEPL.
if sy-subrc = 0.
e_value_2 = dynptab-fieldvalue.
endif.
* endif.
READ TABLE DYNPTAB WITH KEY FIELDNAME = I_FIELDNAME_3 STEPL = STEPL.
if sy-subrc = 0.
e_value_3 = dynptab-fieldvalue.
endif.
* Begin Correction 05.07.2004 751985 ***********************************
e_flg_field_input = dynptab-fieldinp.
* End Correction 05.07.2004 751985 *************************************
* e_value = dynptab-fieldvalue.
ENDFUNCTION.