manifest - Dynamics 365 数据实体包清单查询数据编码
问题描述
在使用 DFO365 集成数据时,我们使用数据项目来集成来自其他系统的数据。可以导出这些项目的定义;给出一个包含多个 XML 文件的 zip 文件;项目中的每个数据实体一个,一个PackageHeader.xml
和一个Manifest.xml
文件。清单文件中有一个名为 的元素QueryData
,它似乎是一个以字符串形式保存的字节数组。
QueryData 字段如下所示:
<QueryData>4a012f270000110001e649010000000a4de9030000862b00008c2b0000882b00
008b2b0000000084045400610078005600410054004e0075006d005400610062
006c00650045006e0074006900740079000000110001e8032e00540061007800
5600410054004e0075006d005400610062006c00650045006e00740069007400
79005f0031000000e2092a005400610078005600410054004e0075006d005400
610062006c00650045006e0074006900740079000000094de8030000f3190000
00920402001100010000ffffffffffffffff9b04ffff9a04ffff000000000000
01ffffffff009005000000000000000000000000000000000000000000000000
000000000000</QueryData>
我尝试将其视为字节编码的字符串并取得了一些成功;即下面的 PowerShell 将上面的代码转换为:
Ŋ✯ ʼn 蘀+谀+蠀+謀+ 萀各愀砀嘀䄀吀一甀洀吀愀戀氀攀䔀渀琀椀琀礀 ᄀĀϨ.TaxVATNumTableEntity_1 ৢ*TaxVATNumTableEntity 䴉Ϩ ᧳ 鈀ȄᄀĀ қҚ !ÿ �
所以部分成功;即确认包裹与增值税号有关。我想知道是否有人对此字段的结构有更多了解以使查询的其余部分可读;因为这将允许我以人类可读的方式比较源代码控制中的项目。
我知道二进制数据并不总是可读/需要特定的代码知识,旨在处理它以使其可读;只是想知道是否有人有这方面的知识。我有其他解决方案(例如将旧数据项目导入 DFO365 以比较它们的定义),但如果我可以通过代码做一些事情,那将简化和加速此类任务。
PowerShell 将 QueryData 转换为字符串
clear-host
$x = @'
4a012f270000110001e649010000000a4de9030000862b00008c2b0000882b00
008b2b0000000084045400610078005600410054004e0075006d005400610062
006c00650045006e0074006900740079000000110001e8032e00540061007800
5600410054004e0075006d005400610062006c00650045006e00740069007400
79005f0031000000e2092a005400610078005600410054004e0075006d005400
610062006c00650045006e0074006900740079000000094de8030000f3190000
00920402001100010000ffffffffffffffff9b04ffff9a04ffff000000000000
01ffffffff009005000000000000000000000000000000000000000000000000
000000000000
'@ -replace '\s+',''
[byte[]]$arr = 0..(($x.Length / 2)-2) | %{ [Convert]::ToByte($x.Substring((2*$_),2),16) }
[System.Text.Encoding]::Unicode.GetChars($arr) -join ''