在Hyperledger Composer中使用关系查询

时间:2018-05-21 03:20:58

标签: hyperledger-fabric hyperledger hyperledger-composer

我在Hyperledger Composer中进行了查询,其中查询尝试搜索借用者的所有发票。借款人是发票资产的参与者:

asset Invoice identified by invoiceId {
  o String invoiceId
  o String invoiceRef optional
  o DateTime dateCreated
  o String type
  o DateTime invoiceOrPurchaseDate optional
  o Double amount
  o DateTime invoiceDueDate optional
  o String paymentStatus optional
  o Boolean overdue
  o Double outstandingBalance
  --> Participant borrower
  --> Participant lender
}

我需要一个能够返回借款人所有发票的查询,我在Hyperledger编写器中通过以下编码来完成此操作:

query QInvoiceByBorrower {
    description: "Select invoice by borrower"
    statement:
        SELECT org.n.blockchaindemo.Invoice
            WHERE (_$borrower == borrower)
}

但是当我尝试通过REST API调用查询时,我得到[]空结果如下:

http://10.10.4.244:3000/api/queries/QInvoiceByBorrower?borrower=resource:org.n.blockchaindemo.User#1381991

我是否知道如何创建将在Hyperledger Composer中使用外部关系进行搜索的查询?

1 个答案:

答案 0 :(得分:3)

在您的发票定义中,您需要引用您的特定参与者类型,即用户,而不是系统类型参与者。因此,发票的最后一部分将是:

.without-shortcomings{
//overide style either component level or global
  background-color: #fff;
}


<nb-checkbox class="without-shortcomings">without shortcomings</nb-checkbox>
<nb-checkbox>Defects without without defects</nb-checkbox>

通过此更改,您的查询应该有效。一种有用的诊断方法是在没有 where 子句的情况下创建重复查询,然后检查返回的数据以帮助理解用于查询的参数。

(通过使用参与者,我认为您的资产将在首次使用资产类型时包含模型中的第一个参与者类型 - 这听起来可能会产生一些意外行为,因此指定实际参与者类型是有意义的。)