Calculs et BAdI personnalisés
Cette instruction vous permet d'appeler toute programmation ABAP personnalisée que vous avez écrite.
Exécutez l'instruction suivante pour appeler des programmes ABAP personnalisés :
*CALL_CUSTOM_LOGIC <filter_value_of_the_BADI>
Où filter_value_of_the_BADI est le nom du filtre que vous avez fourni au cours de l'implémentation de BAdI de UJ_CUSTOM_LOGIC BADI.
Exemple de calculs personnalisés
*CALL_CUSTOM_LOGIC COMPLEX_ALLOCATION
Exemples de BAdI
*START_BADI / *END_BADI appelle toute programmation ABAP écrite à l'aide de UJ_CUSTOM_LOGIC BADI (transaction SE19) et vous permet d'exporter les paramètres aux codages ABAP dans le BAdI.
Syntaxe
*START_BADI <filter_value_of_your_BADI_implementation>
<key1> = <value1>
<key2> = <value2>
*END_BADI
où filter_value_of_your_BADI_implementation désigne le nom du filtre que vous avez fourni au cours de l'implémentation de BAdI de UJ_CUSTOM_LOGIC BADI.
Exemple de syntaxe
L'exemple suivant montre comment appeler un BAdI implémenté avec CALC_ACCT comme valeur de filtre pour ajouter deux comptes à un compte de destination :
*START_BADI ROUND
DECIMAL = 2
*END_BADI
Le paramètre DECIMAL est visible dans la table interne IT_PARAM au sein de la méthode EXECUTE. Dans la méthode EXECUTE, vous pouvez écrire votre propre code personnalisé pour modifier les données altérables entrantes de CT_DATA.
Paramètres facultatifs
Vous pouvez utiliser l'un des paramètres facultatifs suivants dans une instruction *START_BADI/*END_BADI :
Requête : exécute la requête par défaut. Les valeurs valides sont Activé, Par défaut et Désactivé. Définissez la requête sur Désactivé si vous voulez exécuter votre propre requête.
Ecriture : réécrit automatiquement les données. Les valeurs valides sont Activé, Par défaut et Désactivé.
Code d'implémentation (dans la méthode EXECUTE de la classe implémentée) pour amortissement dégressif
Avant de pouvoir utiliser un BAdI dans un script de calcul, implémentez UJ_CUSTOM_LOGIC BADI à partir de la transaction SE19. Voir l'aide en ligne ABAP à l'adresse http://help.sap.com/saphelp_nw70/helpdata/en/32/a83942424dac04e10000000a1550b0/content.htm
pour obtenir des informations sur la manière d'implémenter un BAdI.
METHOD if_uj_custom_logic~execute.
DATA: ls_param TYPE ujk_s_script_logic_hashentry,
l_log TYPE string,
l_ast_acct(16) TYPE c,
l_year(3) TYPE n,
l_percentage(3) TYPE p,
lo_model TYPE REF TO if_uj_model,
lo_dim TYPE REF TO if_uja_dim_data,
ls_dim TYPE uja_s_dim,
time_dim(16) TYPE c,
lr_rec TYPE REF TO data,
lr_result_rec TYPE REF TO data,
l_intermediate_value TYPE uj_sdata,
lt_final TYPE REF TO data.
FIELD-SYMBOLS: <ls_rec> TYPE ANY,
<ls_result_rec> TYPE ANY,
<ls_time> TYPE ANY,
<ls_signed.data> TYPE ANY,
<lt_final> TYPE STANDARD TABLE
* Assurez-vous que tous les paramètres sont transférés.
CLEAR ls_param.
READ TABLE it_param WITH KEY hashkey = 'YEAR' INTO ls_param.
IF sy-subrc NE 0.
l_log = 'You have not specified the parameter ''YEAR'' which is required.'.
cl_ujk_logger=>log( i_object = l_log ).
RAISE EXCEPTION TYPE cx_uj_custom_logic.
EXIT.
ENDIF.
l_year = ls_param-hashvalue.
CLEAR ls_param.
READ TABLE it_param WITH KEY hashkey = 'PERCENTAGE' INTO ls_param.
IF sy-subrc NE 0.
l_log = 'You have not specified the parameter ''PERCENTAGE'' which is required.'.
cl_ujk_logger=>log( i_object = l_log ).
RAISE EXCEPTION TYPE cx_uj_custom_logic.
EXIT.
ENDIF.
l_percentage = ls_param-hashvalue.
* Obtenez le nom de la dimension de compte.
cl_uj_model=>get_model( EXPORTING i_appset_id = i_appset_id
RECEIVING ro_model = lo_model ).
CALL METHOD lo_model->get_dim_data_by_type
EXPORTING
i_dim_type = uj00_cs_dim_type-time
i_appl_id
= i_appl_id
RECEIVING
ro_dim_data = lo_dim.
TRY.
CALL METHOD lo_dim->get_info
IMPORTING
es_dim_info = ls_dim.
ENDTRY.
time_dim = ls_dim-dimension. TRANSLATE time_dim TO UPPER CASE.
CREATE DATA lt_final LIKE ct_data.
ASSIGN lt_final->* TO <lt_final>. CREATE DATA lr_result_rec LIKE LINE OF ct_data. ASSIGN lr_result_rec->* TO <ls_result_rec>. CREATE DATA lr_rec LIKE LINE OF ct_data. ASSIGN lr_rec->* TO <ls_rec>.
* Effectuez une boucle à travers les données entrantes et créez un ensemble de résultat.
LOOP AT ct_data ASSIGNING <ls_rec>.
<ls_result_rec> = <ls_rec>.
ASSIGN COMPONENT time_dim OF STRUCTURE <ls_result_rec> TO <ls_time>.
<ls_time>+0(4) = is <ls_time>+0(4) + l_year.
ASSIGN COMPONENT 'SIGNEDDATA' OF STRUCTURE <ls_result_rec> TO <ls_signeddata>.
DO l_year TIMES.
l_intermediate_value = l_intermediate_value + ( <ls_signeddata> - l_intermediate_value ) * l_percentage / 100.
ENDDO.
<ls_signeddata> = <ls_signeddata> - l_intermediate_value.
APPEND <ls_result_rec> TO <lt_final>.
ENDLOOP.
* Retournez les données de résultat.
SAP Business Planning and Consolidation écrase toujours les valeurs existantes.
ct_data = <lt_final>.
ENDMETHOD.
Contenu du fichier de script de calcul pour appeler le BAdI :
*START_BADI DECD
QUERY = ON
WRITE = ON
YEAR = 1
PERCENTAGE = 10 *END_BADI
ET_MESSAGE dans le BAdI journalise les messages pour le Gestionnaire de données.
Si vous voulez arrêter l'exécution, déclenchez l'exception cx_uj_custom_logic dans une implémentation de BAdI.
Tous les codes logiciels et/ou lignes/chaînes de code ("Code") inclus dans cette documentation sont fournis à titre d'exemples et ne sont en aucun cas destinés à un usage dans un environnement système productif.Le Code a pour but de mieux expliquer et d'offrir un exemple visuel des règles de syntaxe et de rédaction de certains codes.SAP ne garantit pas l'exactitude et l'exhaustivité du Code ci-après et SAP ne pourra pas être tenu responsable des erreurs ou dommages causés par l'utilisation dudit Code, sauf si de tels dommages ont été causés volontairement par SAP ou par négligence grave de SAP.
Pour obtenir des instructions sur la création d'un Business Add-In SAP, voir l'aide concernant les modèles ABAP dans la bibliothèque SAP NetWeaver.