3

为了更好地理解,我刚刚将 Composer 默认示例(“sampleAsset”、“sampleTransaction”等)替换为我创建的另一个示例。一切正常,除了事务,它返回错误消息:“**错误:找不到任何函数来执行事务 org.acme.sample.CompraDoVinho#**2b2d0624-bc...”

在下面找到源代码:

块引用

模型文件:

命名空间 org.acme.sample

IDvinho 识别的资产 Vinho {

o String IDvinho
--> Participante owner
o String uva
o String nomeVinho 
o Integer preco 

}

参与者 IDparticipant 确定的参与者 {

o String IDparticipante
o String tipo
o String nomeEmpresa

}

IDcompra 识别的交易 CompraDoVinho {

o String IDcompra
--> Vinho asset
o Integer precoVenda

}

逻辑:

函数 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

}

块引用

有人可以帮我找出代码中的错误在哪里吗?

提前致谢

4

3 回答 3

2

这个问题几乎可以肯定是因为您重命名了事务。Composer 有 2 种机制将事务路由到 JS 函数:

  1. (旧版)使用onMyTransactionType命名约定。即当一个实例MyTransactionType被提交时,该函数将被调用。
  2. (首选)使用@transaction@param注释。请参阅下面的示例。@transaction注解表示函数要处理事务,注解@param用于指定要处理的事务的类型。
    /**
     *下订单购买车辆
     * @param {org.acme.vehicle.lifecycle.manufacturer.PlaceOrder} placeOrder - PlaceOrder 交易
     * @交易
     */
    功能地点订单(地点订单){
        console.log('placeOrder');

        让工厂 = getFactory();
        让 NS = 'org.acme.vehicle.lifecycle.manufacturer';

        let order = factory.newResource(NS, 'Order', placeOrder.transactionId);
        order.vehicleDetails = placeOrder.vehicleDetails;
        order.orderStatus = '已放置';
        order.manufacturer = placeOrder.manufacturer;

        // 保存订单
        返回 getAssetRegistry(order.getFullyQualifiedType())
            .then(函数(注册表){
                返回 registry.add(order);
            });
    }
于 2017-04-27T20:49:53.113 回答
1

绝对地。注释对于功能正常工作至关重要!@param 必须声明事务的类名和在下面声明的参数名称@transaction,函数在下面的块中跟随

@param {org.acme.mynetwork.Foo} foo - 要处理的报告 * @transaction

于 2018-02-17T17:59:21.950 回答
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);

  });
}

希望这对你有帮助!

于 2018-01-18T08:33:24.273 回答