【问题标题】:Hyperledger Composer query not workingHyperledger Composer 查询不起作用
【发布时间】:2018-08-29 20:05:03
【问题描述】:

我正在使用 Hyperledger 作曲家及其模型文件的相关部分开发应用程序,如下所示。

abstract participant Stakeholder {
 o String name
 o Address address
 o String email optional 
 o String telephone optional
 o Certification certification optional 
 o String[] images optional
 o Company company
 o String username
 o String password      
}

participant Farmer identified by stakeholderId extends Stakeholder {
 o String stakeholderId
 o String description optional  
 --> Farm[] farms
}

我正在尝试使用以下查询通过他们的用户名检索特定农民。

query getUserFromUsername{
description:"get user from username"
statement:
        SELECT org.ucsc.agriblockchain.Stakeholder
          WHERE  (username == _$username) 
}

但它没有按预期工作。在这里,由于 Farmer 不是系统中唯一的利益相关者,因此使用了利益相关者抽象参与者。

有什么建议吗?

【问题讨论】:

    标签: hyperledger hyperledger-composer


    【解决方案1】:

    您可以将由stakeholderId 标识的对象移至抽象参与,如下所述。

    abstract participant Stakeholder identified by stakeholderId{
     o String stakeholderId
     o String name
     o Address address
     o String email optional 
     o String telephone optional
     o Certification certification optional 
     o String[] images optional
     o Company company
     o String username
     o String password      
    }
    
    participant Farmer  extends Stakeholder {
     o String description optional  
     --> Farm[] farms
    }

    查询getUserFromUsername

    query getUserFromUsername{
      description:"get user from username"
      statement:
        SELECT org.ucsc.agriblockchain.Farmer
        WHERE  (username == _$username) 
    }

    【讨论】:

    • 这是我的荣幸 :-)
    【解决方案2】:

    因为它是一个抽象类型,所以没有“利益相关者”注册表的数据。您需要查询Farmer注册表... SELECT org.ucsc.agriblockchain.Farmer ...

    如果 Farmer 将 Stakeholkder 从抽象更改为具体也无济于事,因为 Farmer 仍将是 Farmer 注册表的一部分。

    我不确定您想从模型中实现什么,但您可以恢复为单个参与者类型,其中包含针对不同利益相关者类型的可选字段,否则只需为不同的参与者类型编写单独的查询,然后进行整理结果自己在你的代码中。

    更新后续评论

    针对 Farmer 注册表的查询应该可以工作。

    几个提示...

    • 如果您更改了模型或查询,请记住停止并重新启动 REST 服务器,以便它可以发现更改。
    • 如果您更改了模型,请创建一些新的测试数据。
    • 如果您使用 REST 服务器进行测试,当您输入用户名参数时,请勿在值周围使用引号。

    (如果仍有问题,请以 JSON 格式发布整个模型、最新查询以及您使用的一些示例数据。)

    【讨论】:

    • 谢谢。我不能使用像“SELECT org.ucsc.agriblockchain.Farmer WHERE (username == _$username)”这样的查询。它似乎也不起作用。
    • 是的,您可以使用。它需要完全匹配,存储在username 字段中的内容和执行用户需要能够读取Farmer 注册表(即不受ACL 限制)。您应该可以使用 REST API 查询端点尝试它 - 或者,如果您从事务函数调用查询,您可以粘贴您的调用方式。
    猜你喜欢
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    相关资源
    最近更新 更多