Hyperledger fabric 我可以更改关系中定义的参数吗

Hyperledger fabric 我可以更改关系中定义的参数吗,hyperledger-fabric,hyperledger,hyperledger-composer,hyperledger-explorer,Hyperledger Fabric,Hyperledger,Hyperledger Composer,Hyperledger Explorer,1.我想知道是否可以更改关系中定义的参数 我想做的是创建一个名为bookflight的函数,然后在航班预订后更改座位数。 这些是我的cto文件 namespace org.acme.airline.aircraft /** Aircraft is an ACME Asset*/ asset Aircraft identified by aircraftId { o String aircraftId o Ownership ownershipType default

1.我想知道是否可以更改关系中定义的参数

我想做的是创建一个名为bookflight的函数,然后在航班预订后更改座位数。 这些是我的cto文件

namespace org.acme.airline.aircraft

/** Aircraft is an ACME Asset*/

asset Aircraft identified by aircraftId {
  o String      aircraftId 

  o Ownership   ownershipType default="LEASED"

  // Number of seats per class 
  o Integer     firstClassSeats      range = [4,]
  o Integer     businessClassSeats   range = [6, 20]
  o Integer     economyClassSeats    range = [30, ]

  o String      nickName  optional 
}

enum Ownership {
  o   LEASED
  o   OWNED
}
航班代码是

namespace org.acme.airline.flight

import org.acme.airline.aircraft.Aircraft

asset Flight identified by flightId {
  // Solution to the exercise - try out the Regular expression at http://regex101.com
  // Share your optimized regular expression with others :) 
  o   String            flightId regex=/[A-Z][A-Z][0-9][0-9][0-9]-[0-9][0-9]-[0-3][0-9]-[0-9][0-9]/
  o   String            flightNumber
  o   Route             route
  o   String[]          aliasFlightNumber  optional
  --> Aircraft          aircraft  optional
}

concept Route {
  o   String    origin       regex=/[A-Z][A-Z][A-Z]/
  o   String    destination  regex=/[A-Z][A-Z][A-Z]/
  o   DateTime  schedule  
}

// Logistics department of ACME creates the flights
transaction CreateFlight {
  o   String      flightNumber
  o   String      origin
  o   String      destination
  o   DateTime    schedule
}

event FlightCreated {
  o   String      flightId
}

// Assigns an aircraft to the flight
// The logistics / validation on availability of aircraft
// Kept outside of the Blockchain
transaction AssignAircraft {
  o   String    flightId
  o   String    aircraftId
}

// Event indicating that aircraft was assigned
event AircraftAssigned {
  o   String    flightId
  o   String    aircraftId
}
现在我想对飞行中的关系做些改变 要对其进行更改,我应该做什么。我已经制作了一个javascript文件.to access在其中进行更改

 function booktickets(registry){
     //array to recored the hold the instances of aircraft resourse 
     const  bnDef = bnUtil.connection.getBusinessNetwork();
     const  factory = bnDef.getFactory();
     let    flightResource = factory.newResource(aircraftNamespace,aircraftType,'AE201-05-05-2020');
     flightResource.setPropertyValue('flightNumber','AE101');
     flightResource.route = factory.newConcept(aircraftNamespace,'Route');
     flightResource.route.setPropertyValue('origin', 'DEL');
     flightResource.route.setPropertyValue('destination' , 'APH');
     flightResource.route.setPropertyValue('schedule' , new Date('2018-10-15T21:44Z'));
     flightResource.aircraft = factory.newRelationship('org.acme.airline.aircraft', 'Aircraft', 'CRAFT01');
    //.setPropertyValue()
    flightResource.aircraft.setPropertyValue('ownershipType','LEASED');
    flightResource.aircraft.setPropertyValue('firstClassSeats',10);
    flightResource.aircraft.setPropertyValue('businessClassSeats',10);
    flightResource.aircraft.setPropertyValue('economyClassSeats',100);

     return registry.update(flightResource).then(()=>{
         console.log('Successfully created the flight!!!');
         bnUtil.disconnect();
     }).catch((error)=>{
         console.log(error);
        bnUtil.disconnect();
     });

 }
  • 您的问题似乎是:能否在事务函数(在链码运行时运行)中创建航班(资产)与飞机(资产)之间的关系,以及能否更新相关飞机的字段(在其单独的注册表中)。答案是“是的”,你可以,两者都可以。您没有为
    bookflight
    函数提供模型,因此只能对其模型定义进行假设。至少(根据您的代码)需要:

    transaction bookflight{}

  • 此处显示了您试图处理关系的代码示例->

  • 本节:

    const bnDef=bnUtil.connection.getBusinessNetwork()
    
    const factory=bnDef.getFactory()

  • 是composer客户端代码-并且不会在事务函数内部工作(即运行时代码,您需要删除客户端代码-下面的示例显示了如何执行此操作。)将第2行替换为:

    const factory=getFactory()

    有关事务函数、示例等的更多信息,请参见

  • 注意:您可以指定如下值:

    flightResource.route.origin='DEL';//不需要.setPropertyValue('origin','DEL');etc等

  • 我看不到您更新飞机注册表的代码(使用
    flightResource.Aircraft
    FYI)-但您需要该代码来更新相关资产中的字段(目前,您只更新上面的航班注册表)

  • new Date()
    是非确定性代码-如果您希望从多个同行/组织中达成共识

  • 你会注意到我之前发送的链接,显示了使用
    async/await
    而不是JS承诺(.then etc)-更容易编码,更容易阅读。干杯