Javascript 错误:命名空间中类型的标识符无效或丢失
当我尝试调用从抽象基类资产继承的资产上的事务时,调用失败,出现Javascript 错误:命名空间中类型的标识符无效或丢失,javascript,hyperledger-fabric,hyperledger-composer,Javascript,Hyperledger Fabric,Hyperledger Composer,当我尝试调用从抽象基类资产继承的资产上的事务时,调用失败,出现错误:命名空间中类型的标识符无效或丢失 user.cto namespace com.aczire.alm.base.user import com.aczire.alm.base.* abstract participant User { o String uid o String title optional o String firstName optional o String lastName opt
错误:命名空间中类型的标识符无效或丢失
user.cto
namespace com.aczire.alm.base.user
import com.aczire.alm.base.*
abstract participant User {
o String uid
o String title optional
o String firstName optional
o String lastName optional
o UserTransactionLogEntry[] logEntries
}
concept UserTransactionLogEntry {
//--> User modified_by
o String comment optional
o DateTime timestamp
}
abstract transaction UserTransaction {
o String comment
}
abstract event UserTransactionEvent {
o String comment
}
namespace com.aczire.alm.base.user.admin
import com.aczire.alm.base.*
import com.aczire.alm.base.user.*
participant Admin identified by uname extends User {
o String uname
}
abstract transaction AdminUserTransaction extends UserTransaction {
o Admin user
--> Admin modified_by
}
abstract event AdminUserTransactionEvent extends UserTransactionEvent {
--> Admin user
--> Admin modified_by
}
transaction CreateUser extends AdminUserTransaction {
}
管理cto
namespace com.aczire.alm.base.user
import com.aczire.alm.base.*
abstract participant User {
o String uid
o String title optional
o String firstName optional
o String lastName optional
o UserTransactionLogEntry[] logEntries
}
concept UserTransactionLogEntry {
//--> User modified_by
o String comment optional
o DateTime timestamp
}
abstract transaction UserTransaction {
o String comment
}
abstract event UserTransactionEvent {
o String comment
}
namespace com.aczire.alm.base.user.admin
import com.aczire.alm.base.*
import com.aczire.alm.base.user.*
participant Admin identified by uname extends User {
o String uname
}
abstract transaction AdminUserTransaction extends UserTransaction {
o Admin user
--> Admin modified_by
}
abstract event AdminUserTransactionEvent extends UserTransactionEvent {
--> Admin user
--> Admin modified_by
}
transaction CreateUser extends AdminUserTransaction {
}
admin.js
/**
* Create a User
* @param {com.aczire.alm.base.user.admin.CreateUser} createUser - the CreateUser transaction
* @transaction
*/
function createUser(newuser) {
console.log('createUser');
var factory = getFactory();
var NS_AU = 'com.aczire.alm.base.user.admin';
var user = factory.newResource(NS_AU, 'Admin', newuser.uname);
user.uid = newuser.uid;
// save the order
return getAssetRegistry(NS_AU)
.then(function (registry) {
return registry.add(user);
})
.then(function(){
var userCreatedEvent = factory.newEvent(NS_AU, 'UserCreatedEvent');
userCreatedEvent.user = user;
userCreatedEvent.comment = 'Created new admin user - ' + newuser.uname + '!';
emit(userCreatedEvent);
});
}
我尝试将参数设置为用户Admin;将事务参数作为用户类型移动到基类;将事务移动到基类等。。但似乎什么都不管用
继承在这里的工作方式不同吗
composer游乐场中显示错误。
你的admin.js有一些问题。错误是因为Admin是参与者,所以您必须获取participantergistry()而不是Assetregistry,然后添加用户。在模型文件admin.cto中也没有名为UserCreatedEvent的事件。因此,首先需要将其添加到模型中,然后发出事件。若要添加用户,请尝试更改为此
/**
* Create a User
* @param {com.aczire.alm.base.user.admin.CreateUser} createUser - the CreateUser transaction
* @transaction
*/
function createUser(newuser) {
console.log('createUser');
var NS_AU = 'com.aczire.alm.base.user.admin';
var factory = getFactory();
var testuser = factory.newResource(NS_AU, 'Admin', newuser.user.uname);
testuser.uid=newuser.user.uid
testuser.logEntries=newuser.user.logEntries
// save the order
return getParticipantRegistry('com.aczire.alm.base.user.admin.Admin')
.then(function (registry) {
return registry.add(testuser);
});
}
对于任何一个面临相同问题的人来说,实际问题出现在factory.newResource(NS_AU,'Admin',newuser.uname)中。找不到用户。根据@Sneha的答案进行了更改,一切都很好!