如何更新现有资产? - 超级账本作曲家

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 示例有一个简单的交易来更新资产,这是一个简单的参考。

Developer Tutorial.

中使用了相同的网络

我遇到了同样的问题。结果你可能无法推送到 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);
    }