Как использовать запрос в Hyperledger composer logic.js, если запрос имеет несколько входов? - PullRequest
0 голосов
/ 21 февраля 2019

для запросов в logic.js я могу использовать

await query('selectCommoditiesWithHighQuantity')

Но как мне это сделать, если у меня несколько входов?если у запроса есть такая функция

query selectCommoditiesByTimeAndOwnerAndDataType {
  description: "Select all commodities based on their sender country"
  statement:
      SELECT org.stock.mynetwork.Commodity
          WHERE(time  > _$from AND time < _$to AND owner == _$owner AND dataType == _$dataType)
}

как я могу вызвать этот запрос со стороны js?

edit: js code

/**
 * Track the trade of a commodity from one trader to another
 * @param {org.stock.mynetwork.Receive} receive - the receive to be processed
 * @transaction
 */
async function receiveCommodity(receive) {

    let q1 = await buildQuery('SELECT org.stock.mynetwork.Commodity ' +
                                                'WHERE (productName == _$productName AND owner == _$owner)');


let result2 = await query(q1,{productName:receive.productName,owner: receive.newOwner});
}

проблема сlet result2 = await query(q1,{productName:receive.productName,owner: receive.newOwner}); часть.Если я просто использую productName: receive.productName, он работает отлично, но когда я добавляю owner: receive.newOwner, он нуждается в serialize.json

1 Ответ

0 голосов
/ 23 февраля 2019

Таким образом, вы можете написать запрос в файле .qry и вызвать его, но я не рекомендую делать это.Вы можете сделать те же самые запросы непосредственно из SDK и в файле logic.js.Это объясняется, например, несколькими днями позже, что вы хотите добавить новый API, который запрашивает определенное значение, если вы полагаетесь на файл .qry (который будет работать), то вам нужно будет развернуть новую версиюумный контакт, тогда как если вы используете SDK, вы можете внести изменения в API и развернуть новый сервер приложений как можно скорее.

async function someTransaction(receive) {
  let assetRegistry = await getAssetRegistry('YOUR_NAME_SPACE');
  let ownerRegistry = await getParticipantRegistry('YOUR_NAME_SPACE');

  let statement = 'SELECT NAME_SPACE_OF_ASSET WHERE (owner == _$owner && dataType == _$dataType)';
  let qry = buildQuery(statement);

  // This query can be done in different ways
  // assuming newOwner is a string (id of participant)
  let allAssets = await query(qry, { owner: receive.newOwner, dataType: receive.dataType });

  // assuming newOwner is a participant
  let allAssets = await query(qry, { owner: receive.newOwner.getIdentifier(), dataType: receive.dataType });

  if (allAssets.length === 0) {
    // No assets exists, add one
    // use assetRegistry.add()
  } else {
    for (var i = 0; i < allAssets.length; i++) {
      // Iterate over assets belonging to an owner of a product type
      // Do whatever here
      // use assetRegistry.update()
    };
  };

};
...