2017-10-11 2 views
0

私は、トランザクションのパラメータとして紹介する資産を考慮して、共通のパラメータを持つ別のタイプの資産を検索するComposerトランザクションを作成しようとしています。トランザクション内の特定の資産を検索する

モデル:だから

namespace org.acme.sample 

abstract asset Generic identified by ID { 
o String ID 
--> Owner owner 
} 

asset Asset1 extends Generic{ 
o Boolean done 
} 

asset Asset2 extends Generic{ 
} 

participant Owner identified by ownerID{ 
    o String ownerID 
    o String ownerName 
} 

transaction Transaction { 
    --> Asset2 in 
} 

、私が何をしたいのかのモデルは、(少なくとも、このような何かを)以下であることを与えられた:

function Transaction (tx){ 
    var aux = query('org.acme.sample.Asset1', {owner.ownerID : tx.in.owner.ownerID}) 
    aux.done = true 
    return getAssetRegistry('org.acme.sample.Asset1') 
    .then(function (assetRegistry) { 
     return assetRegistry.update(aux); 
    }) 
} 

これは疑似する方が近いです何か他のものよりもコード(私はそのようなクエリが動作するとは思わないが、私の大きな不確実性を持っています) クエリが1つの有効なアセットを見つけただけの精度を持っているとしましょう。

理論的には、パラメータで指定されたAsset2と同じ所有者IDを持つAsset1をauxに入れ、doneブール値を変更します。問題は、私が働かなくても試してみると、トランザクション内でこのようなクエリを使用する方法がわかりません(別のクエリを実行しようとしましたが、うまく動作しませんでした)。

私は誰かがこれで私を助けることができます願っています:D

+0

query getSpecificAsset1 { description: "Get a specific task with id" statement: SELECT org.acme.sample.Asset1 WHERE (owner == _$ownerID) } 

は、その後、例えば、トランザクション・プロセッサ機能では、このクエリを使用することができます私たちがあなたに手を差し伸べるように、コードにリンクしています。 –

答えて

0

まずクエリを定義する必要があります。これを行うには、Composerプロジェクトのメインディレクトリにqueries.qryファイルを追加します。たとえば、クエリは、このようなようにすることができます:あなたは、クエリのためのマニュアルを読み、何を」記述する必要があり

function updateAsset(tx) { 
// tx.in.owner is the ID from Asset2 
// this query will return a Asset1 with the same ID 
    return query('getSpecificAsset1', { owner: tx.in.owner }) 
    .then(function (asset) {   
    var serializer = getSerializer(); 
    var json = serializer.toJSON(asset); 
    json.done = true 
    return getAssetRegistry("org.acme.sample.Asset1") 
    .then(function(asset1Registry) { 
     return asset1Registry.updateAll([json]); 
    }) 
    }) 
    .catch(function(error) { 
    // Add optional error handling here. 
    throw new Error(error); 
    }); 
} 
関連する問題