Hyperledger fabric 两个资产之间的一对多关系hyperledger composer

Hyperledger fabric 两个资产之间的一对多关系hyperledger composer,hyperledger-fabric,hyperledger-composer,Hyperledger Fabric,Hyperledger Composer,我正在尝试一个测试用例,在这个用例中我获得了两项资产:一辆汽车和零件。我想使用事务将汽车与不同的零件实例联系起来。我的模型和js文件如下: namespace org.sample.test asset Part identified by partId { o String partId o String partName o String partManufacturer } asset Car identified by Vin { o String Vin

我正在尝试一个测试用例,在这个用例中我获得了两项资产:一辆汽车和零件。我想使用事务将汽车与不同的零件实例联系起来。我的模型和js文件如下:

namespace org.sample.test

asset Part identified by partId {
   o String partId
   o String partName
   o String partManufacturer
}

asset Car identified by Vin {
   o String Vin
   --> Part part optional
   o String modelNumber
}

transaction MakeCar{
   o String carid 
   o String carmodel 
   o String[] PartId
}


/**
 * Sample transaction processor function.
 * @param {org.sample.test.MakeCar} tx The sample transaction instance.
 * @transaction
 */
async function makecar(tx) {  // eslint-disable-line no-unused-vars

   var factory = getFactory();
   var vehicle = factory.newResource('org.sample.test','Car',tx.carid);
   vehicle.modelNumber = tx.carmodel;

   var part = factory.newRelationship('org.sample.test','Part',tx.PartId);
   vehicle.part = part;
   const assetRegistry = await getAssetRegistry('org.sample.test.Car');
   await assetRegistry.add(vehicle);
  // Update the asset in the asset registry.
   }
我还尝试了先使用getfactory创建资产,然后使用数组逐个遍历PartID来创建关系,但由于我的汽车资产尚未创建,因此抛出错误

我更新了我的交易功能:

async function makecar(tx) {  // eslint-disable-line no-unused-vars

   var factory = getFactory();
   var part;
   var vehicle = factory.newResource('org.sample.test','Car',tx.carid);
   vehicle.modelNumber = tx.carmodel;
   var i=0;
   while (i<tx.PartId.length)
   {
     part = factory.newRelationship('org.sample.test','Part',tx.PartId[i]);
     vehicle.part = part;
     i++;
    }
    assetRegistry = await getAssetRegistry('org.sample.test.Car');
    await assetRegistry.add(vehicle);
  }

现在它的给出错误:t:Instance org.sample.test.carooo具有类型为org.sample.test.part的属性部分,该属性部分不是从org.sample.test.part[]派生的

var part = factory.newRelationship('org.sample.test','Part',tx.PartId);
应该是[类似于]:

 var part = factory.newRelationship('org.example.trading','Part',tx.PartId[0]); // 1st element of an array
这是因为您在事务定义中将tx.PartId定义为关系数组,因此需要访问相关元素


在这一点上,我不确定您希望如何前进,但您的汽车资产与您模型中的可选字段Part Id具有可选的一对一关系。也许它需要一系列的关系?->第[]部分可选,但替换上面的行,至少会使其以当前形式工作。使用关系数组的示例如本SO:->中的答案所示,特别是:模型中的共享数组

是->部分[]部分可选键入。请看一下我更新的事务处理函数。我再次查看了您提到的示例,并将所有关系逐个推送到变量中,然后分配给车辆部件。成功了,谢谢: