daml - 如何通过JSonApi从Daml中查询Map值?
问题描述
我试图查询 Daml 模板文本映射,它给我一个空集,而不是给出特定的数据——例如:
"Data": [
{ "information":"XYZ",
{
"textMap": {
"Type": {
"_1": "A",
"_2": "B"
},
"Date": {
"_1": "2019-11-29",
"_2": "AMD"
},
}
}
}}
]
在这里,在上面的示例中,我尝试仅使用类型键进行查询,但它没有抛出与该特定键相关的任何数据,但是当我发送 Map 的两个键值时,我可以获得该特定数据。但我想发送该 Map 中只有一个键值用于查询它。如何在 daml 中实现这一点。
解决方案
TextMap
行为类似于查询 API 中的列表。地图是一个值,您只能将其作为一个整体进行匹配。您可以在此处查看列表的行为。
假设您有一个简单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"
}
}
即使地图项的顺序交换了,参数 form
表示相同的地图,所以值是相等的。
但是,更改为根本"m" : { "one" : "1" }
不匹配。T
我们正在使用只有一个条目的地图查询类型的合同"one"
。
目前没有“containsKey”或“contains”的查询选项。