2

我试图查询 Daml 模板文本映射,它给我一个空集,而不是给出特定的数据——例如:

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

在这里,在上面的示例中,我尝试仅使用类型键进行查询,但它没有抛出与该特定键相关的任何数据,但是当我发送 Map 的两个键值时,我可以获得该特定数据。但我想发送该 Map 中只有一个键值用于查询它。如何在 daml 中实现这一点。

4

1 回答 1

3

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”的查询选项。

于 2019-11-29T08:47:14.563 回答