Requêter la base Syracuse?

SOLVED

Bonjour, 

Je souhaite faire une requête qui me ramène la liste des users Syracuse avec le groupe auquel ils sont rattachés.
Cette information étant stockée dans MongoDB, comment puis-je l'extraire? 

Je suis en X3 V11P7.

Merci,

Léa

  • 0

    Bonjour,

    Il n'est pas possible à proprement parler de faire une simple requête pour interroger depuis X3 les bases nosql de Mongo.

    Ce qui peut être fait :

    1 - Se rapprocher du service SI qui a déjà eu l'occasion de réaliser des développements spécifiques pour certains clients, afin d'obtenir une extraction txt à un instant T du contenu des bases Syracuse.

    2 - Passer par des utilitaires de type Studio 3T (ex Robot Mongo) pour faire des extractions des bases, ou cURL pour extraire le contenu des json, mais pareil, cela sera des extractions figées, et je ne vois pas comment plugger cela dans X3.

    3 - Passer par un pilote ODBC spécifique à Mongo, pour permettre une connexion directe en SQL (SQL server), ce qui permet de requêter en SQL sur des bases Mongo, et même d'exploiter les requêtes dans le requêteur X3 (déjà testé). Cela reste cependant expérimental, il faut trouver le bon pilote (avec une licence temporaire ou payante), qu'il faut installer et configurer sur le serveur X3. Je peux te transmettre une procédure, mais cela ne peut pas être installé en l'état dans un environnement client sans l'accord de la DSI (qui doit valider et acheter le pilote), et sans avoir fait des tests pour s'assurer que l'environnement est compatible avec le pilote ODBC.

    Bref pour le moment, pas de solution simple et fiable.

  • 0 in reply to Thierry MARAND

    Merci Thierry.... Je laisse Imane à son triste sort alors Slight smile

  • 0 in reply to Thierry MARAND

    Bonjour Thierry,
    La procédure concernant le 3e point peut m’intéresser. Serait-il possible d'en avoir communication ?
    D'avance, merci pour votre retour.

  • 0 in reply to OMT_LYO_FR

    Bonjour,

    Le pilote qui fonctionne se récupère sur https://www.simba.com/drivers/mongodb-odbc-jdbc/
    Le site contient le support nécessaire pour le configurer (mais il faut vraiment tâtonner), sinon laissez moi votre mail pour transmission de la procédure.

  • 0 in reply to Thierry MARAND

    Profil complété avec l'e-mail. Merci d'avance.

  • +1 in reply to OMT_LYO_FR
    verified answer

    Comme le principe pourrait intéresser d'autres personnes, je poste la procédure complète ici :

    Procédure avec SQL Server

    Prérequis

    Vérifier la version de la base MongoDB, le pilote Simba ne fonctionne que sur du 3.0 au 3.6 inclus -> regarder la version dans le nom du répertoire des composants X3 : C:\Sage\FreeComponents\X3ERPV11MDBSVR\mongodb-win32-x86_64-2008plus-ssl-3.2.6\bin

    Vérifier que le service MongoDB est en cours : dans les services : MongoDB Enterprise for Sage X3 - NODE0

    Visual C++ Redistribuable doit être sur le serveur, sinon télécharger le package : https://www.microsoft.com/en-ca/download/details.aspx?id=40784

    Connaître le mot de passe administrateur SQL (sa) pour la liaison avec SQL Server.

    Installation

    Récupérer le pilote Simba : https://www.simba.com/drivers/mongodb-odbc-jdbc/

    • Valider le formulaire pour récupérer le driver.
    • Créer un compte sur le site, ce compte permettra plus tard de redemander une nouvelle licence d’évaluation.
    • A la fin de la procédure, un mail est envoyé avec un fichier de licence permettant d’activer le pilote (pour 20j en version d’évaluation).
    • Il est possible de repasser une commande du pilote d’évaluation tous les 20j pour maintenir la clé à jour.
    • Nota : J'ai demandé le coût du pilote à Simba, sans obtenir de réponse, si quelqu'un obtient cette information je suis intéressé.

    En administrateur, installer le pilote ODBC 64b sur le serveur hébergeant MONGO DB.

    Copier la licence Simba dans le répertoire d’installation du pilote, dans \lib (C:\Program Files\Simba MongoDB ODBC Driver\lib)

    Source ODBC

    Configurer le pilote ODBC en créant une nouvelle source (System DSN) :

    • Nota : un DSN est créé automatiquement à l’installation, il peut être utilisé pour la configuration.

    Sur l’écran principal, renseigner :

    • Data Source Name : Sample Simba MongoDB ODBC DSN (le nom sera utilisé pour se connecter via SQL)
    • Description : MongoDB (facultatif)
    • Server : 127.0.0.1
    • Port : 27017
    • Database : Syracuse

    Ouvrir l’écran SSL Options, et :

    • Cocher les cases Enable SSL et Allow Self-Signed Certificates
    • Renseigner l’adresse du fichier .pem contenant la clé : C:\Sage\FreeComponents\X3ERPV11MDBSVR\certs\x3erpv11vm.pem (à adapter en fonction des installations clients)
    • Renseigner le mot de passe associé à ce fichier de clé : EMV12_SERVER (idem, à adapter). Le mot de passe se trouve dans le répertoire config de MONGODBSVR : mongodb.config.
    • Et bien sûr : tester la connexion.

    Serveur lié SQL

    Sur SQL Server via SSMS.

    Dans les Objets serveur, Serveurs liés, créer un nouveau serveur lié, et renseigner :

    Onglet General :

    • Linked server : (nom donné à ce serveur, utiliser un nom court et pratique car il sera utilisé dans les requêtes)
    • Provider : Microsoft OLE DB Provider for ODBC Drivers
    • Product name : (nom libre)
    • Data source : (le nom donné à la source ODBC)

    Onglet Security :

    • La case à cocher Be made using this security context
    • Remote login : sa
    • Password : mot de passe de sa

    A noter que pour une question de sécurité, il est préférable d’utiliser ou créer un utilisateur dédié à cette connexion (c’est surtout pour ne pas communiquer les identifiants de sa, car de toute manière il n’est pas possible via le pilote ODBC MongoDB d’altérer les données SYRACUSE).

    Tester la connexion (clic droit sur le serveur lié et faire Test connexion).

    Nota : si vous vouliez connecter la base comme Synonymes dans SQL Server, ce n'est pas fonctionnel car le pilote ODBC n’accepte pas les schemas SQL.

    Requêter sur la base MONGO

    Attention : toutes les fonctions associées au clic droit sur une table MONGO depuis SSMS ne fonctionnent pas. Cela peut donner l'impression que la connexion n'est pas fonctionnelle.

    Il faut attaquer les tables manuellement en utilisant le nom du serveur lié [NOMSERVEURLIE].[NOMBASE]..[TABLE]

    Exemple d'une requête pour sortir la liste des utilisateurs Syracuse avec des informations issues à la fois des tables Mongo (group, rôle, badge) et des tables X3 (user, fonction).

    select distinct

    USR_0 as 'X3_USER',

    NOMUSR_0 as 'X3_NOM',

    PRFFCT_0 as 'X3_PROFIL',

    TEXTE_0 as 'X3_Fonction',

    US.login as 'Syr_Login',

    US.lastName as'Syr_Nom',

    -- US.active as 'Syr_actif',

    GR.description_default as 'Syr_Groupe',

    RO.code as 'Syr_Role',

    BA.code as 'Syr_Code Badge',

    BA.[title_fr-fr] as 'Syr_Badge'

    from [SYRACUSE].[syracuse]..[User] US

    left join [SYRACUSE].[syracuse]..[User_groups] USGR on US._id=USGR._id

    left join [SYRACUSE].[syracuse]..[Group] GR on USGR._uuid=GR._id

    left join [SYRACUSE].[syracuse]..[Role] RO on GR.role__uuid=RO._id

    left join [SYRACUSE].[syracuse]..[Role_badges] RB on RB._id=RO._id

    left join [SYRACUSE].[syracuse]..[Badge] BA on RB._uuid=BA._id

    left join [SEED].AUTILIS on US.login=AUTILIS.LOGIN_0

    left join [SEED].AFCTFCT on AUTILIS.PRFFCT_0=AFCTFCT.PRFCOD_0

    left join [SEED].ATEXTRA on ATEXTRA.CODFIC_0='AFCTFCT' and LANGUE_0='FRA' and IDENT1_0=PRFCOD_0

    order by US.login

    Requête dans le Requêteur X3

    Ne jamais utiliser le nom de la base dans l'appel des champs, toujours utiliser un alias. Exemple sur la requête précédente, on appelle US.login as 'Syr_Login' et non [SYRACUSE].[syracuse]..[User].login
    Certains champs ne pourront pas être appelés via le requêteur (exemple le champ active que le requêteur interprète comme une fonction).

    Précautions

    S’assurer qu’on utilise bien la version de Simba adaptée à la base Mongo (32b ou 64b).

    Il n’est pas possible d’extraire des colonnes comportant plus de 8000 caractères.

    Pour les requêtes lourdes ou lentes, utiliser OPENQUERY :

    SELECT * FROM OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE name = ''NewTitle''');

    https://docs.microsoft.com/en-us/sql/t-sql/functions/openquery-transact-sql?view=sql-server-2017