Mobile Users
Offline first
Robust
Efficient
Shared / Seperated
JavaScript Ionic SPA
Accounts & Contacts
MobileCaddy
Define our app on Salesforce
Create our JS project
List our Accounts
Account Detail Page
List our Contacts
Deploy
Run on a device
Define our Application
Mobilise our Tables
mobilecaddy new ionic-shell myApp
mobilecaddy serve
Encrypted SmartStore
HTML/CSS
JavaScript
MVC
{{::account.Name}}
MVC
Template
MVC
Template
Tab
// app.js
.state('tab.accounts', {
url: '/accounts',
views: {
'accounts-tab': {
templateUrl: RESOURCE_ROOT + 'templates/accounts.html',
controller: 'AccountsCtrl',
controllerAs: 'vm'
}
}
})
MVC
Template
Tab
Routing
// account.controller.js
$ionicLoading.show(...);
AccountService.all().then(function(accounts) {
vm.accounts = accounts;
if (accounts.length > 0) $ionicLoading.hide();
}).catch(function(e) {
$ionicLoading.hide();
logger.error('error', e);
});
MVC
Template
Tab
Routing
Controller
// accounts.service.js
/**
* @return {promise} Resolves to an array of accounts
*/
function all() {
return new Promise(function(resolve, reject) {
devUtils.readRecords('Account__ap', []).then(function(resObject) {
resolve(resObject.records);
}).catch(function(resObject){
reject(resObject);
});
});
}
MVC
Template
Tab
Routing
Controller
Service
// app.js
SyncService.initialSync();
// sync.service.js
var appTables = [ 'Account__ap', 'Contact__ap' ];
function initialSync() {
devUtils.initialSync(appTables).then(function(res){
$rootScope.$emit('syncTables', {result : "InitialLoadComplete"});
resolve(res);
});
}
{{::vm.account.Name}} Contacts
// account.controller.js
AccountService.get(id).then(function(account) {
vm.account = account;
}, function(e) {
console.error('error', e);
});
// accounts.service.js
function get(id){
return new Promise(function(resolve, reject) {
var smartSql = "SELECT * from {Account__ap}
WHERE {Account__ap:Id} = '" + id + "'";
devUtils.smartSql(smartSql).then(function(resObject) {
resolve(resObject.records[0]);
});
});
}
Account Details
{{::contact.Name}}
{{::contact.Title}}
Edit
Plus add our controller and our service
Account Details
Contact List
// account.controller.js
var updatedContact = {
'Id': contact.Id};
'Email': contact.Email
};
ContactsService.update(updatedContact).then(function(res) {
$ionicListDelegate.closeOptionButtons();
SyncService.syncTables(['Contact__ap']);
})
Up-version
... and create a mobile advantage
MobileCaddy Developer's Site - developer.mobilecaddy.net
Project's sister GIT repository - bit.ly/1WS054h
http://mobilecaddy.net
http://developer.mobilecaddy.net
@mobile_caddy