当我尝试在资产的基类上的事务内调用getAssetRegistry
时,在从基础继承的资产上,它失败并显示错误Object with ID 'poly1' in collection with ID 'Asset:org.acme.model.PolygonMarble' does not exist
致电changeOwner(org.acme.model.PolygonMarble#poly1, org.acme.model.Collector#owner2)
model.cto:
namespace org.acme.model
asset Marble identified by Id {
o String Id
--> Collector owner
}
asset PolygonMarble extends Marble {
o Integer sides
}
participant Collector identified by email {
o String email
}
transaction ChangeOwner {
--> Marble marble
--> Collector newOwner
}
的script.js:
/*@param {org.acme.model.ChangeOwner} args -
* @transaction */
function changeOwner(args) {
args.marble.owner = args.newOwner;
return getAssetRegistry('org.acme.model.Marble').then(function(marbleRegistry) {
return marbleRegistry.update(args.marble);
});
}
此案例没有明确记录,但是它是预期的行为吗? 它与典型的继承用例的预期有很大不同吗?
答案 0 :(得分:1)
谢谢,所以我认为用getFullyQualifiedType()
替换硬编码的AssetRegistry类对我有用。
继承类的另一个步骤。
/*@param {org.acme.model.ChangeOwner} args -
* @transaction */
function changeOwner(args) {
args.marble.owner = args.newOwner;
return
getAssetRegistry(args.marble.getFullyQualifiedType()).then(function(marbleRegistry) {
return marbleRegistry.update(args.marble);
});
}
答案 1 :(得分:0)
所以给出你当前的TP(你最初发布的)
/*
* @param {org.acme.model.ChangeOwner} args
* @transaction
*/
function changeOwner(args) {
args.marble.owner = args.newOwner;
return getAssetRegistry('org.acme.model.Marble')
.then(function(marbleRegistry) {
return marbleRegistry.update(args.marble);
});
}
你会(必须)传入 org.acme.model.Marble#marble1,org.acme.model.Collector#owner2
这是因为您选择使用' Marble'您的函数中的资产注册表。此外,您的模拟交易期望 - 您已经设置了它(即更新' Marble'资产注册表)。
如果您想更新PolyMarble注册表,那么您应该:
1)更新您的模型
transaction ChangeOwner {
--> PolygonMarble marble
--> Collector newOwner
}
2)将您的代码更新为:
/*@param {org.acme.model.ChangeOwner} args -
* @transaction */
function changeOwner(args) {
args.marble.owner = args.newOwner;
return getAssetRegistry(args.marble.getFullyQualifiedType())).then(function(marbleRegistry) {
return marbleRegistry.update(args.marble);
});
}
3)使用上面的最新模型和交易代码更新您部署的业务网络
最后 - 显然,你会传入(和以前一样): org.acme.model.PolygonMarble#poly1,org.acme.model.Collector#owner2
到你的交易,它应该工作