Archive for November, 2009

Upload/download de fichiers

Je vous conseille d’aller lire cet article à sa nouvelle adresse : Upload/download de fichiers

Si la transaction AL11 permet de visualiser les fichiers sur le serveur, elle ne permet ni de les télécharger, ni d’en ajouter. C’est un vrai manque qui se fait resentir de manière chronique chez la plupart des sociétés utilisatrices de SAP.

Généralement, un programme spécifique est déployé pour répondre à ce besoin. J’ai même fait une version améliorée qui historise les fichiers en utilisant une compression tar+bz2, cela fera peut-être l’objet d’un prochain billet.

Les personne ayant déjà travaillés sur un projet de reprise de données connaissent probablement la transaction SXDA et plus spécifiquement SXDA_TOOLS, qui permet de faire des upload/download entre serveur sap et poste client, même si ce n’est pas son but premier. Cette solution standard s’apparente à un hack car on renseigne les paramètres obligatoires avec des données bidons avant d’appeler la fonction de copie. Néanmoins elle évite de développer un programme spécifique.

SXDA_TOOLS : Upload/Download de fichiers

SXDA_TOOLS : Upload/Download de fichiers

Mais grâce au module EHS (Environment, Health and Safety), 2 transaction 100% dédiées à ces opérations ont vues le jour :

  • CG3Z permet de charger un fichier sur le serveur sap depuis le poste client (upload)
    CG3Z : Upload de fichiers

    CG3Z : Upload de fichiers

  • CG3Y permet de charger un fichier sur le poste client depuis le serveur sap (download)
    CG3Y : Download de fichiers

    CG3Y : Download de fichiers

Testé sur divers systèmes sap, de 4.6b à ECC5, les transactions semblent fonctionner convenablement.

Tags: , ,

Modifications en production

Je vous conseille d’aller lire cet article à sa nouvelle adresse : Modifications en production

Faire des modifications en production, c’est mal, c’est même carrément interdit.
Oui, tout le monde le sait. Mais alors, pourquoi SAP met a disposition ces 2 fonctions ?

DB_EXECUTE_SQL
Cette fonction permet d’exécuter la requête SQL passée en paramètre. Cette requête, au format “EXEC SQL”, peut être INSERT, DELETE, UPDATE… ou tout autre instruction ne nécessitant pas de résultat (SELECT ne renverra rien).

Un exemple inoffensif :

DB_EXECUTE_SQL

DB_EXECUTE_SQL


( DROP INDEX TESTINDEX pour supprimer l’index créé)

RFC_ABAP_INSTALL_AND_RUN
Encore plus dangereux, cette fonction compile et exécute tout code abap passé en paramètre. Il suffit de passer le code dans la table PROGRAM. Le résultat sera contenu dans la table WRITES.

Un exemple qui liste les 10 premier clients :

RFC_ABAP_INSTALL_AND_RUN

RFC_ABAP_INSTALL_AND_RUN

Avec un simple accès à SE37, le mode test permet de faire virtuellement n’importe quelle opération sur un système productif grâce à ces 2 fonctions livrées en standard par SAP.

Tags: , , ,

Ajouter des boutons sur un écran de sélection

Je vous conseille d’aller lire cet article à sa nouvelle adresse : Ajouter des boutons sur un écran de sélection

SSCRFIELDS : Boutons dans un écran de sélection

SSCRFIELDS : Boutons dans un écran de sélection


Dans un écran SAP, pour gérer des boutons au niveau de la barre de fonction (toolbar), vous devez créer un statut de surface (set pf-status et SE41) et y définir vos boutons. Sans être vraiment long, l’opération est assez fastidieuse, surtout si l’on doit documenter chaque objet créé ;-)

Dans un écran de sélection, il existe une astuce afin de gérer jusqu’à 5 boutons dans la toolbar sans avoir à déclarer de statut de surface, simplement avec un peu d’ABAP. C’est la structure SSCRFIELDS qui va nous permettre ce petit tour de magie.

  1. Tout d’abord déclarer la structure sscrfields.
    TABLES sscrfields.
  2. Activer les boutons (de 1 à 5)
    SELECTION-SCREEN FUNCTION KEY 1.
    SELECTION-SCREEN FUNCTION KEY 2.
  3. Renseigner le texte du bouton (il est possible d’y mettre un icone)
    INITIALIZATION.
      sscrfields-functxt_01 = 'Fonction 1'.
      sscrfields-functxt_02 = '@01@Fonction 2'.
  4. Capturer l’action dans le PAI de l’écran de sélection
    AT SELECTION-SCREEN.
      CASE sy-ucomm.
        WHEN 'FC01'.
          MESSAGE i000(38) WITH 'Fonction 1 !'.
        WHEN 'FC02'.
          CLEAR sy-ucomm.
          MESSAGE e000(38) WITH 'Fonction 2 !'.
      ENDCASE.

C’est tout !
Autre avantage, les boutons étant intégralement déclarés dans le code, un simple copier-coller vous permet de réutiliser votre code ailleurs ;-)

La preuve par cet exemple complet :

REPORT zkunnr.

* declaration
TABLES sscrfields.

* Ecran de sélection
SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN FUNCTION KEY 2.
SELECTION-SCREEN BEGIN OF BLOCK one WITH FRAME TITLE text-t01.
PARAMETERS p_kunnr LIKE kna1-kunnr.
SELECTION-SCREEN END OF BLOCK one.

INITIALIZATION.
  sscrfields-functxt_01 = 'Fonction 1'.
  sscrfields-functxt_02 = '@01@Fonction 2'.

AT SELECTION-SCREEN.
  CASE sy-ucomm.
    WHEN 'FC01'.
      MESSAGE i000(38) WITH 'Fonction 1 !'.
    WHEN 'FC02'.
      CLEAR sy-ucomm.
      MESSAGE e000(38) WITH 'Fonction 2 !'.
  ENDCASE.

START-OF-SELECTION.
  WRITE p_kunnr.

Tags: , , ,

Terminated change run : fonction RSDDS_AGGR_MOD_CLOSE

Je vous conseille d’aller lire cet article à sa nouvelle adresse : Terminated change run : fonction RSDDS_AGGR_MOD_CLOSE

Lors d’une interruption de chargement d’une donnée de base, elle peut se retrouver complètement bloquée avec une erreur “Attributes for characteristic are locked by a terminated change run” (RSENQ 063 ou RSENQ 062) ou bien une erreur plus générale “Lock NOT set for: ….” (RSENQ 002)

Le cas peut être diagnostiqué en lançant le module fonction : RSDDS_AGGR_MOD_STATE_GET (ne rien renseigner en entrée), la table E_T_CHABASNM contiendra la liste des données de base bloquées. S’il n’y a aucun problème, la fonction renverra une exception.

Pour débloquer la situation il suffit de lancer le module fonction : RSDDS_AGGR_MOD_CLOSE

Tags: ,

BW3 : Suppression des données d’un cube avec ses dimensions

Je vous conseille d’aller lire cet article à sa nouvelle adresse : BW3 : Suppression des données d’un cube avec ses dimensions

L’accroissement de la taille des dimensions sur BW3 est un problème classique de l’équipe de maintenance. En effet, lors d’un cube chargé en “full” quotidiennement, le contenu du cube est généralement purgé au début du chargement.

Malheureusement cette étape de la process chain ne propose pas d’option pour supprimer également le contenu des dimensions. Ainsi leur taille croit jour après jour, finissant si l’on y prend pas garde par dépasser la volumétrie du cube lui même, entrainant ainsi une dégradation des performances de plus en plus prononcée, ainsi qu’un accroissement de la taille occupée par le cube sur le disque.

SAP a finit par se rendre compte de ce problème, et la version BI7 propose en option de supprimer le contenu des dimensions lors de la suppression du contenu d’un cube.
Pour les malheureux qui n’ont pas encore migré, il n’y a pas de solution standard, à part effectuer régulièrement une suppression manuelle du contenu des dimensions (prévoir un réveil a 3h du matin pour intervenir juste avant le chargement de la process chain…)

J’ai donc réalisé un petit ABAP spécifique afin de réaliser cette opération. Il vient remplacer le processus de suppression de contenu de cube dans les process chain. Il suffit de préciser en paramètre d’entrée le nom du cube pour que son contenu ainsi que ses dimensions soient supprimées.

Télécharger le code source de ZCUBE_DELETE

Tags: , , , , , ,