我可以更改关系中定义的参数吗
Can i make changes to the parameters defined in relationships
1.i 想知道我是否可以更改关系中定义的参数。
我想做的是创建一个名称为 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 file.to
访问对其进行更改。
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();
});
}
您的问题似乎是:您能否在事务函数(在链代码运行时中运行)中创建从 Flight(资产)到 Aircraft(资产)的关系,以及您能否更新字段相关飞机的(在其单独的注册表中)。答案是 'yes',两者都可以。您没有为 bookflight
函数提供模型,因此只能对其模型定义做出假设。至少(根据您的代码)需要:
transaction bookflight { }
此处显示了您尝试处理关系的代码示例 -> https://github.com/hyperledger/composer-sample-networks/blob/master/packages/perishable-network/lib/logic.js#L130
本节:
const bnDef = bnUtil.connection.getBusinessNetwork();
const factory = bnDef.getFactory();
是 composer-client 代码 - 并且不会在事务函数内部工作(即运行时代码,您需要删除客户端代码 - 下面的示例显示 'how' 来执行此操作。)将第 2 行替换为:
const factory = getFactory();
在 https://hyperledger.github.io/composer/latest/reference/js_scripts
上查看有关交易功能、示例等的更多信息
注意:您可以像这样分配值:
flightResource.route.origin = 'DEL' ; // no need for.setPropertyValue('origin', 'DEL'); etc etc
我没有看到您更新飞机注册表的代码(flightResource.aircraft
仅供参考)- 但您需要它来更新相关资产中的字段(目前,您只更新航班上面的注册表)
new Date()
是非确定性代码 - 如果您希望从多个 peers/orgs 中达成共识。
你会注意到我之前发送的 link,显示了 async/await
的使用,而不是 JS 承诺(.then 等)——更容易编码,更容易读。干杯。
1.i 想知道我是否可以更改关系中定义的参数。
我想做的是创建一个名称为 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 file.to 访问对其进行更改。
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();
});
}
您的问题似乎是:您能否在事务函数(在链代码运行时中运行)中创建从 Flight(资产)到 Aircraft(资产)的关系,以及您能否更新字段相关飞机的(在其单独的注册表中)。答案是 'yes',两者都可以。您没有为
bookflight
函数提供模型,因此只能对其模型定义做出假设。至少(根据您的代码)需要:transaction bookflight { }
此处显示了您尝试处理关系的代码示例 -> https://github.com/hyperledger/composer-sample-networks/blob/master/packages/perishable-network/lib/logic.js#L130
本节:
const bnDef = bnUtil.connection.getBusinessNetwork();
const factory = bnDef.getFactory();
是 composer-client 代码 - 并且不会在事务函数内部工作(即运行时代码,您需要删除客户端代码 - 下面的示例显示 'how' 来执行此操作。)将第 2 行替换为:
const factory = getFactory();
在 https://hyperledger.github.io/composer/latest/reference/js_scripts
上查看有关交易功能、示例等的更多信息注意:您可以像这样分配值:
flightResource.route.origin = 'DEL' ; // no need for.setPropertyValue('origin', 'DEL'); etc etc
我没有看到您更新飞机注册表的代码(flightResource.aircraft
仅供参考)- 但您需要它来更新相关资产中的字段(目前,您只更新航班上面的注册表)
new Date()
是非确定性代码 - 如果您希望从多个 peers/orgs 中达成共识。你会注意到我之前发送的 link,显示了
async/await
的使用,而不是 JS 承诺(.then 等)——更容易编码,更容易读。干杯。