JavaScript API の例
MobileFirst プラグインを使用する Cordova アプリケーション用に JSONStore を使用できます。
以下のセクションには、JSONStore API を使用する JavaScript の実装例が含まれています。
その他の役立つトピックには以下のものがあります。
- JSONStore の概要 - 鍵の概念について説明します。
- JSONStore の有効化 - さまざまな環境で JSONStore を有効にする方法について説明します。
- JSONStore API の概念 - JSONStore API のすべての実装に適用される API に関する一般情報について説明します。
- JSONStore のトラブルシューティング - 考えられるエラーをデバッグおよび理解する方法について説明します。
- JSONStore の拡張トピック - セキュリティー、複数ユーザー・サポート、パフォーマンス、および並行性について説明します。
- Class JSONStoreInstance - JavaScript 用の JSONStore API について説明します。
- 外部データの処理 - 外部ソースからデータを取得して、変更を外部ソースに送り返す方法について説明します。
接続の初期化とオープン、アクセサーの取得、およびデータの追加
var collectionName = 'people';
// Object that defines all the collections.
var collections = {
// Object that defines the 'people' collection.
people : {
// Object that defines the Search Fields for the 'people' collection.
searchFields : {name: 'string', age: 'integer'}
}
};
// Optional options object.
var options = {
// Optional username, default 'jsonstore'.
username : 'carlos',
// Optional password, default no password.
password : '123',
// Optional local key generation flag, default false.
localKeyGen : false
};
WL.JSONStore.init(collections, options)
.then(function () {
// Data to add, you probably want to get
// this data from a network call (e.g. MobileFirst Adapter).
var data = [{name: 'carlos', age: 10}];
// Optional options for add.
var addOptions = {
// Mark data as dirty (true = yes, false = no), default true.
markDirty: true
};
// Get an accessor to the people collection and add data.
return WL.JSONStore.get(collectionName).add(data, addOptions);
})
.then(function (numberOfDocumentsAdded) {
// Add was successful.
})
.fail(function (errorObject) {
// Handle failure for any of the previous JSONStore operations (init, add).
});
Find - ストア内部でのドキュメントの検出
var collectionName = 'people';
// Find all documents that match the queries.
var queryPart1 = WL.JSONStore.QueryPart()
.equal('name', 'carlos')
.lessOrEqualThan('age', 10)
var options = {
// Returns a maximum of 10 documents, default no limit.
limit: 10,
// Skip 0 documents, default no offset.
offset: 0,
// Search fields to return, default: ['_id', 'json'].
filter: ['_id', 'json'],
// How to sort the returned values, default no sort.
sort: [{name: WL.constant.ASCENDING}, {age: WL.constant.DESCENDING}]
};
WL.JSONStore.get(collectionName)
// Alternatives:
// - findById(1, options) which locates documents by their _id field
// - findAll(options) which returns all documents
// - find({'name': 'carlos', age: 10}, options) which finds all documents
// that match the query.
.advancedFind([queryPart1], options)
.then(function (arrayResults) {
// arrayResults = [{_id: 1, json: {name: 'carlos', age: 99}}]
})
.fail(function (errorObject) {
// Handle failure.
});
Replace - 既にコレクション内に保管されているドキュメントの変更
var collectionName = 'people';
// Documents will be located with their '_id' field
// and replaced with the data in the 'json' field.
var docs = [{_id: 1, json: {name: 'carlitos', age: 99}}];
var options = {
// Mark data as dirty (true = yes, false = no), default true.
markDirty: true
};
WL.JSONStore.get(collectionName)
.replace(docs, options)
.then(function (numberOfDocumentsReplaced) {
// Handle success.
})
.fail(function (errorObject) {
// Handle failure.
});
Remove - 照会と一致するすべてのドキュメントの削除
var collectionName = 'people';
// Remove all documents that match the queries.
var queries = [{_id: 1}];
var options = {
// Exact match (true) or fuzzy search (false), default fuzzy search.
exact: true,
// Mark data as dirty (true = yes, false = no), default true.
markDirty: true
};
WL.JSONStore.get(collectionName)
.remove(queries, options)
.then(function (numberOfDocumentsRemoved) {
// Handle success.
})
.fail(function (errorObject) {
// Handle failure.
});
Count - 照会と一致するドキュメントの合計数の取得
var collectionName = 'people';
// Count all documents that match the query.
// The default query is '{}' which will
// count every document in the collection.
var query = {name: 'carlos'};
var options = {
// Exact match (true) or fuzzy search (false), default fuzzy search.
exact: true
};
WL.JSONStore.get(collectionName)
.count(query, options)
.then(function (numberOfDocumentsThatMatchedTheQuery) {
// Handle success.
})
.fail(function (errorObject) {
// Handle failure.
});
Destroy - すべてのユーザーのデータのワイプ、内部ストレージの廃棄、およびセキュリティー成果物のクリア
WL.JSONStore.destroy()
.then(function () {
// Handle success.
})
.fail(function (errorObject) {
// Handle failure.
});
Security - 現行ユーザーに開かれているすべてのコレクションへのアクセスの終了
WL.JSONStore.closeAll()
.then(function () {
// Handle success.
})
.fail(function (errorObject) {
// Handle failure.
});
Security - ストアへのアクセスに使用されるパスワードの変更
// The password should be user input.
// It is hard-coded in the example for brevity.
var oldPassword = '123';
var newPassword = '456';
var clearPasswords = function () {
oldPassword = null;
newPassword = null;
};
// Default username if none is passed is: 'jsonstore'.
var username = 'carlos';
WL.JSONStore.changePassword(oldPassword, newPassword, username)
.then(function () {
// Make sure you do not leave the password(s) in memory.
clearPasswords();
// Handle success.
})
.fail(function (errorObject) {
// Make sure you do not leave the password(s) in memory.
clearPasswords();
// Handle failure.
});
Push - ダーティーとしてマークされているすべてのドキュメントの取得、MobileFirst アダプターへのその送信、およびその消去
var collectionName = 'people';
var dirtyDocs;
WL.JSONStore.get(collectionName)
.getAllDirty()
.then(function (arrayOfDirtyDocuments) {
// Handle getAllDirty success.
dirtyDocs = arrayOfDirtyDocuments;
var procedure = 'procedure-name-1';
var adapter = 'adapter-name';
var resource = new WLResourceRequest("adapters/" + adapter + "/" + procedure, WLResourceRequest.GET);
resource.setQueryParameter('params', [dirtyDocs]);
return resource.send();
})
.then(function (responseFromAdapter) {
// Handle invokeProcedure success.
// You may want to check the response from the adapter
// and decide whether or not to mark documents as clean.
return WL.JSONStore.get(collectionName).markClean(dirtyDocs);
})
.then(function () {
// Handle markClean success.
})
.fail(function (errorObject) {
// Handle failure.
});
Pull - MobileFirst アダプターからの新しいデータの取得
var collectionName = 'people';
var adapter = 'adapter-name';
var procedure = 'procedure-name-2';
var resource = new WLResourceRequest("adapters/" + adapter + "/" + procedure, WLResourceRequest.GET);
resource.send()
.then(function (responseFromAdapter) {
// Handle invokeProcedure success.
// The following example assumes that the adapter returns an arrayOfData,
// (which is not returned by default),
// as part of the invocationResult object,
// with the data that you want to add to the collection.
var data = responseFromAdapter.responseJSON
// Example:
// data = [{id: 1, ssn: '111-22-3333', name: 'carlos'}];
var changeOptions = {
// The following example assumes that 'id' and 'ssn' are search fields,
// default will use all search fields
// and are part of the data that is received.
replaceCriteria : ['id', 'ssn'],
// Data that does not exist in the Collection will be added, default false.
addNew : true,
// Mark data as dirty (true = yes, false = no), default false.
markDirty : false
};
return WL.JSONStore.get(collectionName).change(data, changeOptions);
})
.then(function () {
// Handle change success.
})
.fail(function (errorObject) {
// Handle failure.
});
ドキュメントがダーティーであるかどうかの確認
var collectionName = 'people';
var doc = {_id: 1, json: {name: 'carlitos', age: 99}};
WL.JSONStore.get(collectionName)
.isDirty(doc)
.then(function (isDocumentDirty) {
// Handle success.
// isDocumentDirty - true if dirty, false otherwise.
})
.fail(function (errorObject) {
// Handle failure.
});
ダーティー・ドキュメントの数の確認
var collectionName = 'people';
WL.JSONStore.get(collectionName)
.countAllDirty()
.then(function (numberOfDirtyDocuments) {
// Handle success.
})
.fail(function (errorObject) {
// Handle failure.
});
コレクションの除去
var collectionName = 'people';
WL.JSONStore.get(collectionName)
.removeCollection()
.then(function () {
// Handle success.
// Note: You must call the 'init' API to re-use the empty collection.
// See the 'clear' API if you just want to remove all data that is inside.
})
.fail(function (errorObject) {
// Handle failure.
});
コレクション内のすべてのデータのクリア
var collectionName = 'people';
WL.JSONStore.get(collectionName)
.clear()
.then(function () {
// Handle success.
// Note: You might want to use the 'removeCollection' API
// instead if you want to change the search fields.
})
.fail(function (errorObject) {
// Handle failure.
});
トランザクションの開始、一部のデータの追加、ドキュメントの除去、障害があった場合のトランザクションのコミットおよびロールバック
WL.JSONStore.startTransaction()
.then(function () {
// Handle startTransaction success.
// You can call every JSONStore API method except:
// init, destroy, removeCollection, and closeAll.
var data = [{name: 'carlos'}];
return WL.JSONStore.get(collectionName).add(data);
})
.then(function () {
var docs = [{_id: 1, json: {name: 'carlos'}}];
return WL.JSONStore.get(collectionName).remove(docs);
})
.then(function () {
return WL.JSONStore.commitTransaction();
})
.fail(function (errorObject) {
// Handle failure for any of the previous JSONStore operation.
//(startTransaction, add, remove).
WL.JSONStore.rollbackTransaction()
.then(function () {
// Handle rollback success.
})
.fail(function () {
// Handle rollback failure.
})
});
ファイル情報の取得
WL.JSONStore.fileInfo()
.then(function (res) {
//res => [{isEncrypted : true, name : carlos, size : 3072}]
})
.fail(function () {
// Handle failure.
});
like、rightLike、および leftLike を使用した検索
// Match all records that contain the search string on both sides.
// %searchString%
var arr1 = WL.JSONStore.QueryPart().like('name', 'ca'); // returns {name: 'carlos', age: 10}
var arr2 = WL.JSONStore.QueryPart().like('name', 'los'); // returns {name: 'carlos', age: 10}
// Match all records that contain the search string on the left side and anything on the right side.
// searchString%
var arr1 = WL.JSONStore.QueryPart().rightLike('name', 'ca'); // returns {name: 'carlos', age: 10}
var arr2 = WL.JSONStore.QueryPart().rightLike('name', 'los'); // returns nothing
// Match all records that contain the search string on the right side and anything on the left side.
// %searchString
var arr = WL.JSONStore.QueryPart().leftLike('name', 'ca'); // returns nothing
var arr2 = WL.JSONStore.QueryPart().leftLike('name', 'los'); // returns {name: 'carlos', age: 10}