Hyperledger Composer Запрос параметра актива - PullRequest
0 голосов
/ 25 апреля 2018

Я определил файл модели композитора Hyperledger как таковой;

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

1 Ответ

0 голосов
/ 25 апреля 2018

Я вставил вашу модель в Composer Playground и получил ошибку с названием вашего Актива, говоря, что Asset было зарезервированным словом - если бы вы смогли развернуть эту модель, используя другой метод, я хотел бы знать, чтобы поднять проблему , Я использовал имя актива Ass1 для моего теста.

В вашем запросе необходимо заключить скобку в условие where, например WHERE (assetStatus == "invalid")

Чтобы ответить на ваш вопрос - вы создали запрос к свойству (assetStatus), но результирующий набор всегда будет списком полных активов , а не просто отдельным свойством (это отличается от SQL select).

Ваш запрос вернет активы, которые соответствуют 'недействительным', и владелец будет возвращен как ссылка на ресурс. например "owner": "resource:org.acme.myNetwork.Owner#AA1"

Если вы хотите получить все свойства Владельца, а не только идентификатор, вам придется написать второй запрос или выполнить запрос GET в реестре Владельца. В качестве альтернативы вы можете использовать фильтр при запросе GET к реестру Ass1 (Asset), который "разрешит" владельца.

То есть с этим фильтром: {"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"
  }
...