Lire Dynamics NAV des Métadonnées de la Table avec SQL
Je voudrais être en mesure de lire les Dynamics NAV 2013 Table des Métadonnées directement à partir de la base de données SQL Server sans nécessitant la valeur liquidative de l'Environnement de Développement.
Je peux afficher le binaire SQL "image" des colonnes BLOB avec une requête comme suit (filtre de manière appropriée avec la clause where):
SELECT
o.[Name],
m.[Object Type],
m.[Metadata], -- XML Metadata
m.[User Code], -- C# Metadata
m.[User AL Code] -- C/AL Metadata
FROM [Navision].[dbo].[Object Metadata] AS m
JOIN [Navision].[dbo].[Object] AS o
ON m.[Object ID] = o.[ID]
AND o.[Company Name] = 'YourCompanyName'
AND o.[Type] = 0 -- 0 is NAV Table Object Type
Je peux enregistrer les données binaires à partir de l' [Métadonnées], [Code d'Utilisateur] et [User AL Code] hors de fichiers à l'aide .Net code ou d'un script SQL pilote. J'ai essayé à l'aide de 7-zip pour décompresser, un éditeur hexadécimal pour la vue et l'Cygwin "fichier" commande pour détecter ces BLOB types de fichiers.
Malheureusement je ne peux pas comprendre comment le décoder ou décompresser les données binaires en lisible ou un format utilisable. Jusqu'à ce que je peut utiliser les données dans les champs directement, je dois ouvrir NAV Environnement de Dev et d'utiliser le Concepteur de l'Objet pour afficher l'séparées par des virgules OptionString propriétés de base zéro de recherche de liste de menu déroulant (chaque élément de la liste est stockée dans la base de données comme un entier de 0 pour le premier élément, 1 pour le second, etc). Les valeurs de chaîne ne sont pas présents dans le SQL de la table de choix, mais NAV ne mettre dans les métadonnées de la table des gouttes.
C'est le chaînon manquant pour moi de prendre en charge entièrement de ma NAV utilisateurs en tant qu'administrateur sans avoir besoin d'une NAV développeur à la recherche de ces numéro-nom NAV champ personnalisé mappages pour moi. Je peux ensuite la recherche de ces valeurs de la liste et de créer les SQL CAS des déclarations ou des tables de consultation personnalisées en tant que de besoin.
Une fois que j'ai cette pièce, je devrait être en mesure de créer des vues SQL, requêtes, rapports, outils, sans avoir besoin de l'accès à l'Dynamics NAV avant la fin de l'utilisateur ou le développeur d'outils.
S'il vous plaît laissez-moi savoir si vous avez connaissance de la binaire format de données utilisé pour ces NAV Métadonnées d'Objet blob propriétés. Des conseils sur la façon de convertir lisible ou format utilisable serait utile.
OriginalL'auteur Mister_Tom | 2014-01-19
Vous devez vous connecter pour publier un commentaire.
Il est possible d'extraire
metadata
à partir de ce tableau par la valeur liquidative, et que je peux voir, il est stocké sous forme de texte brut, mais dans le champ binaire. Il peut être sauvegardé dans un fichier à l'aide de simplesMemoryStream
(en Nav, il est appeléOutSteram
). Donc, pour numéro de table 3-je obtenir XML suivant:Suppose que c'est ce que vous voulez.
L'écriture de Code dans un fichier de la valeur liquidative ressemblera à ceci:
Maintenant, vous avez le choix: essayez de faire la même chose en SQL/.Net (je ne suis pas très chaud) ou vous pouvez demander à votre Nav développeur de faire une sorte de lot de travail qui sera périodiquement (ou sur demande) le processus de toutes les tables' matadata et l'enregistrer dans une table externe/fichier/tout ce dont vous pouvez accéder à partir de SQL.
OriginalL'auteur Mak Sim
J'ai été en mesure d'obtenir une réponse pour le format de ces Métadonnées des champs binaires de l'auteur de l' deV.ch - man vs. le code, Dynamics NAV & C# .NET blog. Basée sur la rétro-ingénierie par devch, nous avons déterminé que les quatre premiers octets (32 bits) de ces champs sont utilisés par NAV pour stocker un "nombre magique" qui détermine la navigation personnalisée de type Blob.
Dans le cas de ces champs de métadonnées, la valeur liquidative Comprimé Blob-Type nombre magique est 0x02457d5b (hex). Afin d'utiliser la norme .Net DeflateStream pour Décompresser, il suffit de jeter loin de ces quatre premiers de la magie-nombre d'octets, puis de traiter le reste du flux à DeflateStream comme d'habitude.
J'ai pu tester avec succès ce processus .Net, maintenant j'ai l'intention de tester avec Python ou d'une autre non-Microsoft dégonfler les outils pour voir si le dégonfler la mise en œuvre suit la norme de l'industrie. Merci encore à devch pour l'article qui a conduit à cette solution: L'accès Comprimé Gouttes provenant de l'extérieur de la NAV (NAV2013) (Revisited).
Mise à jour: testé avec Python zlib et ça marche!!! Conforme aux normes Dégonfler algorithme est utilisé une fois la navigation personnalisée Blob-type nombre magique est supprimé. Voici un exemple de code (Python):
Utiliser quelque chose comme ce qui suit pour tester:
De sûr le .Net DeflateStream travaux après avoir retiré les quatre premiers octets. Cet exemple est juste pour montrer que vous n'êtes pas limité à l'utilisation .Net languages.
Je suppose que c'est un type de préfixe de sorte qu'ils peuvent stocker des choses dans un format différent, si ils le souhaitent..
Pas une telle fonction de la valeur liquidative si
Ils pourraient ajouter un !
Ne fonctionne pas en NAV 2009, mais fonctionne toujours de la valeur liquidative 2018
OriginalL'auteur Mister_Tom
Pourquoi ne pas utiliser des services web et d'obtenir les données dont vous avez besoin sans avoir à faire quelque chose de compliqué?
Les utilisateurs peuvent ensuite utiliser PowerPivot pour Excel et créer leurs propres rapports.
Vous pouvez également utiliser le fichier Excel Add-In pour NAV et seulement exporter les données vers excel directement à partir de la valeur liquidative, et puis rafraîchir dans Excel.
Les Services Web sont intégrés à la valeur liquidative. Si vous tapez
Web Services
dans la Barre de Recherche sur le Rôle de Centre, vous pouvez ensuite publier une Page, Codeunit ou de la Requête et de la rendre disponible via SOAP ou ODATA. saurav-nav.blogspot.co.royaume-uni/2013/11/...OriginalL'auteur Steve