我尝试查询 Daml 模板文本 - 映射它给我抛出空集,而不是提供特定的数据 - 例如:
"Data": [
{ "information":"XYZ",
{
"textMap": {
"Type": {
"_1": "A",
"_2": "B"
},
"Date": {
"_1": "2019-11-29",
"_2": "AMD"
},
}
}
}}
]
这里,在上面的示例中,我尝试仅使用类型键进行查询,但它没有抛出与该特定键相关的任何数据,但是当我发送 Map 的两个键值时,我可以获得该特定数据。但是我只想发送该 Map 内的一个键值以进行查询。如何在 daml 中实现这一目标。
最佳答案
TextMap
的行为类似于查询 API 中的列表。 map 是一个值,您只能将其作为一个整体进行匹配。您可以看到列表 here 的行为.
假设您的模板中有一个简单的 TextMap
:
daml 1.2
module Main where
import DA.TextMap as Map
template T
with
p : Party
m : TextMap Int
where
signatory p
setup = scenario do
p <- getParty "p"
submit p do
create T with
p
m = Map.fromList [
("one", 1),
("two", 2)
]
使用以下有效负载对 contracts/search
的调用将匹配。
{
"%templates": [
{
"moduleName": "Main",
"entityName": "T"
}
],
"m" : {
"two": "2",
"one": "1"
}
}
即使 map 项的顺序颠倒,m
的参数也表示相同的 map ,因此值相等。
但是,简单地更改为 "m": { "one": "1"}
将不匹配。我们正在查询 T
类型的合约,其中的 map 只有一个条目 "one"
。
目前没有“containsKey”或“contains”的查询选项。
关于daml - 如何通过JSonApi从Daml中查询Map值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59100131/