在 hypperledger composer 中创建资产的资产

Creation of asset of assets in hypperledger composer

我想创建一个名为 item 的资产,它由其他项目组成。 这是我的模型文件的片段:

namespace org.dps.track

asset Item identified by itemId{
    o String itemId
    o String name
    o String serialNumber
    o String comment
    o Item [] items optional

abstract participant BU identified by buId{
    o String buId
    o String name
    o String country
    o String city
}


participant Manufacturer extends BU{

}

participant Assembler extends BU{

}

在 rest-server-api 我正在尝试 post 一个由其他项目组成的项目,如下所示:

    {
  "$class": "org.dps.track.Item",
  "itemId": "I5",
  "name": "complex",
  "serialNumber": "222",
  "comment": "complex item - consists of many items",
  "items": [
    "org.dps.track.Item#I2", "org.dps.track.Item#I3"
  ],
  "owner": "org.dps.track.Assembler#BU3"
}

(当然 Item#I2 和 Item#I3 已经 posted 并且属于 BU3),当我尝试 post 这个时,我收到以下错误

    {
  "error": {
    "statusCode": 500,
    "name": "Error",
    "message": "Invalid or missing identifier for Type Item in namespace       org.dps.track",
    "stack": "Error: Invalid or missing identifier for Type Item in namespace org.dps.track\n    at Factory.newResource (/home/composer/.npm-global/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/factory.js:86:19)\n    at JSONPopulator.convertItem (/home/composer/.npm-global/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/serializer/jsonpopulator.js:142:50)\n    at JSONPopulator.visitField (/home/composer/.npm-global/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/serializer/jsonpopulator.js:104:34)\n    at JSONPopulator.visit (/home/composer/.npm-global/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/serializer/jsonpopulator.js:60:25)\n    at Field.accept (/home/composer/.npm-global/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/introspect/decorated.js:54:24)\n    at JSONPopulator.visitClassDeclaration (/home/composer/.npm-global/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/serializer/jsonpopulator.js:83:60)\n    at JSONPopulator.visit (/home/composer/.npm-global/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/serializer/jsonpopulator.js:56:25)\n    at AssetDeclaration.accept (/home/composer/.npm-global/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/introspect/decorated.js:54:24)\n    at Serializer.fromJSON (/home/composer/.npm-global/lib/node_modules/composer-rest-server/node_modules/composer-common/lib/serializer.js:180:26)\n    at ensureConnected.then (/home/composer/.npm-global/lib/node_modules/composer-rest-server/node_modules/loopback-connector-composer/lib/businessnetworkconnector.js:634:43)\n    at <anonymous>\n    at process._tickDomainCallback (internal/process/next_tick.js:228:7)"
  }
}

有没有人设法创建嵌套资产并且对他有用?我将非常感谢任何帮助、建议等。

要在您的模型定义的项目中包含一个项目,您可以使用类似于此的 JSON:

{
 "$class": "org.dps.track.Item",
 "itemId": "2",
 "name": "2",
 "serialNumber": "2",
 "comment": "2",
 "items": [{"$class": "org.dps.track.Item",
 "itemId": "3",
 "name": "3",
 "serialNumber": "3",
 "comment": "3"}]

}

但是,我想知道您真正想要的是否是与其他现有项目的 关系 的数组,在这种情况下您将拥有此模型并且 JSON:

asset Item identified by itemId{
o String itemId
o String name
o String serialNumber
o String comment
--> Item [] items optional
} 

{
 "$class": "org.dps.track.Item",
 "itemId": "A",
 "name": "A",
 "serialNumber": "A",
 "comment": "A",
 "items2": ["org.dps.track.Item#C","org.dps.track.Item#B"]
}