特别是在NAV 2013中。当我使用Page Web服务查找记录时,我会得到如下响应:
<Soap:Envelope xmlns:Soap="http://schemas.xmlsoap.org/soap/envelope/">
<Soap:Body>
<ReadMultiple_Result xmlns="urn:microsoft-dynamics-schemas/page/[PAGENAME]">
<ReadMultiple_Result>
<[RECORDNAME]>
<Key>##;[KEYSTUFF KEYSTUFF KEYSTUFF];[OTHER KEYSTUFF];</Key>
<[OTHERFIELD]>[OTHERDATA]</[OTHERFIELD]>
</[RECORDNAME]>
</ReadMultiple_Result>
</ReadMultiple_Result>
</Soap:Body>
</Soap:Envelope>
然后,如果我想通过Web服务与该记录交互以执行Update
或Delete
,我必须使用Key
字段来直接引用它。
我想知道的是,我是否可以通过Codeunit Web服务公开XMLPort,并且仍然直接导出该Key
字段,或者我是否必须进行一些单独的查找才能将其添加到每行的导出中?或者,由于我计划与记录交互,将这些信息作为页面公开可能更有意义吗?
在这个问题中,一个人说
密钥的至少一部分是组成主密钥的列的Base64编码字符串
因此,密钥的第一部分是某种salt或时间戳,用于避免在通过公开页面更新时覆盖记录。
Nav中没有允许计算特定记录的web服务密钥的功能,也没有办法在C/AL中使用该密钥来获取记录。
如果您打算使用公开的代码单元进行读取和写入,则可以使用XML port
,将Direction
属性设置为Both
,作为读取和更新某些表中记录的过程参数。当然,在这种情况下,您必须使用XML端口中的所有主键字段来标识记录。