Запрос Hyperledger Composer не работает - PullRequest
0 голосов
/ 29 августа 2018

Я разрабатываю приложение, используя Hyperledger composer и связанную с ним часть файла модели, как показано ниже.

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 не является единственным участником системы, используется абстрактный участник Заинтересованного лица.

Есть предложения?

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Вы можете переместить идентифицированную стейкхолдером в абстрактное участие, как указано ниже.

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) 
}
0 голосов
/ 29 августа 2018

Поскольку это тип abstract , данные для реестра заинтересованных сторон отсутствуют. Вам нужно запросить реестр фермера ... SELECT org.ucsc.agriblockchain.Farmer ...

Изменение Stakeholkder с абстрактного на конкретный также не поможет, если Farmer расширит его, потому что Farmer все еще будет частью реестра Farmer.

Я не совсем уверен, чего именно вы хотите добиться от модели, но вы можете вернуться к одному типу участника с необязательными полями для разных типов заинтересованных сторон, в противном случае просто напишите отдельные запросы для разных типов участников и сопоставьте результаты сами в вашем коде.

Обновление после комментария

Этот запрос к реестру фермера должен работать.

Пара подсказок ...

  • Если вы изменили модель или запрос, не забудьте остановить и перезапустить сервер REST, чтобы он мог обнаружить изменения.
  • Если вы изменили модель, создайте новые тестовые данные.
  • Если вы тестируете на сервере REST, при вводе параметра для имени пользователя не используйте кавычки вокруг значения.

(Если у вас все еще есть проблемы, пожалуйста, опубликуйте всю модель, последний запрос и некоторые примеры данных, которые вы используете в формате JSON.)

...