Hyperledger Composer 查询资产的参数

基努

我已经定义了我的超级账本作曲家模型文件;

namespace org.acme.myNetwork

asset Asset identified by assetId {
 o String assetId
 --> Owner owner
 o String assetStatus
}

participant Owner identified by ownerId {
 o String ownerId
 o String ownerName
 o String ownerStatus
}

我想查询具有 assetStatus = "invalid" 值的资产的所有者。我已经阅读了hyperledger composer 查询语言文档,他们似乎只有个人可以查询资产或参与者的示例,但它没有显示如何查询资产或参与者参数的示例。

 query selectAsset {
  description: "Select Asset"
  statement: SELECT org.acme.myNetwork.Asset
              WHERE assetStatus == "invalid"
 }

 query selectAssetParameter {
  description: "Select Asset Parameter"
  statement: SELECT org.acme.myNetwork.Asset.owner
              WHERE assetStatus == "invalid"
 }

上面查询的第一个示例是有效的,但是编写的第二个查询会在操场上抛出此错误:

Error found! t: Namespace is not defined for type org.acme.myNetwork.Asset.owner

撒切尔夫人

我将您的模型粘贴到 Composer Playground 中,并收到一个错误,其中显示您的资产名称Asset是保留字 - 如果您能够使用不同的方法部署此模型,我想知道提出问题。Ass1在测试中使用了资产名称

对于您的查询,您需要在 where 条件周围加上括号,例如 WHERE (assetStatus == "invalid")

要回答您的问题 - 您已针对属性 (assetStatus) 创建了一个查询,但结果集将始终是完整资产的列表,而不仅仅是单个属性(这与 SQL 选择不同)。

您的查询将返回与“无效”匹配的资产,所有者将作为资源引用返回。例如"owner": "resource:org.acme.myNetwork.Owner#AA1"

如果您想获取所有者的所有属性,而不仅仅是 ID,那么您将不得不编写第二个查询,或者在所有者注册表上执行 GET 请求。作为替代方案,您可以对 Ass1(资产)注册表的 GET 请求使用过滤器过滤器将“解析”所有者。

因此,使用此过滤器:{"where":{"assetStatus":"invalid"}, "include":"resolve"}/api/Ass1使用 GET 请求的此端点上,您将看到以下结果:

  {
   "$class": "org.acme.myNetwork.Ass1",
    "assetId": "WILL01",
    "owner": {
      "$class": "org.acme.myNetwork.Owner",
      "ownerId": "AA1",
      "ownerName": "Albert",
      "ownerStatus": "VALID"
    },
    "assetStatus": "invalid"
  }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章