Composer查询以匹配参与者引用

时间:2017-09-27 19:19:27

标签: hyperledger-composer

所以我有这样的查询:

query selectOrder{
  description: "Select an Order that matches a Client reference and an Order Number"
  statement:
      SELECT com.x.Order
      WHERE (client == _$client AND orderNumber == _$orderNumber)
}

订单是这样的:

asset Order identified by uuid {
  o String uuid
  --> Client client
  o String orderNumber
  --> Item[] items 
}

如何将对客户端的引用传递给查询?

我尝试了参考,并被告知toJSON它。 我试过了,它不会解析这个问题 - 解析查询时有一个明显的问题。

我在文档中找不到答案,所以我想知道是否有人这样做了,或者我是否必须保存客户端ID而不是对客户端的引用并失去完整性。

编辑:有关下面第一个答案的完整性。

我正在尝试将Item添加到Items数组中。 我的Item对象定义如下:

asset Item identified by uuid {
  o String uuid
  o DateTime timestamp
  o String orderNumber  
  --> Client client
  o String[] message
}

调用事务时,传入的单个对象是Item。 我将Item.client设置为查询中的_ $ client值。

我应该使用“资源:”预先挂起吗? 我问,因为我认为那已经在参考字符串中 - 至少它是在操场上的视图中。

EDIT2: 所以我手动构造以下变量:

var RSRC = 'resource:com.x.Client#XYZ123'

将其设置为此查询中的客户端

return query('selectOrder', {agency : RSRC, orderNumber : orderNumber});

但我还是得到了这个:

  

错误:未知运算符“0” - 应该是$ eq,$ lte,$ lt,$ gt之一,   $ gte,$ exists,$ ne,$ in,$ nin,$ size,$ mod,$ regex,$ elemMatch,$ type   或$ all

下一步是什么? 在引号中嵌入“resource ...”字符串也不起作用。

1 个答案:

答案 0 :(得分:1)

您的查询看起来没问题,但您需要传递一个格式为的字符串: resource:type.Name#instance关系。

E.g。 resource:org.acme.Car#123ABC