我正在尝试恢复单个资产的历史记录。该模型的定义如下所示
namespace org.example.basic
asset SampleAsset identified by assetId {
o String assetId
--> SampleParticipant owner
o String value
}
participant SampleParticipant identified by participantId {
o String participantId
o String firstName
o String lastName
}
transaction GetAssetHistory {
o String assetId
}
event SampleEvent {
--> SampleAsset asset
o String oldValue
o String newValue
}
我生成一个参与者,并引用前一个参与者的新资产。然后,我继续更新资产价值变量值。但是阅读有关资产更新的内容后,我发现了以下内容:
async function getAssetHistory(tx) {
//How can I get a single asset history using the tx.assetId value??
let historian = await businessNetworkConnection.getHistorian();
let historianRecords = historian.getAll();
console.log(prettyoutput(historianRecords));
}
当我部署bna并调用该函数时,我得到以下信息:
img在其他函数中,我使用RuntimeApi,但我不知道businessNetworkConnection是否是Runtime API调用。
关于如何获取单个资产历史记录的任何想法?互联网上有什么例子吗?
*****************更新
我更改了恢复特定资产历史记录的方式。执行以下操作:在js文件中
/**
* Sample read-only transaction
* @param {org.example.trading.MyPartHistory} tx
* @returns {org.example.trading.Trader[]} All trxns
* @transaction
*/
async function participantHistory(tx) {
console.log('1');
const partId = tx.tradeid;
console.log('2');
const nativeSupport = tx.nativeSupport;
// const partRegistry = await getParticipantRegistry('org.example.trading.Trader')
console.log('3');
const nativeKey = getNativeAPI().createCompositeKey('Asset:org.example.trading.Trader', [partId]);
console.log('4');
const iterator = await getNativeAPI().getHistoryForKey(nativeKey);
let results = [];
let res = {done : false};
while (!res.done) {
res = await iterator.next();
if (res && res.value && res.value.value) {
let val = res.value.value.toString('utf8');
if (val.length > 0) {
console.log("@debug val is " + val );
results.push(JSON.parse(val));
}
}
if (res && res.done) {
try {
iterator.close();
}
catch (err) {
}
}
}
var newArray = [];
for (const item of results) {
newArray.push(getSerializer().fromJSON(item));
}
console.log("@debug the results to be returned are as follows: ");
return newArray; // returns something to my NodeJS client (called via REST API)
}
在模型文件中
@commit(false)
@returns(Trader[])
transaction MyPartHistory {
o String tradeId
}
我创建了一个资产,然后使用其他值进行了更新。但是当我调用MyPartHistory时,我收到以下消息:
错误:本机API在Web运行时中不可用
仅当您在真实结构环境中运行业务网络时,才可以使用本机api。您不能在在线游乐场环境中使用它。您将必须设置一个真实的架构环境,然后在本地运行连接到该架构的游乐场以测试您的业务网络。