Я думаю, что в вашем коде есть проблема, и RESOURCE_EXHAUSTED (который, вероятно, исходит из ограничений размера сообщения grpc) - возможно, это первая строка, в которой вы назначаете объект для String.
В настоящее время (хотя вы не опубликовали модель транзакции) вы пытаетесь связать Заказ (или коллекцию) с PackCase - ваш код показывает одну транзакцию за раз (вы обновляете реестр для каждого ресурса).Код, показанный ниже, добавляет ссылку на номер регистра в Order и помещает идентификатор заказа (идентификатор FQ) в массив PackCase.
То есть с такой моделью:
asset Order identified by pullID {
o String pullID
o String caseNumber optional
--> PackCase packcase optional // this would make more sense naming-wise
}
asset PackCase identified by caseNumber {
o String caseNumber
--> Order[] orders optional
// o Order[] orders optional // alternative, see below.
}
transaction acpto {
--> Order order
--> PackCase packCase
}
yourкод транзакции выглядит следующим образом:
/**
* Associate the Packcase to order
* @param {org.acme.mynetwork.acpto} tx - the tx to be processed
* @transaction
**/
function AssociatePackCaseToOrder(tx){
var namespaceAsset = 'org.acme.mynetwork';
tx.order.caseNumber = tx.packCase.getIdentifier(); // eg. '1'
console.log(" case ref is " + tx.packCase.getIdentifier() );
console.log(" order ref is " + tx.order.getIdentifier() );
// tx.order.pullID = tx.order.getIdentifier(); // because its a relationship, will still have the FQ identifer hence commented out FYI
if(tx.packCase.orders == null) {
tx.packCase.orders = []; // initialise
}
tx.packCase.orders.push(tx.order);
return getAssetRegistry(namespaceAsset+'.Order')
.then(function(ordersRegistry){
return ordersRegistry.update(tx.order)
.then(function(){
console.info("Order Updated");
return getAssetRegistry(namespaceAsset+'.PackCase')
.then(function(packCaseRegistry){
return packCaseRegistry.update(tx.packCase)
.then(function(){
console.info("PackCase Updated");
})
})
})
})
}
Ваш метод: --> Order[] orders optional
{
"$class": "org.acme.mynetwork.PackCase",
"caseNumber": "5",
"orders": [
"resource:org.acme.mynetwork.Order#1",
"resource:org.acme.mynetwork.Order#2",
"resource:org.acme.mynetwork.Order#3"
]
}
альтернатива Order[] orders optional
:
после отправки 3 транзакций для Заказа 1, Заказа2 и Заказ 3, вы получаете это в активе PackCase:
{
"$class": "org.acme.mynetwork.PackCase",
"caseNumber": "3",
"orders": [
{
"$class": "org.acme.mynetwork.Order",
"pullID": "1",
"caseNumber": "3"
},
{
"$class": "org.acme.mynetwork.Order",
"pullID": "2",
"caseNumber": "3"
}
{
"$class": "org.acme.mynetwork.Order",
"pullID": "3",
"caseNumber": "3"
}
]
}
Достаточно сказать, что номер заказа Заказа обновляется со ссылочным номером дела от PackCase
.