JavaScript API examples
We can use JSONStore for MobileFirst hybrid applications.
The following sections contain example implementations for JavaScript with JSONStore APIs. Other helpful topics include:
- JSONStore overview - Learn about key concepts.
- Enable JSONStore - Learn how to enable JSONStore in different environments.
- JSONStore API concepts - Learn about general information about the APIs that apply to all implementations of the JSONStore API.
- JSONStore troubleshooting - Learn how to debug and understand possible errors.
- JSONStore advanced topics - Learn about security, multiple user support, performance, and concurrency.
- Class JSONStoreInstance - Learn about JSONStore APIs for JavaScript.
- Work with external data - Explains how to get data from an external source and send changes back to the external source.
Initialize and open connections, get an Accessor, and add data
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 - locate documents inside the Store
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 - change the documents already stored inside a Collection
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 - delete all documents that match the query
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 - gets the total number of documents that match a query
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 - wipes data for all users, destroys the internal storage, and clears security artifacts
WL.JSONStore.destroy() .then(function () { // Handle success. }) .fail(function (errorObject) { // Handle failure. });
Security - close access to all opened Collections for the current user
WL.JSONStore.closeAll() .then(function () { // Handle success. }) .fail(function (errorObject) { // Handle failure. });
Security - change the password used to access a Store
// 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 - get all documents that are marked as dirty, send them to a MobileFirst adapter, and mark them clean
var collectionName = 'people'; var dirtyDocs; WL.JSONStore.get(collectionName) .getAllDirty() .then(function (arrayOfDirtyDocuments) { // Handle getAllDirty success. dirtyDocs = arrayOfDirtyDocuments; var invocationData = { adapter : 'adapter-name', procedure : 'procedure-name-1', parameters : [dirtyDocs], compressResponse: true return WL.Client.invokeProcedure(invocationData); }) .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 - get new data from a MobileFirst adapter
var collectionName = 'people'; var invocationData = { adapter : 'adapter-name', procedure : 'procedure-name-2', parameters : [], compressResponse: true }; WL.Client.invokeProcedure(invocationData) .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 to add to the collection. var data = responseFromAdapter.invocationResult.arrayOfData; // 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. });
Check whether a document is dirty
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. });
Check the number of dirty documents
var collectionName = 'people'; WL.JSONStore.get(collectionName) .countAllDirty() .then(function (numberOfDirtyDocuments) { // Handle success. }) .fail(function (errorObject) { // Handle failure. });
Remove a Collection
var collectionName = 'people'; WL.JSONStore.get(collectionName) .removeCollection() .then(function () { // Handle success. // Note: We 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. });
Clear all data that is inside a Collection
var collectionName = 'people'; WL.JSONStore.get(collectionName) .clear() .then(function () { // Handle success. // Note: You might want to use the 'removeCollection' API // instead to change the search fields. }) .fail(function (errorObject) { // Handle failure. });
Start a transaction, add some data, remove a document, commit the transaction and roll back the transaction if there is a failure
WL.JSONStore.startTransaction() .then(function () { // Handle startTransaction success. // We 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. });
Get file information
WL.JSONStore.fileInfo() .then(function (res) { //res => [{isEncrypted : true, name : carlos, size : 3072}] }) .fail(function () { // Handle failure. });
Parent topic: JSONStore examples