我希望能够直接从 SQL Server 数据库读取Dynamics NAV 2013 表元数据,而不需要 NAV 开发环境。
我可以使用如下查询查看二进制 SQL“图像”BLOB 列(使用 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
我可以使用 .Net 代码或带有 SQL 驱动程序的快速脚本将 [元数据]、[用户代码] 和 [用户 AL 代码] 中的二进制数据保存到文件中。我尝试使用 7-zip 解压缩,使用十六进制编辑器查看,以及 Cygwin“文件”命令来检测这些 BLOB 文件类型。
不幸的是,我无法弄清楚如何将二进制数据解码或解压缩为可读或可用的格式。在我可以直接使用这些字段中的数据之前,我必须打开 NAV Dev Environment 并使用对象设计器查看从零开始的查找列表下拉菜单的逗号分隔的 OptionString 属性(列表中的每个项目都存储在后端数据库作为整数 - 第一项为 0,第二项为 1,依此类推)。SQL 查找表中不存在字符串值,但 NAV 确实将它们放在表元数据 blob 中。
这是我完全支持我的 NAV 用户作为 DBA 而不需要 NAV 开发人员为我查找这些数字到名称的 NAV 自定义字段映射的缺失链接。然后,我可以查找这些列表值并根据需要创建匹配的 SQL CASE 语句或自定义查找表。
一旦我有了这篇文章,我应该能够创建高级 SQL 视图、查询、报告和工具,而无需访问 Dynamics NAV 前端用户或开发人员工具。
如果您了解用于这些 NAV 对象元数据 blob 属性的二进制数据格式,请告诉我。任何关于如何转换为可读或可用格式的建议都会有所帮助。