Hyperledger Composer:如何将资产数组推入另一个资产领域?

时间:2017-09-27 09:34:23

标签: javascript hyperledger-composer

我正在尝试重新创建我在Composer中用GoLang编写的一个链代码。 的 Model.cto

asset Carton identified by cartonId {
o String cartonId
o String manufacturerId
o String dateOfDeparture optional
o String recipient optional 
o String currentOwner
o String status
--> Unit[] units optional
o Trackrecord[] trackrecord optional 
}
 transaction MakeCarton {
 --> Unit[] unit
 o String Id
 }
 asset Unit identified by unitId {
 o String unitId
 o String cartonId
 o String manufacturerId
 o String dateOfDeparture
 o String recipient
 o Trackrecord[] trackrecord
 o String currentOwner
 o String status  
  }

所以我需要创建一个创建一个纸箱并接受单位数组和cartonId的交易。

  function makeCarton(make) {
  var carton =  getFactory().newResource('org.acme.mynetwork','Carton',make.Id);
  //carton.cartonId = make.Id ;
  var unitobjs = new Array() ;
  for(var i=0; i < make.unit.length ; i++) {
  var unitobj =  getFactory().newResource('org.acme.mynetwork','Unit',make.unit[i].unitId) ;                                          
  unitobj = getFactory().newRelationship('org.acme.mynetwork','Unit',make.unit[i].unitId) ;
  unitobjs.push(unitobj) ;
   }
  for(var i = 0 ; i< make.unit.length ; i++) {
  carton.units.push(make.unit[i]) ;
  }
  // getFactory().newRelationship('org.acme.mynetwork','Unit',make.unit[i].unitId)
  carton.manufacturerId= make.unit.manufacturerId ;
  carton.currentOwner = make.unit.currentOwner ;
  carton.status = 'At '+ make.unit.currentOwner ;
  return getAssetRegistry('org.acme.mynetwork.Carton').then(function (assetRegistry) {
        return assetRegistry.add(carton);
    });
    }

提交此交易会产生错误:carton.units undefined

2 个答案:

答案 0 :(得分:1)

您没有初始化carton.units。您可以使用以下方法复制数组:

carton.units = make.unit;

那就是说,我真的不了解你的模型 - carton有一系列单位,每个单位都有一个所有者,但纸箱也有一个所有者。

答案 1 :(得分:0)

我有同样的问题。这篇文章帮助我解决了这个问题。但是,对我来说,

 transaction MakeCarton {
   --> Unit[] unit
   o String Id
 }

必须更改为

 transaction MakeCarton {
   o Unit[] unit
   o String Id
 }

否则出现以下错误:

请求POST / api / MakeCarton的未处理错误:错误:无效的JSON数据。找到了一个不是字符串的值:[Object Object],[object Object]用于关系RelationshipDeclaration {name = unit,type = org.acme.mynetwork.Unit,array = true,optional = true}     在JSONPopulator.visitRelationshipDeclaration(/usr/local/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/serializer/jsonpopulator.js:264:31)