如何通过JSonApi从Daml中查询Map值?

时间:2019-11-29 06:59:52

标签: daml

我尝试查询Daml模板文本-映射,将其扔给我空集,而不是提供该特定数据- 例如:

 "Data": [
            { "information":"XYZ",
        {
            "textMap": {
                "Type": {
                    "_1": "A",
                    "_2": "B"
                },
                "Date": {
                    "_1": "2019-11-29",
                    "_2": "AMD"
                },
                }
            }
        }}
    ]

在这里,在上面的示例中,我尝试仅使用类型键查询,但没有引发与该特定键有关的任何数据,但是当我发送Map的两个键值时,我都可以获取该特定数据。希望仅在该Map内发送一个键值进行查询。如何在daml中实现此功能。

1 个答案:

答案 0 :(得分:3)

TextMap的行为类似于查询API中的列表。地图是一个值,您只能在整个 上进行匹配。您可以看到列表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"
  } 
}

即使切换了地图项的顺序,m的参数也代表相同的地图,因此值相等。

但是,仅更改为"m" : { "one" : "1" }将不匹配。我们正在查询类型为T的合同,其中包含只有一个条目"one"的地图。

当前没有针对“ containsKey”或“ contains”的查询选项。