我有一个运行有简单BNA的结构网络。该BNA定义了两种类型的参与者。公司和个人。在这里,每个人与公司都有关系,如下所示(cto文件):
participant Corporate identified by corporateId {
o String corporateId
o String corporateName
}
participant Person identified by personId {
o String personId
--> Corporate corporate
}
我要做什么:
以下是#2的交易处理器功能片段:
let corporateIdExpected = personDetails.corporate;
if(corporateIdExpected && corporateIdExpected != '') {
let corporateRetrieved = await query("GetCorporateByCorporateId", {corporateId: corporateIdExpected});
if(!corporateRetrieved || corporateRetrieved == '') {
throw new Error("Corporate details not valid. Please check if your corporate is present on the network.");
}
}
我的querys.qry中的摘录:
query GetCorporateByCorporateId {
description: "Returns all corporates in the registry"
statement:
SELECT org.samplenetwork.participants.Corporate
WHERE (corporateId == _$corporateId)
}
因此,尝试#2时出现以下错误:
错误:2 UNKNOWN:执行链代码时出错:事务返回失败:错误:错误:http:在关闭的响应正文上读取
但是,当我尝试直接从招摇中执行查询时,它成功运行。
我正在使用:
超级账本面料:1.1 Hyperledger Composer:0.19.8
我为此错过任何检查或步骤吗?
答案 0 :(得分:1)
对于项目2-您确实不需要每次都执行命名查询。
您可以按以下方式进行等效检查(“他已经存在吗?”)(其中trxn
是您的事务定义中定义的事务对象,等等)
const personRegistry = await getParticipantRegistry('org.acme.example.Person');
console.log("The person identifier to check is " + trxn.corporate.getIdentifier() )
const exists = await personRegistry.exists(trxn.corporate.getIdentifier() ) ;
console.log("exists is set to " + exists); // boolean
if (exists)
console.log("he exists")
else
console.log("he doesn't exist");