SlideShare a Scribd company logo
http://beyondtheeveryday.com
Everyone pull it up on their phone
BTE 102: The Future of Web
Development Write Once, Run
Everywhere with AngularJS and
Domino
Marky Roden Mark Leusink
Senior Solutions Architect LinQed
PSC Group LLC
About Mark
 Freelance consultant/ developer
– XPages, web, mobile, Unplugged
 15 years experience (that makes me younger than Marky)
 Fan of everything web dev (Angular, Bootstrap, web components)
 Open source (OpenNTF, GitHub)
– XPages Debug Toolbar, Bootstrap4XPages, Bootcards
 Blog: http://linqed.eu
 Twitter: @markleusink
 Email: m.leusink@linqed.eu
About Marky
 Over 17 years IBM Notes Domino® work
 Senior Solutions Architect at PSC Group
• XPages Developer
• Project Leader
• AngularJS Protagonist
 Contact Information
• Blog: http://www.xomino.com
• Twitter: @markyroden
• Skype: marky.roden
www.psclistens.com @pscgroup
© 2013 IBM Corporation
F O U N D E D I N 1 9 9 0
The Largest, Most Experienced
XPages
Service Firm in North America
PSC Group, LLC
Congratulates our
5 IBM Champions!
Brad Balassaitis Andrew Barickman Kathy Brown John Head Mark Roden
Agenda
• Introduction to MVC/ REST architectures
– True Separation of UI and Business Logic
• Introduction to AngularJS
– Why Angular?
– Components and capabilities
– Examples of capabilities
• Domino as a REST Service
• Demo app
– Application Architecture
– How to run the same app “everywhere”
http://beyondtheeveryday.com
Everyone pull it up on their phone
About the demo app
The Demo app is built with
– AngularJS
– Bootstrap
– IBM Domino data
– Zero XPages
And to make it better
– A Bootstrap theme from Bootswatch.com (‘United’)
– Font Awesome for icons
– Animate.css for animations
– FastClick.js for a snappier UI
– angular-local-storage for local storage
Sessions data from the Totally Unofficial Totally Unsupported session database
INTRODUCTION TO MVC / REST
ARCHITECTURE
Introduction to MVC / REST Architecture
• MVC (Model-View-Controller) is an architectural design pattern that encourages
improved application organization through a separation of concerns.
– The Model manages the data
– The View is the HTML representation of the data through the use of Templates
• What your users see
– The Controller is the application code which is used to determine the way the Model is
populated and displayed.
• Glues the Model and View together
• Angular provides the framework to do client-side MVC
Introduction to MVC / REST Architecture
• Representational state transfer (REST) is an architecture style for designing
networked applications
– Uses simple HTTP calls
– JSON
• Performant
• Scalable
• Simple interface
• Portable
ServerClient
Introduction to MVC / REST Architecture
• We’ve been building web apps like this
Request page
- process request
- get data
- create HTML
Response
• HTML
• CSS
• JavaScript
(display)
Client
Introduction to MVC / REST Architecture
• But this is getting popular
Webserver
Request page/ app
Response
(static HTML, JS,
CSS)
(process)
REST
API
Data (JSON)
Request data
Client
Introduction to MVC / REST Architecture
• Or this variation
Webserver
Response
(static HTML, JS,
CSS)
(process)
REST
API
Data (JSON)
Request data
Request page/ app
INTRODUCTION TO ANGULAR.JS
 AngularJS is a structural framework for dynamic web apps. It lets you use HTML as your
template language and lets you extend HTML's syntax to express your application's
components clearly and succinctly. Angular's data binding and dependency injection
eliminate much of the code you currently have to write.
“Angular is what HTML would have been had it been designed for applications”
The AngularJS team
What is AngularJS
• Web application framework
– Designed as a boilerplate model for an application
– Out of the box capabilities and best practices
– Built with test driven development (TDD) in mind
• Runs in the browser, all client side JavaScript
– Unlike e.g. XPages or C# (SharePoint) where most processing is done server side.
• Helps to create dynamic sites / Single Page Applications
– Partials? Dynamic? Been there, done that!
Why AngularJS ?
• Large developer community
– ~75,000 questions tagged on Stackoverflow.com
• Backed by
– Developed by Google and the community
– Open source (MIT license)
• Stable, mature and performant
– Initial release 2009
– Version 1 released Jun 2012
– Current version 1.3.5 (Dec 2014)
– Version 2 scheduled for end of 2015
Why AngularJS?
• Ready for the web of tomorrow
• Many Concepts adopted by Web Components standard
• Data driven
• Custom elements (functional custom attributes)
• HTML Imports
• DOM Templating
AngularJS: Modules
• Ties the code to the HTML DOM model
Angular Route Control
• UI-Router, state based management
• Configures the app
• When a route is encountered
– Use this template
– Use this Page Title
– Use this controller
• http://beyondtheeveryday.com/#/sessionsAll
• http://beyondtheeveryday.com/#/favorites
AngularJS: Controllers
• Contains the application logic.
app.controller("MainCtrl", function($rootScope, $scope, utils,
localStorageService, SessionsFactory) {
$scope.menuDays = [
{id: '0', label:'Sunday'},
{id: '1', label:'Monday'},
{id: '2', label:'Tuesday'},
{id: '3', label:'Wednesday'}
];
//set default active menu option
$scope.pageTitle = "Connect 2015 Sessions";
$scope.activeMenu = "about";
• Lazily instantiated, only when they are needed
– “Angular services are substitutable objects that are wired together using dependency injection (DI). You
can use services to organize and share code across your app”
var app = angular.module("sessionsApp.services", []);
app.factory('SessionsFactory', function($http) {
return {
all : function() {
return $http.get(‘db.nsf/collections/name/sessions')
.then(
function(res) {
return res.data;
});
},
...
AngularJS: Factories and Services
AngularJS: Directives
• Tells Angular that it needs to ‘do’ something
• Interact with the browser based on the controller’s instructions
• Re-usable components
• Much of Angular’s core functionality Directive based
<div class="row" ng-repeat="speaker in session.speakers">
<div class="col-xs-12 col-sm-12">
{{speaker}}
</div>
</div>
AngularJS in depth
• Dependency injections
A software design pattern that deals with how components get hold of their dependencies.
The Angular injector subsystem is in charge of creating components, resolving their dependencies,
and providing them to other components as requested.
AngularJS in depth
• How does it all hang together?
AngularJS in depth
• AngularJS core examples
– ‘$scope’
sessionsAppCtrl.controller('FeedbackCtrl', function($scope, SessionsFactory) {
$scope.submitted = false;
$scope.submit = function() {
SessionsFactory.saveFeedback( {feedback : $scope.feedback, name: $scope.name} );
$scope.submitted = true;
};
});
AngularJS in depth
• AngularJS core services example
– '$http'
app.factory('SessionsFactory', function($http, $q, dasBaseUrl, utils) {
return {
all : function() {
return $http.get('collections/name/sessionsAll?count=1000', {cache: true})
.then( function(res) {
return res.data;
});
},
...
AngularJS in depth
• AngularJS core directives examples
– ng-show / ng-hide
– ng-click
– ng-list, ng-class, ng-repeat, ng-keydown etc
};
<div class="col-sm-8">
<button class="btn btn-default" ng-click="home()">Back</button>
<button class="btn" ng-click="savePerson($event)" ng-hide="create">Save</button>
<button class="btn" ng-click="createPerson($event)" ng-show="create">Create</button>
</div>
AngularJS in depth
• AngularJS template example
AngularJS in depth
• How does AngularJS integrate with XPages ?
• An application written using AngularJS uses 4 main things
– HTML Pages
– JavaScript files
– CSS
– A Data Service
• One or many of those can be “XPages”
DOMINO AS A REST SERVICE
Domino as REST service
• Three options to use Domino as a data store for an Angular application:
– Domino Access Services
• Built-in, easiest to enable
– REST service component from the Extension Library
• More customization options
– Do-it-yourself REST service
• Fully customizable, requires more work
Domino as REST service - Domino Access Services (DAS)
• Consists of 3 services: core, data and
calendar
– For the demo app we’ve only used the
data service
• Must be enabled on server level, app
level and form/ view level
• Gives you the data from all fields
(documents) or columns (views)
Domino as REST service - Domino Access Services (DAS)
http://beyondtheeveryday.com/beyond/connect2015.nsf/api/data/collections/name/sessionsAll
Server Database path DAS View name
Domino as REST service - ExtLib REST
• Drag on an XPage
• Link to data source (view, bean, …)
• Set path
• Done
<xe:restService pathInfo="contactjson">
<xe:this.service>
<xe:viewJsonService viewName="AllContacts" var="entry"
contentType="text/plain" count="10" defaultColumns="true">
</xe:viewJsonService>
</xe:this.service>
</xe:restService>
Domino as REST service - custom REST service
public class MyRESTService {
public static String doGet(HttpServletRequest request, HttpServletResponse response)
{
JsonJavaObject json = new JsonJavaObject();
json.put("userName", ExtLibUtil.getCurrentSession().getEffectiveUserName() );
return JsonGenerator.toJson(JsonJavaFactory.instanceEx, json);
}
}
<!--?xml version="1.0" encoding="UTF-8"?-->
<![CDATA[#{javascript:
var externalContext = facesContext.getExternalContext();
var writer = facesContext.getResponseWriter();
writer.write(
eu.linqed.MyRESTService.doGet(
externalContext.getRequest(),externalContext.getResponse()
));
writer.endDocument();
}
}]]>
Domino as REST service
• More on this: “REST Services and IBM Domino/XWork” by John Dalsgaard
– http://www.slideshare.net/JohnDalsgaard/dannotes-19-20-november-2014
AngularJS in XPages
• How does AngularJS work?
Model View Controller
DEMONSTRATION
Demo app
• Demonstration you just saw was hosted on….
– IBM Domino ®
– IBM Bluemix ®
– Microsoft SharePoint ®
– IBM MobileFirst Platform Foundation ® (previously: IBM Worklight)
– IBM Connections
• Open source
– http://github.com/markleusink/BeyondSessionsApp
CONCLUSION
Conclusion
• AngularJS: MVC front end client side framework
• Add structure to your code
• Enables hybrid mobile web apps
– PhoneGap, Cordova, Worklight
• Use Domino as a NoSQL app server
– Out-of-the-Box, Proven, Stable, Rock solid security
Conclusion
• Modernize Domino Applications smartly
• Running Domino apps within other server platforms
• Make your application code portable
Questions ?
@markyroden
http://xomino.com
@markleusink
http://linqed.eu
Engage Online
 SocialBiz User Group socialbizug.org
– Join the epicenter of Notes and Collaboration user groups
 Social Business Insights blog ibm.com/blogs/socialbusiness
– Read and engage with our bloggers
 Follow us on Twitter
– @IBMConnect and @IBMSocialBiz
 LinkedIn http://bit.ly/SBComm
– Participate in the IBM Social Business group on LinkedIn
 Facebook https://www.facebook.com/IBMConnected
– Like IBM Social Business on Facebook
Notices and Disclaimers
Copyright © 2015 by International Business Machines Corporation (IBM). No part of this document may be reproduced or transmitted in any form without written permission from IBM.
U.S. Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM.
Information in these presentations (including information relating to products that have not yet been announced by IBM) has been reviewed for accuracy as of the date of initial publication and could include
unintentional technical or typographical errors. IBM shall have no responsibility to update this information. THIS DOCUMENT IS DISTRIBUTED "AS IS" WITHOUT ANY WARRANTY, EITHER EXPRESS OR
IMPLIED. IN NO EVENT SHALL IBM BE LIABLE FOR ANY DAMAGE ARISING FROM THE USE OF THIS INFORMATION, INCLUDING BUT NOT LIMITED TO, LOSS OF DATA, BUSINESS INTERRUPTION,
LOSS OF PROFIT OR LOSS OF OPPORTUNITY. IBM products and services are warranted according to the terms and conditions of the agreements under which they are provided.
Any statements regarding IBM's future direction, intent or product plans are subject to change or withdrawal without notice.
Performance data contained herein was generally obtained in a controlled, isolated environments. Customer examples are presented as illustrations of how those customers have used IBM products and the results
they may have achieved. Actual performance, cost, savings or other results in other operating environments may vary.
References in this document to IBM products, programs, or services does not imply that IBM intends to make such products, programs or services available in all countries in which IBM operates or does business.
Workshops, sessions and associated materials may have been prepared by independent session speakers, and do not necessarily reflect the views of IBM. All materials and discussions are provided for
informational purposes only, and are neither intended to, nor shall constitute legal or other guidance or advice to any individual participant or their specific situation.
It is the customer’s responsibility to insure its own compliance with legal requirements and to obtain advice of competent legal counsel as to the identification and interpretation of any relevant laws and regulatory
requirements that may affect the customer’s business and any actions the customer may need to take to comply with such laws. IBM does not provide legal advice or represent or warrant that its services or
products will ensure that the customer is in compliance with any law.
Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products in connection
with this publication and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the
suppliers of those products. IBM does not warrant the quality of any third-party products, or the ability of any such third-party products to interoperate with IBM’s products. IBM EXPRESSLY DISCLAIMS ALL
WARRANTIES, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
The provision of the information contained herein is not intended to, and does not, grant any right or license under any IBM patents, copyrights, trademarks or other intellectual property right.
IBM, the IBM logo, ibm.com, BrassRing®, Connections™, Domino®, Global Business Services®, Global Technology Services®, SmartCloud®, Social Business®, Kenexa®, Notes®, PartnerWorld®, Prove It!®,
PureSystems®, Sametime®, Verse™, Watson™, WebSphere®, Worklight®, are trademarks of International Business Machines Corporation, registered in many jurisdictions worldwide. Other product and service
names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the Web at "Copyright and trademark information" at: www.ibm.com/legal/copytrade.shtml.
It might look like a giveaway for a gay wedding. It’s not.
• EXTRA SLIDES
AngularJS in depth
• Simple example of two way data binding
AngularJS in XPages
• Behind the demonstration
– Cross-Origin Resource Sharing (CORS)
• Browser security
• Preventing cross site scripting attacks
• https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
• AngularJS core function examples
AngularJS in depth
AngularJS in XPages
• Behind the demonstration
– Cross-Origin Resource Sharing (CORS)
AngularJS in XPages
• Behind the demonstration
– Adding Server headers in Domino with NAB (3 max)
AngularJS in XPages
• How does AngularJS integrate with XPages ?
• HTML and JavaScript
in the WebContent folder
AngularJS in depth
• AngularJS core provider example
– '$routeProvider'
personApp.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/person/new', {
templateUrl: 'partials/person.html',
controller: 'PersonDetailCtrl',
}).
otherwise({
redirectTo: '/people'
});
}]);
AngularJS in XPages
• Model
– Domino Data
• View
– HTML
• Controller
– JavaScript
The future of web development write once, run everywhere with angular.js and domino
The future of web development write once, run everywhere with angular.js and domino
The future of web development write once, run everywhere with angular.js and domino
What is AngularJS
• Framework of methods and objects to model the MVC architecture easily
– App Modules
– App Controllers
– App Directives
– App Factories / Services

More Related Content

What's hot (20)

jQuery - the world's most popular java script library comes to XPages
jQuery - the world's most popular java script library comes to XPages
Mark Roden
 
Testing your Single Page Application
Testing your Single Page Application
Wekoslav Stefanovski
 
Webservices: connecting Joomla! with other programs.
Webservices: connecting Joomla! with other programs.
Herman Peeren
 
ICON UK 2016: Modernizing an IBM Notes applicaton using with AngularJS
ICON UK 2016: Modernizing an IBM Notes applicaton using with AngularJS
Mark Leusink
 
The fundamental problems of GUI applications and why people choose React
The fundamental problems of GUI applications and why people choose React
Oliver N
 
Single Page Application
Single Page Application
Isuru Madusanka
 
Building an E-commerce website in MEAN stack
Building an E-commerce website in MEAN stack
divyapisces
 
Extending WordPress as a pro
Extending WordPress as a pro
Marko Heijnen
 
Move Your XPages Applications to the Fast Lane
Move Your XPages Applications to the Fast Lane
Teamstudio
 
Web Applications Development with MEAN Stack
Web Applications Development with MEAN Stack
Shailendra Chauhan
 
Client Vs. Server Rendering
Client Vs. Server Rendering
David Amend
 
The Dark Side of Single Page Applications
The Dark Side of Single Page Applications
Dor Kalev
 
Joomla as a mobile App backend - ideas, examples and experiences
Joomla as a mobile App backend - ideas, examples and experiences
Andy_Gaskell
 
Optimus XPages: An Explosion of Techniques and Best Practices
Optimus XPages: An Explosion of Techniques and Best Practices
Teamstudio
 
Server and client rendering of single page apps
Server and client rendering of single page apps
Thomas Heymann
 
Moving from PHP to a nodejs full stack CMS
Moving from PHP to a nodejs full stack CMS
Make & Build
 
[Patel] SPFx: An ISV Insight into latest Microsoft's customization model
[Patel] SPFx: An ISV Insight into latest Microsoft's customization model
European Collaboration Summit
 
WordPress Development Tools and Best Practices
WordPress Development Tools and Best Practices
Danilo Ercoli
 
MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...
MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...
Hariharan Ganesan
 
Mobile Hybrid Development with WordPress
Mobile Hybrid Development with WordPress
Danilo Ercoli
 
jQuery - the world's most popular java script library comes to XPages
jQuery - the world's most popular java script library comes to XPages
Mark Roden
 
Testing your Single Page Application
Testing your Single Page Application
Wekoslav Stefanovski
 
Webservices: connecting Joomla! with other programs.
Webservices: connecting Joomla! with other programs.
Herman Peeren
 
ICON UK 2016: Modernizing an IBM Notes applicaton using with AngularJS
ICON UK 2016: Modernizing an IBM Notes applicaton using with AngularJS
Mark Leusink
 
The fundamental problems of GUI applications and why people choose React
The fundamental problems of GUI applications and why people choose React
Oliver N
 
Building an E-commerce website in MEAN stack
Building an E-commerce website in MEAN stack
divyapisces
 
Extending WordPress as a pro
Extending WordPress as a pro
Marko Heijnen
 
Move Your XPages Applications to the Fast Lane
Move Your XPages Applications to the Fast Lane
Teamstudio
 
Web Applications Development with MEAN Stack
Web Applications Development with MEAN Stack
Shailendra Chauhan
 
Client Vs. Server Rendering
Client Vs. Server Rendering
David Amend
 
The Dark Side of Single Page Applications
The Dark Side of Single Page Applications
Dor Kalev
 
Joomla as a mobile App backend - ideas, examples and experiences
Joomla as a mobile App backend - ideas, examples and experiences
Andy_Gaskell
 
Optimus XPages: An Explosion of Techniques and Best Practices
Optimus XPages: An Explosion of Techniques and Best Practices
Teamstudio
 
Server and client rendering of single page apps
Server and client rendering of single page apps
Thomas Heymann
 
Moving from PHP to a nodejs full stack CMS
Moving from PHP to a nodejs full stack CMS
Make & Build
 
[Patel] SPFx: An ISV Insight into latest Microsoft's customization model
[Patel] SPFx: An ISV Insight into latest Microsoft's customization model
European Collaboration Summit
 
WordPress Development Tools and Best Practices
WordPress Development Tools and Best Practices
Danilo Ercoli
 
MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...
MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...
Hariharan Ganesan
 
Mobile Hybrid Development with WordPress
Mobile Hybrid Development with WordPress
Danilo Ercoli
 

Similar to The future of web development write once, run everywhere with angular.js and domino (20)

AngularJS in Production (CTO Forum)
AngularJS in Production (CTO Forum)
Alex Ross
 
Beginning MEAN Stack
Beginning MEAN Stack
Rob Davarnia
 
AngularJS with TypeScript and Windows Azure Mobile Services
AngularJS with TypeScript and Windows Azure Mobile Services
Rainer Stropek
 
Angular js gtg-27feb2013
Angular js gtg-27feb2013
Nitya Narasimhan
 
AngularJS One Day Workshop
AngularJS One Day Workshop
Shyam Seshadri
 
AngularJS Anatomy & Directives
AngularJS Anatomy & Directives
Digikrit
 
AngularJS - a radically different way of building Single Page Apps
AngularJS - a radically different way of building Single Page Apps
jivkopetiov
 
AngularJS
AngularJS
Hiten Pratap Singh
 
AngularJS
AngularJS
NexThoughts Technologies
 
Intro to AngularJs
Intro to AngularJs
SolTech, Inc.
 
AngularJS
AngularJS
Maurice De Beijer [MVP]
 
What are the reasons behind growing popularity of AngularJS.pdf
What are the reasons behind growing popularity of AngularJS.pdf
mohitd6
 
The Growing Popularity of AngularJS
The Growing Popularity of AngularJS
Whiz Solutions
 
AngularJS Introduction (Talk given on Aug 5 2013)
AngularJS Introduction (Talk given on Aug 5 2013)
Abhishek Anand
 
Coders Workshop: API First Mobile Development Featuring Angular and Node
Coders Workshop: API First Mobile Development Featuring Angular and Node
Apigee | Google Cloud
 
AngularJS for Web and Mobile
AngularJS for Web and Mobile
Rocket Software
 
Angular js
Angular js
Mauro Servienti
 
FITC presents: Mobile & offline data synchronization in Angular JS
FITC presents: Mobile & offline data synchronization in Angular JS
FITC
 
AngularJS = Browser applications on steroids
AngularJS = Browser applications on steroids
Maurice De Beijer [MVP]
 
Angular js
Angular js
Silver Touch Technologies Ltd
 
AngularJS in Production (CTO Forum)
AngularJS in Production (CTO Forum)
Alex Ross
 
Beginning MEAN Stack
Beginning MEAN Stack
Rob Davarnia
 
AngularJS with TypeScript and Windows Azure Mobile Services
AngularJS with TypeScript and Windows Azure Mobile Services
Rainer Stropek
 
AngularJS One Day Workshop
AngularJS One Day Workshop
Shyam Seshadri
 
AngularJS Anatomy & Directives
AngularJS Anatomy & Directives
Digikrit
 
AngularJS - a radically different way of building Single Page Apps
AngularJS - a radically different way of building Single Page Apps
jivkopetiov
 
What are the reasons behind growing popularity of AngularJS.pdf
What are the reasons behind growing popularity of AngularJS.pdf
mohitd6
 
The Growing Popularity of AngularJS
The Growing Popularity of AngularJS
Whiz Solutions
 
AngularJS Introduction (Talk given on Aug 5 2013)
AngularJS Introduction (Talk given on Aug 5 2013)
Abhishek Anand
 
Coders Workshop: API First Mobile Development Featuring Angular and Node
Coders Workshop: API First Mobile Development Featuring Angular and Node
Apigee | Google Cloud
 
AngularJS for Web and Mobile
AngularJS for Web and Mobile
Rocket Software
 
FITC presents: Mobile & offline data synchronization in Angular JS
FITC presents: Mobile & offline data synchronization in Angular JS
FITC
 
AngularJS = Browser applications on steroids
AngularJS = Browser applications on steroids
Maurice De Beijer [MVP]
 
Ad

Recently uploaded (20)

Migrating to Azure Cosmos DB the Right Way
Migrating to Azure Cosmos DB the Right Way
Alexander (Alex) Komyagin
 
How to Choose the Right Web Development Agency.pdf
How to Choose the Right Web Development Agency.pdf
Creative Fosters
 
Step by step guide to install Flutter and Dart
Step by step guide to install Flutter and Dart
S Pranav (Deepu)
 
Microsoft Business-230T01A-ENU-PowerPoint_01.pptx
Microsoft Business-230T01A-ENU-PowerPoint_01.pptx
soulamaabdoulaye128
 
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
joybepari360
 
Shell Skill Tree - LabEx Certification (LabEx)
Shell Skill Tree - LabEx Certification (LabEx)
VICTOR MAESTRE RAMIREZ
 
Software Testing & it’s types (DevOps)
Software Testing & it’s types (DevOps)
S Pranav (Deepu)
 
Async-ronizing Success at Wix - Patterns for Seamless Microservices - Devoxx ...
Async-ronizing Success at Wix - Patterns for Seamless Microservices - Devoxx ...
Natan Silnitsky
 
Plooma is a writing platform to plan, write, and shape books your way
Plooma is a writing platform to plan, write, and shape books your way
Plooma
 
Generative Artificial Intelligence and its Applications
Generative Artificial Intelligence and its Applications
SandeepKS52
 
GDG Douglas - Google AI Agents: Your Next Intern?
GDG Douglas - Google AI Agents: Your Next Intern?
felipeceotto
 
AI-Powered Compliance Solutions for Global Regulations | Certivo
AI-Powered Compliance Solutions for Global Regulations | Certivo
certivoai
 
wAIred_RabobankIgniteSession_12062025.pptx
wAIred_RabobankIgniteSession_12062025.pptx
SimonedeGijt
 
Making significant Software Architecture decisions
Making significant Software Architecture decisions
Bert Jan Schrijver
 
Code and No-Code Journeys: The Coverage Overlook
Code and No-Code Journeys: The Coverage Overlook
Applitools
 
Porting Qt 5 QML Modules to Qt 6 Webinar
Porting Qt 5 QML Modules to Qt 6 Webinar
ICS
 
Open Source Software Development Methods
Open Source Software Development Methods
VICTOR MAESTRE RAMIREZ
 
Agile Software Engineering Methodologies
Agile Software Engineering Methodologies
Gaurav Sharma
 
OpenTelemetry 101 Cloud Native Barcelona
OpenTelemetry 101 Cloud Native Barcelona
Imma Valls Bernaus
 
Who will create the languages of the future?
Who will create the languages of the future?
Jordi Cabot
 
How to Choose the Right Web Development Agency.pdf
How to Choose the Right Web Development Agency.pdf
Creative Fosters
 
Step by step guide to install Flutter and Dart
Step by step guide to install Flutter and Dart
S Pranav (Deepu)
 
Microsoft Business-230T01A-ENU-PowerPoint_01.pptx
Microsoft Business-230T01A-ENU-PowerPoint_01.pptx
soulamaabdoulaye128
 
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
Smadav Pro 2025 Rev 15.4 Crack Full Version With Registration Key
joybepari360
 
Shell Skill Tree - LabEx Certification (LabEx)
Shell Skill Tree - LabEx Certification (LabEx)
VICTOR MAESTRE RAMIREZ
 
Software Testing & it’s types (DevOps)
Software Testing & it’s types (DevOps)
S Pranav (Deepu)
 
Async-ronizing Success at Wix - Patterns for Seamless Microservices - Devoxx ...
Async-ronizing Success at Wix - Patterns for Seamless Microservices - Devoxx ...
Natan Silnitsky
 
Plooma is a writing platform to plan, write, and shape books your way
Plooma is a writing platform to plan, write, and shape books your way
Plooma
 
Generative Artificial Intelligence and its Applications
Generative Artificial Intelligence and its Applications
SandeepKS52
 
GDG Douglas - Google AI Agents: Your Next Intern?
GDG Douglas - Google AI Agents: Your Next Intern?
felipeceotto
 
AI-Powered Compliance Solutions for Global Regulations | Certivo
AI-Powered Compliance Solutions for Global Regulations | Certivo
certivoai
 
wAIred_RabobankIgniteSession_12062025.pptx
wAIred_RabobankIgniteSession_12062025.pptx
SimonedeGijt
 
Making significant Software Architecture decisions
Making significant Software Architecture decisions
Bert Jan Schrijver
 
Code and No-Code Journeys: The Coverage Overlook
Code and No-Code Journeys: The Coverage Overlook
Applitools
 
Porting Qt 5 QML Modules to Qt 6 Webinar
Porting Qt 5 QML Modules to Qt 6 Webinar
ICS
 
Open Source Software Development Methods
Open Source Software Development Methods
VICTOR MAESTRE RAMIREZ
 
Agile Software Engineering Methodologies
Agile Software Engineering Methodologies
Gaurav Sharma
 
OpenTelemetry 101 Cloud Native Barcelona
OpenTelemetry 101 Cloud Native Barcelona
Imma Valls Bernaus
 
Who will create the languages of the future?
Who will create the languages of the future?
Jordi Cabot
 
Ad

The future of web development write once, run everywhere with angular.js and domino

  • 2. BTE 102: The Future of Web Development Write Once, Run Everywhere with AngularJS and Domino Marky Roden Mark Leusink Senior Solutions Architect LinQed PSC Group LLC
  • 3. About Mark  Freelance consultant/ developer – XPages, web, mobile, Unplugged  15 years experience (that makes me younger than Marky)  Fan of everything web dev (Angular, Bootstrap, web components)  Open source (OpenNTF, GitHub) – XPages Debug Toolbar, Bootstrap4XPages, Bootcards  Blog: http://linqed.eu  Twitter: @markleusink  Email: [email protected]
  • 4. About Marky  Over 17 years IBM Notes Domino® work  Senior Solutions Architect at PSC Group • XPages Developer • Project Leader • AngularJS Protagonist  Contact Information • Blog: http://www.xomino.com • Twitter: @markyroden • Skype: marky.roden www.psclistens.com @pscgroup
  • 5. © 2013 IBM Corporation F O U N D E D I N 1 9 9 0 The Largest, Most Experienced XPages Service Firm in North America PSC Group, LLC Congratulates our 5 IBM Champions! Brad Balassaitis Andrew Barickman Kathy Brown John Head Mark Roden
  • 6. Agenda • Introduction to MVC/ REST architectures – True Separation of UI and Business Logic • Introduction to AngularJS – Why Angular? – Components and capabilities – Examples of capabilities • Domino as a REST Service • Demo app – Application Architecture – How to run the same app “everywhere”
  • 8. About the demo app The Demo app is built with – AngularJS – Bootstrap – IBM Domino data – Zero XPages And to make it better – A Bootstrap theme from Bootswatch.com (‘United’) – Font Awesome for icons – Animate.css for animations – FastClick.js for a snappier UI – angular-local-storage for local storage Sessions data from the Totally Unofficial Totally Unsupported session database
  • 9. INTRODUCTION TO MVC / REST ARCHITECTURE
  • 10. Introduction to MVC / REST Architecture • MVC (Model-View-Controller) is an architectural design pattern that encourages improved application organization through a separation of concerns. – The Model manages the data – The View is the HTML representation of the data through the use of Templates • What your users see – The Controller is the application code which is used to determine the way the Model is populated and displayed. • Glues the Model and View together • Angular provides the framework to do client-side MVC
  • 11. Introduction to MVC / REST Architecture • Representational state transfer (REST) is an architecture style for designing networked applications – Uses simple HTTP calls – JSON • Performant • Scalable • Simple interface • Portable
  • 12. ServerClient Introduction to MVC / REST Architecture • We’ve been building web apps like this Request page - process request - get data - create HTML Response • HTML • CSS • JavaScript (display)
  • 13. Client Introduction to MVC / REST Architecture • But this is getting popular Webserver Request page/ app Response (static HTML, JS, CSS) (process) REST API Data (JSON) Request data
  • 14. Client Introduction to MVC / REST Architecture • Or this variation Webserver Response (static HTML, JS, CSS) (process) REST API Data (JSON) Request data Request page/ app
  • 16.  AngularJS is a structural framework for dynamic web apps. It lets you use HTML as your template language and lets you extend HTML's syntax to express your application's components clearly and succinctly. Angular's data binding and dependency injection eliminate much of the code you currently have to write. “Angular is what HTML would have been had it been designed for applications” The AngularJS team
  • 17. What is AngularJS • Web application framework – Designed as a boilerplate model for an application – Out of the box capabilities and best practices – Built with test driven development (TDD) in mind • Runs in the browser, all client side JavaScript – Unlike e.g. XPages or C# (SharePoint) where most processing is done server side. • Helps to create dynamic sites / Single Page Applications – Partials? Dynamic? Been there, done that!
  • 18. Why AngularJS ? • Large developer community – ~75,000 questions tagged on Stackoverflow.com • Backed by – Developed by Google and the community – Open source (MIT license) • Stable, mature and performant – Initial release 2009 – Version 1 released Jun 2012 – Current version 1.3.5 (Dec 2014) – Version 2 scheduled for end of 2015
  • 19. Why AngularJS? • Ready for the web of tomorrow • Many Concepts adopted by Web Components standard • Data driven • Custom elements (functional custom attributes) • HTML Imports • DOM Templating
  • 20. AngularJS: Modules • Ties the code to the HTML DOM model
  • 21. Angular Route Control • UI-Router, state based management • Configures the app • When a route is encountered – Use this template – Use this Page Title – Use this controller • http://beyondtheeveryday.com/#/sessionsAll • http://beyondtheeveryday.com/#/favorites
  • 22. AngularJS: Controllers • Contains the application logic. app.controller("MainCtrl", function($rootScope, $scope, utils, localStorageService, SessionsFactory) { $scope.menuDays = [ {id: '0', label:'Sunday'}, {id: '1', label:'Monday'}, {id: '2', label:'Tuesday'}, {id: '3', label:'Wednesday'} ]; //set default active menu option $scope.pageTitle = "Connect 2015 Sessions"; $scope.activeMenu = "about";
  • 23. • Lazily instantiated, only when they are needed – “Angular services are substitutable objects that are wired together using dependency injection (DI). You can use services to organize and share code across your app” var app = angular.module("sessionsApp.services", []); app.factory('SessionsFactory', function($http) { return { all : function() { return $http.get(‘db.nsf/collections/name/sessions') .then( function(res) { return res.data; }); }, ... AngularJS: Factories and Services
  • 24. AngularJS: Directives • Tells Angular that it needs to ‘do’ something • Interact with the browser based on the controller’s instructions • Re-usable components • Much of Angular’s core functionality Directive based <div class="row" ng-repeat="speaker in session.speakers"> <div class="col-xs-12 col-sm-12"> {{speaker}} </div> </div>
  • 25. AngularJS in depth • Dependency injections A software design pattern that deals with how components get hold of their dependencies. The Angular injector subsystem is in charge of creating components, resolving their dependencies, and providing them to other components as requested.
  • 26. AngularJS in depth • How does it all hang together?
  • 27. AngularJS in depth • AngularJS core examples – ‘$scope’ sessionsAppCtrl.controller('FeedbackCtrl', function($scope, SessionsFactory) { $scope.submitted = false; $scope.submit = function() { SessionsFactory.saveFeedback( {feedback : $scope.feedback, name: $scope.name} ); $scope.submitted = true; }; });
  • 28. AngularJS in depth • AngularJS core services example – '$http' app.factory('SessionsFactory', function($http, $q, dasBaseUrl, utils) { return { all : function() { return $http.get('collections/name/sessionsAll?count=1000', {cache: true}) .then( function(res) { return res.data; }); }, ...
  • 29. AngularJS in depth • AngularJS core directives examples – ng-show / ng-hide – ng-click – ng-list, ng-class, ng-repeat, ng-keydown etc }; <div class="col-sm-8"> <button class="btn btn-default" ng-click="home()">Back</button> <button class="btn" ng-click="savePerson($event)" ng-hide="create">Save</button> <button class="btn" ng-click="createPerson($event)" ng-show="create">Create</button> </div>
  • 30. AngularJS in depth • AngularJS template example
  • 31. AngularJS in depth • How does AngularJS integrate with XPages ? • An application written using AngularJS uses 4 main things – HTML Pages – JavaScript files – CSS – A Data Service • One or many of those can be “XPages”
  • 32. DOMINO AS A REST SERVICE
  • 33. Domino as REST service • Three options to use Domino as a data store for an Angular application: – Domino Access Services • Built-in, easiest to enable – REST service component from the Extension Library • More customization options – Do-it-yourself REST service • Fully customizable, requires more work
  • 34. Domino as REST service - Domino Access Services (DAS) • Consists of 3 services: core, data and calendar – For the demo app we’ve only used the data service • Must be enabled on server level, app level and form/ view level • Gives you the data from all fields (documents) or columns (views)
  • 35. Domino as REST service - Domino Access Services (DAS) http://beyondtheeveryday.com/beyond/connect2015.nsf/api/data/collections/name/sessionsAll Server Database path DAS View name
  • 36. Domino as REST service - ExtLib REST • Drag on an XPage • Link to data source (view, bean, …) • Set path • Done <xe:restService pathInfo="contactjson"> <xe:this.service> <xe:viewJsonService viewName="AllContacts" var="entry" contentType="text/plain" count="10" defaultColumns="true"> </xe:viewJsonService> </xe:this.service> </xe:restService>
  • 37. Domino as REST service - custom REST service public class MyRESTService { public static String doGet(HttpServletRequest request, HttpServletResponse response) { JsonJavaObject json = new JsonJavaObject(); json.put("userName", ExtLibUtil.getCurrentSession().getEffectiveUserName() ); return JsonGenerator.toJson(JsonJavaFactory.instanceEx, json); } } <!--?xml version="1.0" encoding="UTF-8"?--> <![CDATA[#{javascript: var externalContext = facesContext.getExternalContext(); var writer = facesContext.getResponseWriter(); writer.write( eu.linqed.MyRESTService.doGet( externalContext.getRequest(),externalContext.getResponse() )); writer.endDocument(); } }]]>
  • 38. Domino as REST service • More on this: “REST Services and IBM Domino/XWork” by John Dalsgaard – http://www.slideshare.net/JohnDalsgaard/dannotes-19-20-november-2014
  • 39. AngularJS in XPages • How does AngularJS work? Model View Controller
  • 41. Demo app • Demonstration you just saw was hosted on…. – IBM Domino ® – IBM Bluemix ® – Microsoft SharePoint ® – IBM MobileFirst Platform Foundation ® (previously: IBM Worklight) – IBM Connections • Open source – http://github.com/markleusink/BeyondSessionsApp
  • 43. Conclusion • AngularJS: MVC front end client side framework • Add structure to your code • Enables hybrid mobile web apps – PhoneGap, Cordova, Worklight • Use Domino as a NoSQL app server – Out-of-the-Box, Proven, Stable, Rock solid security
  • 44. Conclusion • Modernize Domino Applications smartly • Running Domino apps within other server platforms • Make your application code portable
  • 46. Engage Online  SocialBiz User Group socialbizug.org – Join the epicenter of Notes and Collaboration user groups  Social Business Insights blog ibm.com/blogs/socialbusiness – Read and engage with our bloggers  Follow us on Twitter – @IBMConnect and @IBMSocialBiz  LinkedIn http://bit.ly/SBComm – Participate in the IBM Social Business group on LinkedIn  Facebook https://www.facebook.com/IBMConnected – Like IBM Social Business on Facebook
  • 47. Notices and Disclaimers Copyright © 2015 by International Business Machines Corporation (IBM). No part of this document may be reproduced or transmitted in any form without written permission from IBM. U.S. Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM. Information in these presentations (including information relating to products that have not yet been announced by IBM) has been reviewed for accuracy as of the date of initial publication and could include unintentional technical or typographical errors. IBM shall have no responsibility to update this information. THIS DOCUMENT IS DISTRIBUTED "AS IS" WITHOUT ANY WARRANTY, EITHER EXPRESS OR IMPLIED. IN NO EVENT SHALL IBM BE LIABLE FOR ANY DAMAGE ARISING FROM THE USE OF THIS INFORMATION, INCLUDING BUT NOT LIMITED TO, LOSS OF DATA, BUSINESS INTERRUPTION, LOSS OF PROFIT OR LOSS OF OPPORTUNITY. IBM products and services are warranted according to the terms and conditions of the agreements under which they are provided. Any statements regarding IBM's future direction, intent or product plans are subject to change or withdrawal without notice. Performance data contained herein was generally obtained in a controlled, isolated environments. Customer examples are presented as illustrations of how those customers have used IBM products and the results they may have achieved. Actual performance, cost, savings or other results in other operating environments may vary. References in this document to IBM products, programs, or services does not imply that IBM intends to make such products, programs or services available in all countries in which IBM operates or does business. Workshops, sessions and associated materials may have been prepared by independent session speakers, and do not necessarily reflect the views of IBM. All materials and discussions are provided for informational purposes only, and are neither intended to, nor shall constitute legal or other guidance or advice to any individual participant or their specific situation. It is the customer’s responsibility to insure its own compliance with legal requirements and to obtain advice of competent legal counsel as to the identification and interpretation of any relevant laws and regulatory requirements that may affect the customer’s business and any actions the customer may need to take to comply with such laws. IBM does not provide legal advice or represent or warrant that its services or products will ensure that the customer is in compliance with any law. Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products in connection with this publication and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products. IBM does not warrant the quality of any third-party products, or the ability of any such third-party products to interoperate with IBM’s products. IBM EXPRESSLY DISCLAIMS ALL WARRANTIES, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. The provision of the information contained herein is not intended to, and does not, grant any right or license under any IBM patents, copyrights, trademarks or other intellectual property right. IBM, the IBM logo, ibm.com, BrassRing®, Connections™, Domino®, Global Business Services®, Global Technology Services®, SmartCloud®, Social Business®, Kenexa®, Notes®, PartnerWorld®, Prove It!®, PureSystems®, Sametime®, Verse™, Watson™, WebSphere®, Worklight®, are trademarks of International Business Machines Corporation, registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the Web at "Copyright and trademark information" at: www.ibm.com/legal/copytrade.shtml.
  • 48. It might look like a giveaway for a gay wedding. It’s not.
  • 50. AngularJS in depth • Simple example of two way data binding
  • 51. AngularJS in XPages • Behind the demonstration – Cross-Origin Resource Sharing (CORS) • Browser security • Preventing cross site scripting attacks • https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
  • 52. • AngularJS core function examples AngularJS in depth
  • 53. AngularJS in XPages • Behind the demonstration – Cross-Origin Resource Sharing (CORS)
  • 54. AngularJS in XPages • Behind the demonstration – Adding Server headers in Domino with NAB (3 max)
  • 55. AngularJS in XPages • How does AngularJS integrate with XPages ? • HTML and JavaScript in the WebContent folder
  • 56. AngularJS in depth • AngularJS core provider example – '$routeProvider' personApp.config(['$routeProvider', function($routeProvider) { $routeProvider. when('/person/new', { templateUrl: 'partials/person.html', controller: 'PersonDetailCtrl', }). otherwise({ redirectTo: '/people' }); }]);
  • 57. AngularJS in XPages • Model – Domino Data • View – HTML • Controller – JavaScript
  • 61. What is AngularJS • Framework of methods and objects to model the MVC architecture easily – App Modules – App Controllers – App Directives – App Factories / Services

Editor's Notes

  • #2: (won’t talk about this slide: see couple slides later)
  • #3: Intro, thanks for coming, welcome
  • #4: I’m from the Netherlands (capital city is Amsterdam, not Kopenhagen) IBM Champion for 4 years in a row
  • #6: 5
  • #7: Marky
  • #8: ML First a little about the demo app, set the stage
  • #9: Mark talks about his demo Built with AngularJS, Bootstrap theme for the UI REST service provided by Domino HTML/ JS/ CSS served by Domino too Uses data from the TUTU database: thanks Mat
  • #10: Mark L section Let’s talk about the architecture for the demo app
  • #11: Mark - This is what MVC is (diagrams: this is what MVC looks like) Rendering/ templating done at the server vs client
  • #12: This is what REST is
  • #13: This is what we do ‘Traditional’ Domino dev, XPages, PHP, ASP, JSP Server side rendering Pushes HTML to the client Browser just ‘displays’ the HTML it receives Cons: Network overhead, Server overhead for computations With standard XPages: Model and views are integrated, maintenance nightmare, makes working in a team more difficult
  • #14: Browser requests start page Page (static HTML, JS, CSS) served by webserver Browser needs to interpret & render the app DOM Manipulation Data exchange using a REST API provided by the webserver Browser might need additional resources (templates) and requests those when needed. Faster, no network overhead Loose coupled apps (compared to the tightly coupled one in the prev slide) OR
  • #15: App runs a different server then the API The REST API server could be Domino, but doesn’t have to be (same for the db…)
  • #16: Marky R http://campus.codeschool.com/courses/shaping-up-with-angular-js/intro
  • #27: Two way data binding
  • #29: Cool built-in functions like {cache:true}
  • #33: Mark L
  • #34: Mark L
  • #35: Core: metadata Data: configurable Calendar:
  • #37: More flexibility Bean as datasource Resultset Configure configure multiple services on 1 page
  • #38: Just to show that you can also do it fully manual. No in-depth talk
  • #39: We kept it simple in the app by using DDS
  • #40: In summary; Model = data (REST) View built on top
  • #41: Mark L Domino (browser), Mark L Bluemix – show it with developer tools on to show data source Remember the architecture slide: we’ve only replaced the webserver You will run into CORS issues ! Worklight (IBM MobileFirst Platform Foundation Developer edition) easy: just copy in the entire app (and it’s library dependencies), set the launch page Mix the Worklight code with your own (initialization, offline detection) Worklight app can work offline (using local storage or other, like the JSONStore) Marky does connections and sharepoint
  • #42: We showed you that using this architecture to build apps you can run it in mult runtimes App is open source Tried to keep it simple, while also creating an visually attractive and useful app Feel free to use it anywhere you want
  • #44: Mark
  • #45: Marky
  • #51: Mark L swap over for beer demos http://beyondtheeveryday.com/basic-samples/1-simple.html (and next pages)