[英]Adding relationships to an array of relationships in hyperledger-composer
In my hyperledger composer app, I have Clients and Consultants. 在我的hyperledger作曲家应用程序中,我有客户和顾问。 A Client has read access to Consultants that have been added to his/her "readAccessList". 客户对已添加到其“readAccessList”中的顾问具有读取权限。
Here are the models of these two participant types: 以下是这两种参与者类型的模型:
participant Client identified by id {
o String id
o String name
--> Consultant[] readAccessList optional
}
participant Consultant identified by id {
o String id
o String name
o String text
}
The transaction for adding consultants to the readAccessList of clients is defined as follows: 将顾问添加到客户端的readAccessList的事务定义如下:
transaction AddToReadableConsultantsOfClient {
--> Client client
--> Consultant[] newReadableConsultants
}
The transaction processor function for this transaction is the following: 此事务的事务处理器功能如下:
/**
* transaction AddToReadableConsultantsOfClient
* @param {org.comp.myapp.AddToReadableConsultantsOfClient} transaction
* @transaction
*/
async function addToReadableConsultantsOfClient(transaction) {
// Save the old version of the client:
const clientOld = transaction.client;
// Update the client with the new readableConsultants:
transaction.client.readAccessList.concat(transaction.newReadableConsultants);
// Get the participant registry containing the clients:
const participantRegistry = await getParticipantRegistry('org.comp.myapp.Client');
// Update the client in the participant registry:
await participantRegistry.update(transaction.client);
// Emit an event for the modified client:
let event = getFactory().newEvent('org.comp.myapp', 'ClientUpdated');
event.clientOld = clientOld;
event.clientNew = transaction.client;
emit(event);
}
In my angular app, I try to add a couple of consultants to the readAccessList of a Client, using the following code: 在我的角应用程序中,我尝试使用以下代码向客户端的readAccessList添加一些顾问:
//Note that the consultants referred to in the following array do actually exist:
let consultants = ["resource:org.comp.myapp.Consultant#1", "resource:org.comp.myapp.Consultant#2"];
this.transaction = {
$class: "org.comp.myapp.AddToReadableConsultantsOfClient",
"client": "resource:org.comp.myapp.Client#" + this.clientId,
"newReadableConsultants": consultants,
"timestamp": new Date().getTime()
};
return this.addToReadableConsultantsOfClientService.addTransaction(this.transaction)
.toPromise()
.then(() => {
this.errorMessage = null;
})
.catch((error) => {
if(error == 'Server error'){
this.errorMessage = "Could not connect to REST server. Please check your configuration details.";
}
else if(error == '404 - Not Found'){
this.errorMessage = "404 - Could not find API route. Please check your available APIs."
}
else{
this.errorMessage = error;
}
});
For some reason, this doesn't work. 出于某种原因,这不起作用。 The consultants do not get added to the "readAccessList" of the Client (which stays empty). 顾问不会被添加到客户端的“readAccessList”(它保持为空)。
In the console I'm getting a strange error message, saying the following: 在控制台中,我收到一条奇怪的错误消息,说出以下内容:
Error: 2 UNKNOWN: error executing chaincode: transaction returned with failure: ReferenceError: org is not defined
What is wrong with my approach to adding relationships to an array of relationships? 我将关系添加到一系列关系的方法有什么问题?
I changed 1 line of your transaction script: 我更改了1行的事务脚本:
transaction.client.readAccessList.concat(transaction.newReadableConsultants);
to 至
transaction.client.readAccessList=transaction.client.readAccessList.concat(transaction.newReadableConsultants);
I tested in the Composer Playground and the JSON data I used was: 我在Composer Playground中测试过,我使用的JSON数据是:
{
"$class": "org.comp.myapp.AddToReadableConsultantsOfClient",
"client": "resource:org.comp.myapp.Client#MBC01",
"newReadableConsultants": [
"resource:org.comp.myapp.Consultant#C02"
]
}
The transaction now works in Playground - but I haven't tested through the Angular App. 该交易现在可以在Playground中使用 - 但我还没有通过Angular App进行测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.