
Jeux de caractères et conversion avec Microsoft Dynamics NAV et MS SQL (3.2.92v)
La conversion des caractères entre différents systèmes utilisant des jeux de caractères différents est toujours un exercice très délicat. Si tous les systèmes pouvaient fonctionner nativement, par exemple en UTF8, ce serait beaucoup plus simple. Mais tant que ce n'est pas le cas, nous (en tant que fournisseur de solutions d'intégration de données) devons faire de notre mieux pour gérer ces problématiques avec le moins d'impact possible pour nos utilisateurs finaux.
C'est donc avec plaisir que je vous présente une nouvelle façon de gérer la conversion des caractères entre les systèmes qui prennent en charge l'UTF8 (comme Salesforce.com) et les systèmes utilisant une base de données MS SQL (comme Microsoft Dynamics NAV, GP, AX).
En interne, chez RapidiOnline, nous prenons en charge le traitement des textes en UTF8 (unicode) depuis un certain temps déjà. Le point de départ reste l'utilisation d'un jeu de caractères standard (par exemple cp850, ou celui utilisé par les systèmes source et destination), car tous les systèmes ne prennent pas en charge l'unicode et nous ne savons pas toujours quel jeu de caractères est utilisé dans les systèmes installés localement. Nous pouvons toutefois configurer un service RapidiOnline pour qu'il utilise l'UTF8 en interne pour tous les textes transférés vers ou depuis un système donné.
Pour les systèmes qui prennent en charge l'UTF8, cela fonctionne parfaitement, car il n'y a aucune conversion et nous sommes certains de ne perdre aucune information - les données peuvent donc être transférées correctement.
Cependant, si des données sont transférées entre un système utilisant l'UTF8 et un autre système qui ne prend pas en charge l'UTF8 ou l'unicode - ce qui reste le cas pour la plupart des installations Microsoft Dynamics NAV -, une conversion doit avoir lieu à un moment donné entre les systèmes.
Pour les systèmes fonctionnant sur MS-SQL Server, nous avons désormais la possibilité de laisser le pilote MS-SQL gérer cette conversion. Nous fournissons les textes au pilote MS-SQL au format UTF8 et lui demandons d'effectuer la conversion. Le même principe s'applique lors de la lecture des textes : le pilote MS-SQL livre les textes au format UTF8. De cette façon, nous conservons les données au format UTF8 lors du transfert, ce qui évite toute perte d'information. Autrement dit, nous laissons le système qui a besoin des données dans un autre format (le serveur de base de données MS-SQL) effectuer la conversion. Comme le serveur de base de données MS-SQL est le système du client et qu'il est configuré pour connaître et prendre en charge le jeu de caractères utilisé en interne dans cette base de données, c'est aussi le système le mieux placé pour effectuer une conversion correcte des caractères.
Comment configurer le RapidiConnector pour laisser le pilote MS-SQL gérer la conversion
Pour configurer le RapidiConnector afin de laisser le pilote MS-SQL gérer la conversion entre l'UTF8 et le jeu de caractères utilisé en interne dans la base de données, vous devez ajouter deux lignes (paramètres) au fichier rapidi.cfg pour chaque RapidiConnector (rapidi.exe) que vous avez installé (localement sur votre serveur).
Veuillez ajouter les lignes suivantes au(x) fichier(s) rapidi.cfg :
MSSQLUseUnicodeText : 1
MSSQLUseUnicodeTextVarChar : 1
Les deux paramètres valent 0 par défaut, vous devez donc les régler sur 1 pour qu'ils prennent effet. MSSQLUseUnicodeText permet d'envoyer/recevoir les données en UTF8 pour les champs de types SQL_WCHAR et SQL_WVARCHAR (champs unicode multioctets dans MS SQL). Le paramètre MSSQLUseUnicodeTextVarChar fait de même pour SQL_CHAR et SQL_VARCHAR (colonnes de caractères monooctet).
Comment configurer votre service central RapidiOnline pour utiliser des textes en UTF8
Du côté central, nous devons également indiquer au service RapidiOnline qu'il doit conserver les textes au format UTF8 et ne pas les convertir vers un autre jeu de caractères. Cela se fait également via un paramètre du fichier cfg, comme suit :
SForceUseUnicodeText : 1
Ce paramètre est également à 0 par défaut (il doit donc être réglé sur 1 pour fonctionner). Il n'est actuellement pas possible de définir des paramètres dans le fichier cfg central via l'interface utilisateur ; vous devez donc demander à notre support de le faire pour vous.
Ces fonctionnalités ont été introduites dans la version 3.2.92v. Si nécessaire, veuillez demander à notre support de vous aider pour une mise à niveau.
Gérer correctement les textes UTF8 et les préserver en UTF8 dans les formules
Lors du passage à des textes au format UTF8 en interne dans RapidiOnline, les fonctions qui manipulent les chaînes de texte doivent également reconnaître qu'une chaîne est au format UTF8 et la traiter correctement. Tout aussi important, elles doivent également restituer le résultat sous forme de chaîne encodée en UTF8. Un certain nombre de fonctions le faisaient déjà (comme POS, LENGTH et COPY), mais certaines fonctions livraient encore le résultat sous forme de texte normal.
Désormais, les fonctions BEFORE, AFTER, LAST, MIDDLE, DEL, POSTDEL fonctionnent également avec les chaînes de texte UTF8 (unicode), en conservant la chaîne au format unicode pour un traitement ultérieur.
Ce changement a été introduit dans la version 3.2.92x. Vous devez mettre à niveau à la fois le central et le RapidiConnector vers cette version. Veuillez demander à notre support de vous aider pour toute mise à niveau.
Comme toujours, vos commentaires et questions sont les bienvenus.
Merci
Michael
Votre succès est notre succès !
Découvrez notre équipe de réussite client, qui veille à ce que vous tiriez le meilleur parti de votre service !