Blockchain 结构编写器测试代码不工作
为了更好地理解,我刚刚用我创建的另一个示例替换了Composer默认示例(“Samplesset”、“sampleTransaction”等)。除了返回错误消息的事务外,所有操作都正常: “**错误:找不到要为事务处理org.acme.sample.compradovino执行的任何函数#**2b2d0624 bc…” 以下是源代码: 大宗报价 模型文件: 名称空间org.acme.sample IDvinho确定的资产Vinho{Blockchain 结构编写器测试代码不工作,blockchain,hyperledger,hyperledger-fabric,hyperledger-composer,Blockchain,Hyperledger,Hyperledger Fabric,Hyperledger Composer,为了更好地理解,我刚刚用我创建的另一个示例替换了Composer默认示例(“Samplesset”、“sampleTransaction”等)。除了返回错误消息的事务外,所有操作都正常: “**错误:找不到要为事务处理org.acme.sample.compradovino执行的任何函数#**2b2d0624 bc…” 以下是源代码: 大宗报价 模型文件: 名称空间org.acme.sample IDvinho确定的资产Vinho{ o String IDvinho --> Partici
o String IDvinho
--> Participante owner
o String uva
o String nomeVinho
o Integer preco
}
由IDP参与者识别的参与者参与者{
o String IDparticipante
o String tipo
o String nomeEmpresa
}
IDcompra识别的交易Compradovino{
o String IDcompra
--> Vinho asset
o Integer precoVenda
}
逻辑:
采样传输功能(Compradovino){
}
权限:
规则默认值{
description: "Allow all participants access to all resources"
participant: "ANY"
operation: ALL
resource: "org.acme.sample"
action: ALLOW
}
大宗报价
有人能帮我找到代码中的错误吗
提前感谢问题几乎可以肯定,因为您已经重命名了事务。Composer有两种机制将事务路由到JS函数:
onMyTransactionType
命名约定。即,当提交MyTransactionType
的实例时,将调用该函数@transaction
和@param
注释。请参见下面的示例。@transaction
注释表示函数希望处理事务,而@param
注释用于指定要处理的事务的类型请用以下代码替换
logic.js
文件中的代码,错误肯定会消失。我的问题也是一样,我只是在函数上方添加了所需的JS文档注释
,同样的问题得到了解决
'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);
});
}
希望这对你有帮助 当然。注释对于函数的工作至关重要! @param必须说明事务的类名和param名称 @下面声明了事务,在下面的块中跟随函数 @param{org.acme.mynetwork.Foo}Foo-要处理的报告
*@transaction很有趣。我不知道这样的惯例规则。我刚刚将“Compradovino”替换为“onSampleTransaction”,但它仍然不起作用。还有别的想法吗?现在谢谢了。我想应该是onCompraDoVinho,不过使用注释方法要好得多。我也有同样的问题。我做了一个名为“卖出”的新交易,我没有将
@param
从交易更改为卖出@param{org.acme.mynetwork.Sell}
在看似注释的内容中包含@param
是非常误导的。@Dan什么是getFactory()方法?getFactory用于创建资产、参与者、事务、事件等的实例。
/**
* 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);
});
}
'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);
});
}