两个资产 hyperledger composer 之间的一对多关系
One to many relationship between two assets hyperledger composer
我正在尝试测试一个用例,其中我使用了两项资产:汽车和零件。我想 link 汽车与零件的不同实例使用交易。我的模型和 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 创建资产,然后通过使用数组一个一个地遍历 partIds 创建关系,但由于我的汽车资产尚未创建,因此出现抛出错误。
我更新了我的交易功能:
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.Car#OOOO has 属性 part with type org.sample.test.Part that is not derived from 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
定义为关系数组,因此您需要访问相关元素。
在这一点上,我不确定你想如何前进,但你的 Car(车辆)资产与 Part(零件 ID)有一个可选的一对一关系,这是你模型中的可选字段。也许它需要一系列的关系? -> Part[] part optional
但是替换上面的行,至少可以让它以现在的形式工作。此 SO 的答案中显示了使用关系数组的示例:-> (特别是模型中的 :shares
数组)
我正在尝试测试一个用例,其中我使用了两项资产:汽车和零件。我想 link 汽车与零件的不同实例使用交易。我的模型和 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 创建资产,然后通过使用数组一个一个地遍历 partIds 创建关系,但由于我的汽车资产尚未创建,因此出现抛出错误。
我更新了我的交易功能:
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.Car#OOOO has 属性 part with type org.sample.test.Part that is not derived from 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
定义为关系数组,因此您需要访问相关元素。
在这一点上,我不确定你想如何前进,但你的 Car(车辆)资产与 Part(零件 ID)有一个可选的一对一关系,这是你模型中的可选字段。也许它需要一系列的关系? -> Part[] part optional
但是替换上面的行,至少可以让它以现在的形式工作。此 SO 的答案中显示了使用关系数组的示例:-> shares
数组)