Quelquepart

Blog d'un développeur ABAP

Vous êtes ici : Accueil>Fonction, Liste mémo>Caractères interdits sur BW

Caractères interdits sur BW

Rédigé par Sébastien Hermann dans Fonction, Liste mémo - 1 commentaire

Lors de chargements il peut arriver d'avoir une erreur à cause de caractères interdits : "Value 'xxxxx' for characteristic YYYY contains invalid characters"

La transaction RSKC permet de définir la liste des caractères autorisés. Classiquement le générique "ALL_CAPITAL" est utilisé. Mais à quoi correspond-il exactement ?

ALL_CAPITAL autorise tous les caractères à l'exception de 31 caractères de contrôle, c'est-à-dire des caractères invisibles généralement utilisés par les programmes de traitement de texte pour gérer la mise en forme. Aucun de ces caractères ne peut être saisi directement dans SAP, seules des interfaces tiers peuvent éventuellement les injecter. En revanche, il est fréquent de les introduire par erreur lors de copier/coller depuis des logiciels tiers (Word, Excel ou Outlook par exemple).

SAP ne sachant pas les interpréter, ils sont affichés comme des # (mais sont conservés dans leur forme d’origine grâce à Unicode).

Voici la liste des 31 caractères interdits par ALL_CAPITAL :

CodeDésignation
01START OF HEADING
02START OF TEXT
03END OF TEXT
04END OF TRANSMISSION
05ENQUIRY
06ACKNOWLEDGE
07BELL
08BACKSPACE
09CHARACTER TABULATION
0ALINE FEED (LF)
0BLINE TABULATION
0CFORM FEED (FF)
0DCARRIAGE RETURN (CR)
0ESHIFT OUT
0FSHIFT IN
10DATA LINK ESCAPE
11DEVICE CONTROL ONE
12DEVICE CONTROL TWO
13DEVICE CONTROL THREE
14DEVICE CONTROL FOUR
15NEGATIVE ACKNOWLEDGE
16SYNCHRONOUS IDLE
17END OF TRANSMISSION BLOCK
18CANCEL
19END OF MEDIUM
1ASUBSTITUTE
1BESCAPE
1CINFORMATION SEPARATOR FOUR
1DINFORMATION SEPARATOR THREE
1EINFORMATION SEPARATOR TWO
1FINFORMATION SEPARATOR ONE

Pour autoriser ces caractères, il est possible d'utiliser "ALL_CAPITAL_PLUS_HEX" dans RSKC.

Quelques fonctions utiles :
RSKC_ALLOWED_CHAR_GET permet d'obtenir la liste des caractères autorisés saisis dans RSKC.
RSKC_CHAVL_CHECK permet de tester si une valeur va être autorisée par BW.

Un petit fragment de code qui permet de supprimer d'une variable les 31 caractères :

* w_data contient le texte à nettoyer
  DATA: l_length TYPE i,
        l_pos TYPE i,
        lo_not_allowed TYPE REF TO cl_abap_conv_in_ce,
        l_not_allowed_x(32) TYPE x VALUE
'000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F',
        l_not_allowed TYPE string.

* Get list of unauthorized values
  lo_not_allowed = cl_abap_conv_in_ce=>create( input = l_not_allowed_x ).
  lo_not_allowed->read( IMPORTING data = l_not_allowed ).

* search if unauthorized value is found
  IF w_data CA l_not_allowed.
* If found, replace it by space
    l_length = STRLEN( w_data ).
    l_pos = 0.
    DO l_length TIMES.
      IF w_data+l_pos(1) CA l_not_allowed.
        w_data+l_pos(1) = space.
      ENDIF.
      l_pos = l_pos + 1.
    ENDDO.
  ENDIF.

1 commentaire

#1 Cyril a dit :

Super utile, merci !

Écrire un commentaire

 Se rappeler de moi sur ce site

Capcha
Entrez le code de l'image :