Im using createCompsiteKey
, and getSateByRange
only returns {"done":true}
.
I tried to replace createCompsiteKey
with concat key part to make the key as follows.
getSateByRange
only returns {"done":true}
, I'm using "fabric-shim" v1.4.0 and "fabric-contract-api" v1.4.0. "fabric-peer" image is 1.4.6.
Code for addState
to db is below:
class StateList {
async addState(state){
let keyParts = state.getSplitKey();
let keyPrefix = (String)(keyParts.slice(0,1));
let keyOthers = keyParts.slice(1);
/*. comment createCompositeKey
let key = this.ctx.stub.createCompositeKey(keyPrefix, keyOthers);
*/
let key = keyParts.map(part => part).join('');
let data = State.serialize(state);
await this.ctx.stub.putState(key, data);
}
}
class State {
constructor(stateClass, keyParts) {
this.class = stateClass;
this.key = State.makeKey(keyParts);
}
static makeKey(keyParts) {
return keyParts.map(part => part).join(':');
}
static splitKey(key){
return key.split(':');
}
}
async getDevCollectByRange(ctx, startKey, endKey){
let args = [];
args[0] = startKey;
args[1] = endKey;
let xiotdatadevlist = await ctx.xiotDataDevList.getDevByRange(args);
return Buffer.from(xiotdatadevlist);
}
async getAllResults(iterator){
let allResults = [];
while (true) {
const res = await iterator.next();
if (res.value && res.value.value.toString()) {
console.log(res.value.value.toString('utf8'));
const Key = res.value.key;
let Record;
try {
Record = JSON.parse(res.value.value.toString('utf8'));
} catch (err) {
console.log(err);
Record = res.value.value.toString('utf8');
}
allResults.push({ Key, Record });
}
if (res.done) {
await iterator.close();
return allResults;
}
}
}
async getObjectsByRange(args) {
if (args.length < 2) {
throw new Error('Incorrect number of arguments. Expecting 2');
}
// date
const startKey = args[0];
const endKey = args[1];
const resultsIterator = await this.ctx.stub.getStateByRange(startKey, endKey);
let results = await this.getAllResults(resultsIterator, false);
return Buffer.from(JSON.stringify(results));
}
If I use createCompsiteKey
, how can getSateByRange
find my records?
Or what condition fabric key must meet?
any suggestion, Thank you.