如何更新现有资产? - 超级账本作曲家
How to Updating Existing Assets? - Hyperledger Composer
我正在尝试更新 hyperledger 中的资产,在这种情况下,我正在尝试将新的提供者添加到资产中的提供者数组列表中,但作曲家不让我这么做。
我不知道怎么了。 Belor 是模型、javascript 和错误。
型号:
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
namespace org.acme.Bicycle
asset Bicycle identified by serial {
o String serial
--> Rider owner optional
--> Rider [] ownerold optional
--> Provider [] distribuold optional
--> Store [] Storeold optional
--> Manufacturing manufacturing
}
abstract participant User identified by email {
o String email
o String firstName
o String lastName
}
participant Rider extends User {
}
participant Manufacturing extends User {
}
participant Provider extends User {
}
participant Store extends User {
}
participant Police extends User {
}
transaction check {
o String date
o String Description
--> Rider owner
--> Police police
--> Bicycle bike
}
transaction fabrictodistri {
o String Description
--> Manufacturing manufacturing
--> Bicycle bike
--> Provider providerstore
}
transaction providertostore {
o String Description
--> Bicycle bike
--> Provider providerstore
--> Store Storeold
}
transaction storetobiker {
o String Description
--> Bicycle bike
--> Store Storeold
--> Rider owner
}
脚本文件:这是我所有的功能
/**
* @param {org.acme.Bicycle.check} check
* @transaction
*/
async function check(check) {
let owner = check.bike.owner.email;
let ciclista = check.owner.email;
if(owner != ciclista){
check.description= "This is not the owner";
throw new Error('This is not the owner');
}else{
check.description= "This is the owner";
throw new Error('This is not the owner');
}
}
/**
* @param {org.acme.Bicycle.fabrictodistri} ftod
* @transaction
*/
async function fabrictodistri(ftod) {
let bike = ftod.bike;
bike.distribuold.push(ftod.providerstore);
}
/**
* @param {org.acme.Bicycle.providertostore} ptosto
* @transaction
*/
async function providertostore(ptosto) {
let bike = ptosto.bike;
bike.distribuold.push(ptosto.providerstore);
bike.Storeold.push(ptosto.Storeold);
}
/**
* @param {org.acme.Bicycle.storetobiker} stostobik
* @transaction
*/
async function storetobiker(stostobik) {
let bike = stostobik.bike;
bike.ownerold.push(stostobik.owner);
bike.owner = stostobik.owner;
}
错误:"TypeError: Cannot read property 'push' of undefined"
Image
为了修改现有资产,您需要使用 getAssetRegistry
等函数,然后使用 update
方法。
Composer Playground 中的 Trade-Network 示例有一个简单的交易来更新资产,这是一个简单的参考。
中使用了相同的网络
我遇到了同样的问题。结果你可能无法推送到 empty/undefined.
的数组
我为此使用了以下修复程序(根据您的程序进行修改):
if (typeof roj.contributors == 'undefined') { // Check if the array is empty
roj.contributors = new Array();
roj.contributors[0] = createROData.creator;
}
else {
roj.contributors.push(createROData.creator);
}
我正在尝试更新 hyperledger 中的资产,在这种情况下,我正在尝试将新的提供者添加到资产中的提供者数组列表中,但作曲家不让我这么做。
我不知道怎么了。 Belor 是模型、javascript 和错误。
型号:
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
namespace org.acme.Bicycle
asset Bicycle identified by serial {
o String serial
--> Rider owner optional
--> Rider [] ownerold optional
--> Provider [] distribuold optional
--> Store [] Storeold optional
--> Manufacturing manufacturing
}
abstract participant User identified by email {
o String email
o String firstName
o String lastName
}
participant Rider extends User {
}
participant Manufacturing extends User {
}
participant Provider extends User {
}
participant Store extends User {
}
participant Police extends User {
}
transaction check {
o String date
o String Description
--> Rider owner
--> Police police
--> Bicycle bike
}
transaction fabrictodistri {
o String Description
--> Manufacturing manufacturing
--> Bicycle bike
--> Provider providerstore
}
transaction providertostore {
o String Description
--> Bicycle bike
--> Provider providerstore
--> Store Storeold
}
transaction storetobiker {
o String Description
--> Bicycle bike
--> Store Storeold
--> Rider owner
}
脚本文件:这是我所有的功能
/**
* @param {org.acme.Bicycle.check} check
* @transaction
*/
async function check(check) {
let owner = check.bike.owner.email;
let ciclista = check.owner.email;
if(owner != ciclista){
check.description= "This is not the owner";
throw new Error('This is not the owner');
}else{
check.description= "This is the owner";
throw new Error('This is not the owner');
}
}
/**
* @param {org.acme.Bicycle.fabrictodistri} ftod
* @transaction
*/
async function fabrictodistri(ftod) {
let bike = ftod.bike;
bike.distribuold.push(ftod.providerstore);
}
/**
* @param {org.acme.Bicycle.providertostore} ptosto
* @transaction
*/
async function providertostore(ptosto) {
let bike = ptosto.bike;
bike.distribuold.push(ptosto.providerstore);
bike.Storeold.push(ptosto.Storeold);
}
/**
* @param {org.acme.Bicycle.storetobiker} stostobik
* @transaction
*/
async function storetobiker(stostobik) {
let bike = stostobik.bike;
bike.ownerold.push(stostobik.owner);
bike.owner = stostobik.owner;
}
错误:"TypeError: Cannot read property 'push' of undefined"
Image
为了修改现有资产,您需要使用 getAssetRegistry
等函数,然后使用 update
方法。
Composer Playground 中的 Trade-Network 示例有一个简单的交易来更新资产,这是一个简单的参考。
中使用了相同的网络我遇到了同样的问题。结果你可能无法推送到 empty/undefined.
的数组我为此使用了以下修复程序(根据您的程序进行修改):
if (typeof roj.contributors == 'undefined') { // Check if the array is empty
roj.contributors = new Array();
roj.contributors[0] = createROData.creator;
}
else {
roj.contributors.push(createROData.creator);
}