• Aucun résultat trouvé

Client ECIR Version de démonstration

N/A
N/A
Protected

Academic year: 2022

Partager "Client ECIR Version de démonstration"

Copied!
39
0
0

Texte intégral

(1)

Client ECIR – Version de démonstration

Table des matières

1. Version du document ... 3

2. Objectif de ce document ... 3

3. Situation et droits sur ce document ... 3

3.1. Le client ECIR ... 3

3.2. Le document actuel ... 3

4. Les composants de ce projet ABAP ... 4

5.1. Les tables de paramétrage ... 4

5.1.1. ZTPOLREGL_POL ... 5

5.1.2. ZTPOLREGL_POLVER ... 5

5.1.3. ZTPOLREGL_REGL ... 6

5.1.4. ZTPOLREGL_CUST ... 6

5.1.5. ZTPOLREGL_CAR ... 7

5.1.6. La création de ces tables ... 8

5.2. Les objets de traitement ... 9

5.2.1. La classe de message ... 9

5.2.2. L’interface de traitement ... 10

5.2.3. ZCL_ECIRCLTDEMO_MESSAGES ... 10

5.2.4. La vue ZVPOLREGL_POLVER ... 14

5.3. Les objets d’administration ... 15

5.3.1. Le log applicatif ... 15

5.3.2. La tranche de numérotation ... 16

5.3.3. Les programmes administration... 17

6. Les exemples de traitement ... 19

6.1. Une politique de traitement exemple ... 19

6.2. Une politique de contrôle exemple ... 19

6.2.1. Présentation technique de la classe principale : ZCL_POLREGL_CONTROLE_V2 ... 21

6.2.2. Présentation technique d’une classe subalterne : ZCL_POLCTRL00_REGL01_V2 ... 27

6.2.3. ZCL_POLCTRL00_REGL02_V2 ... 31

6.2.4. Exemple d’exécution ... 34

7. Le serveur ECIR ... 37

(2)

7.1. Objectif de ce serveur ... 37

7.2. Interaction avec le client ECIR ... 37

7.3. Accès à ce serveur ... 37

8. Limitations – l’avenir ... 38

9. Liens externes ... 39

(3)

1. Version du document

Auteur Date : Commentaire

Yann SZWEC 28/12/2016 Création du document

2. Objectif de ce document

Ce document a pour objectif de présenter par des fichiers textes et des images le mode opératoire du client ECIR, dans sa version de démonstration.

Les fichiers NUGG contiennent les objets techniques et les points de paramètre nécessaire, mais il est possible que votre version de SAP ne supportent pas SAPLINK (ou que vous ayez un problème

technique avec cet outil).

Auquel cas les fichiers texte et les images vous permettront de compenser ce petit problème technique.

3. Situation et droits sur ce document 3.1. Le client ECIR

Ce client ECIR est une version de démonstration. Il appartient de plein droit à la société ECIR Consulting.

La version de ce client ECIR est COMPLETEMENT LIBRE de droit.

Vous êtes libres de l’utiliser, SOUS VOTRE RESPONSABILITE.

Il a été testé sous la responsabilité de son concepteur sur différents projets en Europe, et a obtenu les remerciements des clients qui l’ont utilisé.

Différentes versions de ce client de démonstration.

3.2. Le document actuel

Ce document n’est pas modifiable par qui que ce soit hormis son auteur.

Vous pouvez participer à ses corrections et voir votre nom apparaître dessus en tant que remerciement.

Vous pouvez contacter l’auteur sur son email : yann.szwec@ecir.fr

(4)

4. Les composants de ce projet ABAP Ce projet est composé de 2 parties :

- Une partie ABAP, permettant de gérer et de traiter les objets techniques de programmation sur SAP NETWEAVER. Cette partie est nommée CLIENT ECIR

- Une partie WINDEV, serveur technique d’analyse des tables de paramétrage utilisées dans la partie ABAP. Cette partie est nommée SERVEUR ECIR

5. Le client ECIR

Le client ECIR est en pur abap.

Cet abap est basique, avec comme volonté de pouvoir être utilisé même dans une version 4.6 Les concepts de programmation sont donc simples, utilisant une programmation accessible même à des débutants.

Il y a différents composants dans ce client : - Des tables de paramétrage, - Des objets de traitement, - Des objets d’administration.

5.1. Les tables de paramétrage

4 tables de paramétrage sont nécessaires pour le fonctionnement de ce client ECIR :

Table Description

ZTPOLREGL_POL Table de stockage des politiques

ZTPOLREGL_POLVER Table des versions des politiques créées

ZTPOLREGL_REGL Table des règles exécutées lors de la politique

ZTPOLREGL_CUST Table de paramétrage.

IL y a d’autres tables mais nous nous contenterons d’expliquer ces tables.

(5)

5.1.1. ZTPOLREGL_POL

Chaque politique est définie avant de pouvoir être exécutée.

Table de paramétrage, pleinement bufferisée.

5.1.2.ZTPOLREGL_POLVER

La méthode de programmation permet de gérer des versions différentes d’exécution des

programmes. Il est possible d’interagir sur la date d’exécution afin de traiter des cas différents entre la machine de DEV, de QAL, et la PROD, sans impacter les personnes réalisant des test sur des versions autres.

Table de paramétrage, pleinement bufferisée.

(6)

5.1.3. ZTPOLREGL_REGL

Table contenant l’ensemble des règles à exécuter pour une version de politique donnée.

Table de paramétrage, pleinement bufferisée.

5.1.4. ZTPOLREGL_CUST

Table d’administration du client ECIR, indiquant si le client est connecté à un serveur ECIR ou non.

Dans le cas présent il n’est pas administré par un serveur ECIR.

Table de paramétrage, pleinement bufferisée.

(7)

5.1.5. ZTPOLREGL_CAR

Table permettant d’influencer l’ordre des traitements à réaliser.

Table de paramétrage, pleinement bufferisée.

(8)

5.1.6. La création de ces tables

Il est possible de créer ses objets de par SAPLINK.

Il faut respecter la procédure d’installation écrite en anglais.

Il convient de respecter un ordre dans l’activation des objets du DDIC : - Les domaines,

- Les éléments de données, - Les structures,

- Les tables, - Les vues.

(9)

5.2. Les objets de traitement 5.2.1. La classe de message

Une classe de message a été mise en place afin de gérer les messages.

ZCM_POLREGL_0

(10)

5.2.2. L’interface de traitement

L’interface ZIF_ECIRCLTDEMO a été créée spécifiquement afin de gérer différentes constantes.

5.2.3. ZCL_ECIRCLTDEMO_MESSAGES

Cette classe a pour objet de gérer les messages à gérer au sein des classes de traitement (classe principale et classes subalternes.

(11)

5.2.3.1. Méthode BAL_ADD_MESSAGE

method BAL_ADD_MESSAGE.

DATA: ls_s_msg TYPE bal_s_msg.

MOVE: i_msgty TO ls_s_msg-msgty , i_msgid TO ls_s_msg-msgid , i_msgno TO ls_s_msg-msgno , i_msgv1 TO ls_s_msg-msgv1 , i_msgv2 TO ls_s_msg-msgv2 , i_msgv3 TO ls_s_msg-msgv3 , i_msgv4 TO ls_s_msg-msgv4 .

CALL FUNCTION 'BAL_LOG_MSG_ADD' EXPORTING

i_log_handle = i_log_handle i_s_msg = ls_s_msg

* IMPORTING

* E_S_MSG_HANDLE =

* E_MSG_WAS_LOGGED =

* E_MSG_WAS_DISPLAYED = EXCEPTIONS

log_not_found = 1

msg_inconsistent = 2

log_is_full = 3

OTHERS = 4 .

IF sy-subrc <> 0.

RAISE erreur_add_message.

ENDIF.

endmethod.

(12)

5.2.3.2. Méthode BAL_CREATE

method BAL_CREATE.

DATA: ls_bal_s_log TYPE bal_s_log .

ls_bal_s_log-object = i_object.

ls_bal_s_log-subobject = i_subobject.

CALL FUNCTION 'BAL_LOG_CREATE' EXPORTING

i_s_log = ls_bal_s_log IMPORTING

e_log_handle = e_log_handle EXCEPTIONS

log_header_inconsistent = 1 OTHERS = 2.

IF sy-subrc <> 0.

RAISE erreur_log_creation.

ENDIF.

endmethod.

(13)

5.2.3.3. Méthode BAL_SAVE

method BAL_SAVE.

DATA: it_log_handle TYPE bal_t_logh.

APPEND i_log_handle TO it_log_handle.

CALL FUNCTION 'BAL_DB_SAVE' EXPORTING

* I_CLIENT = SY-MANDT

* I_IN_UPDATE_TASK = ' '

* I_SAVE_ALL = ' '

i_t_log_handle = it_log_handle

* IMPORTING

* E_NEW_LOGNUMBERS = EXCEPTIONS

log_not_found = 1 save_not_allowed = 2 numbering_error = 3 OTHERS = 4 .

IF sy-subrc <> 0.

RAISE erreur_log_save.

ENDIF.

endmethod.

(14)

5.2.4. La vue ZVPOLREGL_POLVER

Les champs présents

MANDT ZTPOLREGL_POL MANDT MANDT

POL_GUID ZTPOLREGL_POL GUID ZEPOLREGL_POL_GUID

POLVER_GUID ZTPOLREGL_POLVER POLVER_GUID ZEPOLREGL_POLVERS_GUID

POL_ID ZTPOLREGL_POL POL_ID ZEPOLREGL_POL_ID

POL_DESCR ZTPOLREGL_POL POL_DESCR ZEPOLREGL_POL_DESCR

POLVER_DESCR ZTPOLREGL_POLVER POLVER_DESCR ZEPOLREGL_POL_DESCRVERS

(15)

POLVER_ACTIVE ZTPOLREGL_POLVER POLVER_ACTIVE ZEPOLREGL_POL_ACTIVE POLVER_DEBUT ZTPOLREGL_POLVER POLVER_DEBUT ZEPOLREGL_POL_DEBUT

POLVER_FIN ZTPOLREGL_POLVER POLVER_FIN ZEPOLREGL_POL_FIN

POL_ID_CTRL ZTPOLREGL_POLVER POL_ID_CTRL ZEPOLREGL_POL_ID_CTRL

POL_CLASSE ZTPOLREGL_POLVER POL_CLASSE ZEPOLREGL_POL_CLASSEM

5.3. Les objets d’administration 5.3.1.Le log applicatif

Le log application ZPOLREGL doit être créé.

Il contient un seul sous-objet : CONTROLE

(16)

5.3.2. La tranche de numérotation

La tranche de numérotation ZPEC_NR doit être créée pour permettre la création automatique des politiques.

Une seule tranche de numérotation doit être créée pour permettre le fonctionnement de cette tranche de numérotation.

(17)

5.3.3. Les programmes administration 5.3.3.1. ZRECIRCLTDEMO_ADMIN

Un seul programme permet de centraliser les traitements offerts dans le CLIENT ECIR de démonstration : ZRECIRCLTDEMO_ADMIN

Il fait simplement référence aux autres programmes d’administration.

Les text-element de ce programme

P_LOG Application log display

P_R1 Policy creation

P_R2 Version policy creation

P_R3 Policy Display

P_R4 Version policy comparaison

P_R5 ECIR client customizing

P_R6 Control policies

P_R7 Download policies

5.3.3.2. ZRECIRCLTDEMO_ADMIN_R1 Programme de création des politiques.

Les text-element de ce programme.

P_CCLA Children class naming convent.

P_CTRL control policy

P_DBEG Begin date

P_DEND end date

P_DESCR Policy description

P_DESCRV Version description

P_LOG Log needed

P_MCLA Mother class naming

P_NCCLA Num children class

P_PAR1 parameter 1

P_PAR2 parameter 2

P_PAR3 parameter 3

P_PART Partner

P_POLID Policy id to be created

P_TEST Test mode

P_TYP1 ECIR Administration

P_TYP2 ECIR demonstration

P_TYP3 ECIR authorization

P_TYP4 ECIR management

P_TYP5 Customer authorization

P_TYP6 Customer management

P_TYP7 Customer container

P_TYP8 ECIR Partners

P_VAL1 value parameter 1

P_VAL2 value parameter 2

(18)

5.3.3.3. ZRECIRCLTDEMO_ADMIN_R6

Programme de contrôle des politiques présentes dans les tables de paramétrage.

Les text-element de ce programme.

P_DATE Validity date

S_ID Policy id to be checked

5.3.3.4. ZRECIRCLTDEMO_ADMIN_R7

Programme pour décharger le contenu des tables de paramétrage afin de les mettre à disposition au serveur ECIR.

Les text-element de ce programme.

P_DATE Date to be tested

P_DIR Directory to download

S_ID Policies id

(19)

6. Les exemples de traitement

6.1. Une politique de traitement exemple

Vous trouverez dans les tables de paramétrage des exemples à analyser.

6.2. Une politique de contrôle exemple

La politique de contrôle 1 a été créé afin de permettre des contrôles sur les classes subalternes à exécuter. Elle est obligatoirement stockée dans la table ZTPOLREGL_POL

Cette politique est référencée sous le GUID : C86000A234E51ED48696D572D3D49A89 Nous retrouvons l’ensemble des versions de cette politique dans la table ZTPOLREGL_POL

Il convient de valider uniquement les versions actives, et leur période de validité.

(20)

Nous nous intéresserons à la version active en fonction de la date système, soir la version nommée 2nd version. Son guid : C86000A234E51ED488E32EB9C8871A89

La classe principale d’exécution est la suivante : ZCL_POLREGL_CONTROLE_V2

Nous utilisons ce guid pour interroger la table ZTPOLREGL_REGL

Tout comme pour la table ZTPOLREGL_POLVER, il convient de contrôler uniquement les enregistrements actifs.

(21)

Liste des classes appelées.

ZCL_POLCTRL00_REGL01_V2 ZCL_POLCTRL00_REGL02_V2 ZCL_POLCTRL00_REGL03_V2 ZCL_POLCTRL00_REGL04_V2 ZCL_POLCTRL00_REGL05_V2 ZCL_POLCTRL00_REGL06_V2

6.2.1. Présentation technique de la classe principale : ZCL_POLREGL_CONTROLE_V2 Les attributs

Les méthodes.

(22)

La méthode principale est CONTROLE_MERE method CONTROLE_MERE.

**********************************************************************

* Mise en place du log applicatif

* Cf plus tard avec if_reca_message_list.

**********************************************************************

DATA: it_log_handle TYPE bal_t_logh

, oref1 TYPE REF TO zcl_polregl_controle_v2 , msg_err_catch TYPE REF TO cx_root

, text_msg_err_catch TYPE string , lv_msgv1 TYPE msgv1

, lv_active TYPE n

, lv_ctrl_fille_erreur TYPE boolean .

.

FIELD-SYMBOLS: <fs_t_polregl_pol> LIKE LINE OF t_polregl_pol , <fs_t_polregl_regl> LIKE LINE OF t_polregl_regl , <fs_t_polregl_polver> LIKE LINE OF

t_polregl_polver

, <fs_t_polregl_polverctrl> LIKE LINE OF t_polregl_polver

, <fs_t_polregl_opt> LIKE LINE OF t_polregl_opt .

DATA: ls_polregl_polctrl LIKE LINE OF t_polregl_pol , ls_polregl_polverctrl LIKE LINE OF t_polregl_polver.

**********************************************************************

* Creation du log applicatif

**********************************************************************

CALL METHOD zcl_ecircltdemo_messages=>bal_create EXPORTING

i_object = log_objet i_subobject = log_sousobjet IMPORTING

e_log_handle = log_handle

(23)

EXCEPTIONS

erreur_log_creation = 1 OTHERS = 2.

IF sy-subrc <> 0.

RAISE erreur.

ENDIF.

CALL METHOD zcl_ecircltdemo_messages=>bal_save EXPORTING

i_log_handle = log_handle EXCEPTIONS

erreur_log_save = 1 OTHERS = 2.

IF sy-subrc <> 0.

RAISE erreur.

ENDIF.

e_log_handle = log_handle.

**********************************************************************

* Gestion d'une politique ou de toutes les politiques?

**********************************************************************

CALL METHOD zcl_polregl_controle_v2=>get_ztpolregl_pol EXPORTING

ir_pol_id = ir_pol_id RECEIVING

r_t_polregl_pol = t_polregl_pol.

**********************************************************************

* Contr#le des autorisations de l'utilisateur

**********************************************************************

DATA: lv_autorisation TYPE boolean.

lv_autorisation = return_autorisation( ).

IF lv_autorisation NE 'X'.

RAISE erreur.

ENDIF.

**********************************************************

* R#cup#ration des donn#es d#pendantes # controler

**********************************************************************

t_polregl_polver = zcl_polregl_controle_v2=>get_ztpolregl_polver( ).

t_polregl_polctrl = zcl_polregl_controle_v2=>get_ztpolregl_polctrl(

).

t_polregl_polver = zcl_polregl_controle_v2=>get_ztpolregl_polver( ).

t_polregl_regl = zcl_polregl_controle_v2=>get_ztpolregl_regl( ).

t_polregl_opt = zcl_polregl_controle_v2=>get_ztpolregl_opt( ).

(24)

**********************************************************************

* Ex#cution des classes filles

**********************************************************************

**********************************************************************

lv_ctrl_fille_erreur = ''.

LOOP AT t_polregl_pol ASSIGNING <fs_t_polregl_pol>.

MOVE <fs_t_polregl_pol>-pol_id TO lv_msgv1.

" Message d'information sur la politique trait#e CALL METHOD zcl_ecircltdemo_messages=>bal_add_message EXPORTING

i_log_handle = log_handle i_msgty = 'I'

i_msgid = message_class i_msgno = '000'

i_msgv1 = lv_msgv1 EXCEPTIONS

erreur_add_message = 1 OTHERS = 2.

* Boucle sur la version pour conna#tre la politique de contr#le LOOP AT t_polregl_polver ASSIGNING <fs_t_polregl_polver>

WHERE pol_guid EQ <fs_t_polregl_pol>-guid.

lv_ctrl_fille_erreur = ''.

CLEAR ls_polregl_polctrl.

" r#cup#ration de la politique de contr#le

CALL METHOD zcl_polregl_controle_v2=>get_pol_ctrl EXPORTING

i_pol_id = <fs_t_polregl_polver>-pol_id_ctrl RECEIVING

r_ls_polregl_pol = ls_polregl_polctrl.

IF ls_polregl_polctrl IS INITIAL.

CALL METHOD zcl_ecircltdemo_messages=>bal_add_message EXPORTING

i_log_handle = log_handle i_msgty = 'E'

i_msgid = message_class i_msgno = '016'

i_msgv1 = lv_msgv1 EXCEPTIONS

erreur_add_message = 1 OTHERS = 2.

ELSE.

" r#cup#ration de la version active de la politique de contr#le.

CLEAR ls_polregl_polverctrl.

CALL METHOD zcl_polregl_controle_v2=>get_polver_ctrl EXPORTING

i_guid = ls_polregl_polctrl-guid RECEIVING

r_ls_polregl_polver = ls_polregl_polverctrl.

(25)

IF ls_polregl_polverctrl IS INITIAL.

CALL METHOD zcl_ecircltdemo_messages=>bal_add_message EXPORTING

i_log_handle = log_handle i_msgty = 'E'

i_msgid = message_class i_msgno = '009'

i_msgv1 = lv_msgv1 EXCEPTIONS

erreur_add_message = 1 OTHERS = 2.

ELSE.

"Liste des classes de contr#le # ex#cuter

LOOP AT t_polregl_regl ASSIGNING <fs_t_polregl_regl>

WHERE guid_polver EQ ls_polregl_polverctrl-polver_guid.

IF lv_ctrl_fille_erreur EQ 'X' AND <fs_t_polregl_regl>- regl_bloquante = 'X'.

CONTINUE.

ENDIF.

TRY.

" contr#ler l'activation de la classe de controle, " erreur non catchable,

https://help.sap.com/abapdocu_70/en/ABAPTRY.htm lv_active = 1.

CALL METHOD

zcl_polregl_controle_v2=>get_activation_classe EXPORTING

i_classenom = <fs_t_polregl_regl>-regl_classe RECEIVING

r_active = lv_active.

IF lv_active EQ 0.

lv_msgv1 = <fs_t_polregl_regl>-regl_classe.

CALL METHOD zcl_ecircltdemo_messages=>bal_add_message EXPORTING

i_log_handle = log_handle i_msgty = 'E'

i_msgid = message_class i_msgno = '008'

i_msgv1 = lv_msgv1 EXCEPTIONS

erreur_add_message = 1 OTHERS = 2.

CONTINUE.

ENDIF.

" Application de la r#gle de contr#le

CREATE OBJECT oref1 TYPE (<fs_t_polregl_regl>- regl_classe)

EXPORTING

(26)

i_ls_polregl_polver = <fs_t_polregl_polver>

i_ls_polregl_regl = <fs_t_polregl_regl>

EXCEPTIONS

politique_vide = 1 version_vide = 2 regle_vide = 3 OTHERS = 4.

CALL METHOD oref1->controle_fille IMPORTING

e_ctrl_fille_erreur = lv_ctrl_fille_erreur EXCEPTIONS

erreur_classe_fille = 1 OTHERS = 2.

CATCH cx_root INTO msg_err_catch.

text_msg_err_catch = msg_err_catch->get_text( ).

RAISE erreur.

ENDTRY.

" si la classe est bloquante, le traitement est termin#, pas la peine d'aller plus loin.

IF lv_ctrl_fille_erreur = 'X' AND <fs_t_polregl_regl>- regl_bloquante = 'X'.

" Message d'erreur si aucune r#gle pr#sente pr#sente MOVE <fs_t_polregl_pol>-pol_id TO lv_msgv1.

CALL METHOD zcl_ecircltdemo_messages=>bal_add_message EXPORTING

i_log_handle = log_handle i_msgty = 'E'

i_msgid = message_class i_msgno = '011'

i_msgv1 = lv_msgv1 EXCEPTIONS

erreur_add_message = 1 OTHERS = 2.

EXIT.

ENDIF.

ENDLOOP.

ENDIF.

ENDIF.

" Initialise le traitement des classes bloquantes pour la politique suivante.

lv_ctrl_fille_erreur = ''.

ENDLOOP.

" Sauvegarde du log applicatif # la fin du contr#le de chaque politique pr#sente

CALL METHOD zcl_ecircltdemo_messages=>bal_save EXPORTING

i_log_handle = log_handle EXCEPTIONS

erreur_log_save = 1 OTHERS = 2.

IF sy-subrc <> 0.

(27)

RAISE erreur.

ENDIF.

ENDLOOP.

**********************************************************************

*

**********************************************************************

endmethod.

La classe subalterne est appelée au moment de cette instruction :

" Application de la r#gle de contr#le

CREATE OBJECT oref1 TYPE (<fs_t_polregl_regl>- regl_classe)

EXPORTING

i_ls_polregl_pol = <fs_t_polregl_pol>

i_ls_polregl_polver = <fs_t_polregl_polver>

i_ls_polregl_regl = <fs_t_polregl_regl>

EXCEPTIONS

politique_vide = 1 version_vide = 2 regle_vide = 3 OTHERS = 4.

CALL METHOD oref1->controle_fille IMPORTING

e_ctrl_fille_erreur = lv_ctrl_fille_erreur EXCEPTIONS

erreur_classe_fille = 1 OTHERS = 2.

Ce code a été expliqué dans mon livre de programmation ABAP objet paru en 2009.

6.2.2. Présentation technique d’une classe subalterne : ZCL_POLCTRL00_REGL01_V2 En fait cette classe subalterne fait ce que vous voulez : son code est libre, il est simplement dépendant de la signature d’appel de la méthode CONTROLE_FILLE.

(28)

Exemple de code pour la classe ZCL_POLCTRL00_REGL01_V2 pour la méthode CONTROLE_FILLE :

**********************************************************************

* Contr#le existance de la classe m#re dans les tables SAP

**********************************************************************

DATA: wa_seoclass TYPE seoclass

, lv_msgv1 TYPE bal_s_msg-msgv1 , lv_msgv2 TYPE bal_s_msg-msgv2 , lv_msgty TYPE bal_s_msg-msgty .

e_ctrl_fille_erreur = ''.

**********************************************************************

* R#cup#ration dynamique du nom de la classe de l&apos;instance

**********************************************************************

mv_class_name = |{ cl_abap_classdescr=>describe_by_object_ref( me )-

>absolute_name+7 }|.

lv_msgty = 'W'.

lv_msgv1 = mv_class_name.

CALL METHOD zcl_ecircltdemo_messages=>bal_add_message

(29)

EXPORTING

i_log_handle = log_handle i_msgty = lv_msgty i_msgid = message_class i_msgno = '010'

i_msgv1 = lv_msgv1 EXCEPTIONS

erreur_add_message = 1 OTHERS = 2.

* Commentaire du traitement en cours

lv_msgv1 = ls_polregl_regl-regl_descr.

CALL METHOD zcl_ecircltdemo_messages=>bal_add_message EXPORTING

i_log_handle = log_handle i_msgty = lv_msgty i_msgid = message_class i_msgno = '013'

i_msgv1 = lv_msgv1 EXCEPTIONS

erreur_add_message = 1 OTHERS = 2.

CALL METHOD zcl_ecircltdemo_messages=>bal_save EXPORTING

i_log_handle = log_handle EXCEPTIONS

erreur_log_save = 1 OTHERS = 2.

**********************************************************************

* Traitements de la classe fille

**********************************************************************

SELECT SINGLE * FROM seoclass INTO wa_seoclass

WHERE clsname = ls_polregl_polver-pol_classe.

IF sy-subrc EQ 0.

lv_msgty = 'I'.

lv_msgv1 = ls_polregl_polver-pol_classe.

lv_msgv2 = 'existe'(m01).

ELSE.

lv_msgty = 'E'.

lv_msgv1 = ls_polregl_polver-pol_classe.

lv_msgv2 = 'inexistante'(m02).

ENDIF.

* Message d&apos;erreur si aucune politique pr#sente CALL METHOD zcl_ecircltdemo_messages=>bal_add_message EXPORTING

i_log_handle = log_handle i_msgty = lv_msgty i_msgid = message_class i_msgno = '005'

i_msgv1 = lv_msgv1

(30)

EXCEPTIONS

erreur_add_message = 1 OTHERS = 2.

**********************************************************************

* Validation des traitements r#alis#s

**********************************************************************

IF e_ctrl_fille_erreur = ''.

lv_msgty = ''.

lv_msgv1 = mv_class_name.

CALL METHOD zcl_ecircltdemo_messages=>bal_add_message EXPORTING

i_log_handle = log_handle i_msgty = lv_msgty i_msgid = message_class i_msgno = '012'

i_msgv1 = lv_msgv1 EXCEPTIONS

erreur_add_message = 1 OTHERS = 2.

ELSE.

lv_msgty = 'E'.

CALL METHOD zcl_ecircltdemo_messages=>bal_add_message EXPORTING

i_log_handle = log_handle i_msgty = lv_msgty i_msgid = message_class i_msgno = '004'

EXCEPTIONS

erreur_add_message = 1 OTHERS = 2.

ENDIF.

**********************************************************************

* Sauvegarde du log applicatif

**********************************************************************

CALL METHOD zcl_ecircltdemo_messages=>bal_save EXPORTING

i_log_handle = log_handle EXCEPTIONS

erreur_log_save = 1 OTHERS = 2.

IF sy-subrc <> 0.

RAISE erreur_classe_fille.

ENDIF.

(31)

6.2.3. ZCL_POLCTRL00_REGL02_V2 Le code de la méthode CONTROLE_FILLE :

method CONTROLE_FILLE.

**********************************************************************

* Contr#le existance des classes filles dans les tables SAP

**********************************************************************

DATA: wa_vseoclass TYPE vseoclass

, lv_msgv1 TYPE bal_s_msg-msgv1 , lv_msgv2 TYPE bal_s_msg-msgv2 , lv_msgty TYPE bal_s_msg-msgty , ls_seometarel TYPE seometarel .

e_ctrl_fille_erreur = ''.

**********************************************************************

* R#cup#ration dynamique du nom de la classe de l'instance

**********************************************************************

mv_class_name = |{ cl_abap_classdescr=>describe_by_object_ref( me )-

>absolute_name+7 }|.

lv_msgty = 'W'.

lv_msgv1 = mv_class_name.

CALL METHOD zcl_ecircltdemo_messages=>bal_add_message EXPORTING

i_log_handle = log_handle i_msgty = lv_msgty i_msgid = message_class i_msgno = '010'

i_msgv1 = lv_msgv1 EXCEPTIONS

erreur_add_message = 1 OTHERS = 2.

* Commentaire du traitement en cours lv_msgv1 = ls_polregl_regl-regl_descr.

CALL METHOD zcl_ecircltdemo_messages=>bal_add_message EXPORTING

i_log_handle = log_handle i_msgty = lv_msgty i_msgid = message_class i_msgno = '013'

i_msgv1 = lv_msgv1 EXCEPTIONS

erreur_add_message = 1 OTHERS = 2.

CALL METHOD zcl_ecircltdemo_messages=>bal_save EXPORTING

i_log_handle = log_handle EXCEPTIONS

erreur_log_save = 1 OTHERS = 2.

(32)

**********************************************************************

* Traitements de la classe fille

**********************************************************************

FIELD-SYMBOLS: <lfs_polregl_regl> LIKE LINE OF t_polregl_regl.

* contr#ler qu'au moins une classe est existante

READ TABLE t_polregl_regl ASSIGNING <lfs_polregl_regl>

WITH KEY guid_polver = ls_polregl_polver-polver_guid.

IF sy-subrc NE 0.

lv_msgty = 'E'.

CALL METHOD zcl_ecircltdemo_messages=>bal_add_message EXPORTING

i_log_handle = log_handle i_msgty = lv_msgty i_msgid = message_class i_msgno = '015'

EXCEPTIONS

erreur_add_message = 1 OTHERS = 2.

ELSE.

* contr#le existance des classes filles

LOOP AT t_polregl_regl ASSIGNING <lfs_polregl_regl>

WHERE guid_polver = ls_polregl_polver-polver_guid.

SELECT SINGLE * FROM vseoclass INTO wa_vseoclass

WHERE clsname = <lfs_polregl_regl>-regl_classe.

IF sy-subrc EQ 0.

lv_msgty = 'I'.

lv_msgv1 = <lfs_polregl_regl>-regl_classe.

lv_msgv2 = 'existe'(m01).

ELSE.

lv_msgty = 'E'.

IF <lfs_polregl_regl>-regl_classe IS INITIAL.

lv_msgv1 = 'NON INDIQUEE'(m03).

ELSE.

lv_msgv1 = <lfs_polregl_regl>-regl_classe.

ENDIF.

lv_msgv2 = 'inexistante'(m02).

ENDIF.

CALL METHOD zcl_ecircltdemo_messages=>bal_add_message EXPORTING

i_log_handle = log_handle i_msgty = lv_msgty i_msgid = message_class i_msgno = '006'

i_msgv1 = lv_msgv1 i_msgv2 = lv_msgv2 EXCEPTIONS

(33)

erreur_add_message = 1 OTHERS = 2.

*

* On peut ajouter ici des contr#les suppl#mentaires

* Active ou non, liber#e ou non

* *

* h#rite de la classe mere par exemple. Pourrait se faire par une politique de contr#le aussi

IF wa_vseoclass IS NOT INITIAL. "classe fille existe, donc on peut tester son h#ritage

SELECT SINGLE * FROM seometarel INTO ls_seometarel

WHERE clsname = <lfs_polregl_regl>-regl_classe.

IF ls_seometarel-refclsname NE ls_polregl_polver-pol_classe.

lv_msgty = 'E'.

lv_msgv1 = <lfs_polregl_regl>-regl_classe.

lv_msgv2 = ls_polregl_polver-pol_classe.

CALL METHOD zcl_ecircltdemo_messages=>bal_add_message EXPORTING

i_log_handle = log_handle i_msgty = lv_msgty i_msgid = message_class i_msgno = '007'

i_msgv1 = lv_msgv1 i_msgv2 = lv_msgv2 EXCEPTIONS

erreur_add_message = 1 OTHERS = 2.

ENDIF.

ENDIF.

ENDLOOP.

ENDIF.

**********************************************************************

* Validation des traitements r#alis#s

**********************************************************************

IF e_ctrl_fille_erreur = ''.

lv_msgty = ''.

lv_msgv1 = mv_class_name.

CALL METHOD zcl_ecircltdemo_messages=>bal_add_message EXPORTING

i_log_handle = log_handle i_msgty = lv_msgty i_msgid = message_class i_msgno = '012'

i_msgv1 = lv_msgv1 EXCEPTIONS

erreur_add_message = 1 OTHERS = 2.

(34)

ELSE.

lv_msgty = 'E'.

CALL METHOD zcl_ecircltdemo_messages=>bal_add_message EXPORTING

i_log_handle = log_handle i_msgty = lv_msgty i_msgid = message_class i_msgno = '004'

EXCEPTIONS

erreur_add_message = 1 OTHERS = 2.

ENDIF.

**********************************************************************

* Sauvegarde du log applicatif

**********************************************************************

CALL METHOD zcl_ecircltdemo_messages=>bal_save EXPORTING

i_log_handle = log_handle EXCEPTIONS

erreur_log_save = 1 OTHERS = 2.

IF sy-subrc <> 0.

RAISE erreur_classe_fille.

ENDIF.

endmethod.

6.2.4.Exemple d’exécution

Nous prendrons le programme ZRECIRCLTDEMO_ADMIN_R6 pour exécuter la classe principale et les classes subalternes.

(35)

Lassez les paramètres tel quels.

Le log applicatif permet de constater le comportement de votre politique 1, et l’application des classes subalternes.

(36)
(37)

7. Le serveur ECIR

7.1. Objectif de ce serveur

L’objectif de ce serveur est de procéder à des analyses des tables de paramétrage utilisé sur un serveur SAP NETWEAVER.

Ce serveur est complètement dédié à l’analyse des données présentes dans un client ECIR : il ne présente donc aucune utilité sans utilisation du CLIENT ECIR.

7.2. Interaction avec le client ECIR

Le programme ZRECIRCLTDEMO_ADMIN_R7 permet de mettre à disposition les fichiers des tables de paramétrage à transmettre au serveur ECIR.

7.3. Accès à ce serveur

Il est librement téléchargeable sur notre site de vente de livres : www.ecom-ecir.fr

(38)

8. Limitations – l’avenir

Un traitement de moins de 4 heures lors de ma participation à la foire du livre d’ABU DHABI m’a permis de lever une des contraintes de ce mode opératoire de travail : comment n’avoir qu’une seule signature pour la classe principale (la classe « MERE »).

Il convient d’avoir alors une seul classe principale, avec dans son constructeur, ou son appel de méthode statique, une table interne en tant que paramètre dans laquelle nous transférons l’ensemble des paramètres nécessaires à son fonctionnement.

Il faut utiliser des fields-symbols.

Je vous laisse le plaisir de chercher, j’ai réalisé ce travail en moins de 4 heures.

(39)

9. Liens externes SAP LINK.

SAP GITS

Références

Documents relatifs

1) systématiquement extraire une ligne complète à la fois du fichier dans un string 2) Initialiser un input string stream avec cette ligne lue. 3) Lire dans cet input string stream

Lorsque vous vous connectez à un serveur Presentation Server sous Windows 2000 Server, Service Pack 3 ou une version antérieure, vous ne pouvez pas utiliser un IME du côté client

Si au contraire la fonction a trouvé un fichier, les caractéristiques de ce fichier (i.e. son nom, sa taille, ses attributs,...) sont inscrits dans une zone de la mémoire appelée

Il suffit de mentionner le handle dans BX, le nombre d'octets à lire dans CX, et l'adresse d'un buffer dans DS:DX.. Au cas où vous ne sauriez pas ce qu'est un buffer (ou

Le portable2 fonctionne sous Windows XP ainsi il faudra installer la version client pour Windows que vous trouverez sur le site officiel d'openVPN

La variable 'var' pour la fonction fwrite sera ni plus ni moins qu'une suite d'octets en mémoire, une utilisation de cette dernière va inscrire dans un fichier les octets

Il répertorie tous les produits de Vacances &amp; Aventure. Vous pouvez afficher ce rapport dans Impromptu et dans un navigateur

Le lien Saisir un indice permet d’indiquer un indice qui sera diffusé à la demande de l’étudiant lors de l’affichage de la question (cet indice peut être