我刚刚用我创建的另一个替换了Composer默认样本(“sampleAsset”,“sampleTransaction”等),以便我更好地理解。一切都有效,除了交易,它返回错误信息: “**错误:无法找到任何执行交易的函数org.acme.sample.CompraDoVinho#** 2b2d0624-bc ......”
在下面找到源代码:
块引用
命名空间org.acme.sample
资产Vinho由IDvinho {确定o String IDvinho
--> Participante owner
o String uva
o String nomeVinho
o Integer preco
}
参与者参与者由IDparticipante {
确定o String IDparticipante
o String tipo
o String nomeEmpresa
}
由IDcompra {
识别的交易CompraDoVinhoo String IDcompra
--> Vinho asset
o Integer precoVenda
}
function onSampleTransaction(CompraDoVinho){
CompraDoVinho.asset.preco = CompraDoVinho.precoVenda;
return getAssetRegistry('org.acme.sample.Vinho')
.then(function (assetRegistry) {
return assetRegistry.update(CompraDoVinho.asset);
});
}
规则默认{
description: "Allow all participants access to all resources"
participant: "ANY"
operation: ALL
resource: "org.acme.sample"
action: ALLOW
}
块引用
有人可以帮我查一下我的代码中的错误吗?
提前致谢
答案 0 :(得分:2)
问题几乎可以肯定是因为您已重命名该交易。 Composer有两种机制将事务路由到JS函数:
onMyTransactionType
命名约定。即当提交MyTransactionType
的实例时,将调用该函数。@transaction
和@param
注释。请参阅下面的示例。 @transaction
注释表示函数要处理事务,@param
注释用于指定要处理的事务的类型。/** * Place an order for a vehicle * @param {org.acme.vehicle.lifecycle.manufacturer.PlaceOrder} placeOrder - the PlaceOrder transaction * @transaction */ function placeOrder(placeOrder) { console.log('placeOrder'); let factory = getFactory(); let NS = 'org.acme.vehicle.lifecycle.manufacturer'; let order = factory.newResource(NS, 'Order', placeOrder.transactionId); order.vehicleDetails = placeOrder.vehicleDetails; order.orderStatus = 'PLACED'; order.manufacturer = placeOrder.manufacturer; // save the order return getAssetRegistry(order.getFullyQualifiedType()) .then(function (registry) { return registry.add(order); }); }
答案 1 :(得分:1)
绝对。注释对于功能的工作至关重要! @param必须说明事务的类名和param名称 @transaction在下面声明,函数在下面的块中跟随
@param {org.acme.mynetwork.Foo} foo - 要处理的报告 * @transaction
答案 2 :(得分:0)
请使用以下代码替换logic.js
文件中的代码,错误肯定会消失。我是同样的问题,我刚刚在函数上方添加了所需的JS doc annotations
,并解决了同样的问题!
'use strict';
var NS = 'org.acme.sample';
/**
* @param {org.acme.sample} CompraDoVinho
* @transaction
*/
function onSampleTransaction(CompraDoVinho) {
CompraDoVinho.asset.preco = CompraDoVinho.precoVenda;
return getAssetRegistry('org.acme.sample.Vinho')
.then(function (assetRegistry) {
return assetRegistry.update(CompraDoVinho.asset);
});
}
希望这能帮到你!