2017-10-11 5 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); 
    }) 
} 

이 의사 - 더 가까이 코드가 다른 것보다 (나는 쿼리가 그렇게 작동한다고는 생각하지 않지만 내 큰 불확실성은 그렇습니다) 쿼리가 하나의 유효한 자산을 찾는데 충분히 정확하다고 가정 해 봅시다.

이론적으로 매개 변수에 지정된 Asset2와 동일한 ownerID를 가진 aux1을 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); 
    }); 
}