transformations - a tlcc & teamstudio webinar

34
Transformations Smart Application Migration A presentation of Oliver Busse @ Engage.UG in March 2015 Broadcasted in the TLCC & Teamstudio Webinar April 21, 2015

Upload: oliver-busse

Post on 16-Jul-2015

174 views

Category:

Software


1 download

TRANSCRIPT

Transformations

Smart Application Migration

A presentation of Oliver Busse @ Engage.UG in March 2015

Broadcasted in the TLCC & Teamstudio Webinar April 21, 2015

Agenda

•About me

•Overview

•Preamble

•Migrate database and user profiles• Legacy profile documents vs. Java Beans• Value lists made available over the whole application

•User and environment information• What can a user see and use?

•Extending Fulltext search to a facetted search• Filtering your data with meta tags

Oliver Busse

• „Bleeding Yellow“ since 2000• Working for We4IT Group• OpenNTF Board Member• IBM Champion for ICS in 2015• @zeromancer1972• www.oliverbusse.com

www.we4it.com

Overview

•What‘s this?• Transforming & re-using commonly used legacy patterns in

XPages• Don‘t fear Java • Avoid @Formulas in SSJS• Ideas for best practices

•What‘s it not?• An XPages Introduction• A Java beginner‘s guide• A complete application migration strategy

Preamble

•Why not to use SSJS „excessively“?• SSJS is interpreted at runtime• SSJS is compiled at runtime (every time you call it!)• Compiled SSJS is hard to debug while executed

6#engageug

Migrating database and user profiles

What we find in legacy apps: profile documents

Disadvantages• You cannot see them without

using tools• You can edit and create them

only programmatically• Sometimes replication issues• Unwanted Caching ;-)

Advantages• Quick access without using

lookup views• Caching

What we missed in many cases

DatabaseScript != Global Declarations

Encapsuled, no access from outside(except Database Events)

Performance-Killer

Numerous usage of those formulas slow down the app

one of many...

Transformation

Item1=Values1Item2=Values2Item3=Values3

...

NotesDocument

Key1=ValueMap1Key2=ValueMap2Key3=ValueMap3

...

HashMap

NSF-based, view lookup Memory-based, direct access

Ingredients

•Transformation of profile documents to „standard“ documents

1. Create a corresponding lookup view2. Optional: corresponding forms for maintenance3. Create the Java Bean classes4. Define those Bean classes in faces-config.xml

Preparation: Lookup Views

•Key for Database Profiles = dbprofile

•Key for User Profiles = Canonical User Name

•Key for Value Lists = free but unique

Preparation: Java Beans

• 3 Classes:• DatabaseProfileBean• AppConfigBean• UserProfileBean

• The DatabaseProfileBean initializes the document ifit doesn‘t exist

• The UserProfileBean initializes the document whenthe user saves it for the first time

faces-config.xml<faces-config>

<!-- Database Profile Bean --><managed-bean>

<managed-bean-name>dbprofile</managed-bean-name><managed-bean-class>com.icsug.DatabaseProfileBean</managed-bean-class><managed-bean-scope>application</managed-bean-scope>

</managed-bean><!-- User Profile Bean --><managed-bean>

<managed-bean-name>userprofile</managed-bean-name><managed-bean-class>com.icsug.UserProfileBean</managed-bean-class><managed-bean-scope>session</managed-bean-scope>

</managed-bean><!-- Application Configuration --><managed-bean>

<managed-bean-name>application</managed-bean-name><managed-bean-class>com.icsug.AppConfigBean</managed-bean-class><managed-bean-scope>application</managed-bean-scope>

</managed-bean></faces-config>

Digression: Bean Scopes & Lifecycles

•Request• Lives beginning with the request to creation of the response

•View• Within a page until changing the page, even during partial

refreshes

•Session• Per user session

•Application• During the life time of th application (after 30 minutes it is

dropped by default)

DEMO

17#engageug

User and Environment Information

User and Environment Information

Name variations

Access Level

ACL Options notes.ini variables

EnvironmentBean

faces-config.xml: EnvironmentBean

19#engageug

<?xml version="1.0" encoding="UTF-8"?><faces-config>

<!-- Environment Bean --><managed-bean>

<managed-bean-name>env</managed-bean-name><managed-bean-class>com.icsug.EnvironmentBean</managed-bean-class><managed-bean-scope>view</managed-bean-scope>

</managed-bean>

</faces-config>

Example: Username Variations

<p><xp:label

value="#{javascript:env.userName}"id="label1">

</xp:label></p><p>

<xp:labelvalue="#{javascript:env.commonUserName}"id="label2">

</xp:label></p><p>

<xp:labelvalue="#{javascript:env.abbreviatedUserName}"id="label3">

</xp:label></p>

Example: ACL Options

The delete button is only visible if the user can delete documents

Even in themes!

22#engageug

<themeextends="flatly"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="platform:/plugin/com.ibm.designer.domino.style

kits/schema/stylekit.xsd"><!--display a submit type button only if user can create documents via ACL--><control>

<name>Button.Submit</name><property

type="boolean"><name>rendered</name><value>#{env.createDocuments}</value>

</property></control>

</theme>

DEMO

24#engageug

Extending Fulltext-Search to a Facetted Search

Facetted Search

„Faceted search, also called faceted navigation or faceted browsing, is a technique for accessing information organized according to a faceted classification system, allowing users to explore a collection of information by applying multiple filters.“

http://en.wikipedia.org/wiki/Faceted_search

Facetted Search

„Well-known“ Examples

amazing.com cyberharbor

muse

Facetted Search with Domino?

1. Fulltext Search

2. Filtering result from extra meta data

1. Meta data search with facet selection

2. Fulltext Search in results

FacettedSearchBean (Session scoped)

FacetsSearch Term

FacettedSearchBean

DocumentCollection(ArrayList<SearchResultEntry>)

30#engageug

DEMO

Facetted Search: Outlook & Alternatives

•Using OpenNTF API‘s Graph-DB functions

•Using a 3rd party Graph-DB like Apache Solr

31#engageug

Want to get the DEMO?

Grab it from my Bitbucket repo (also contains an NTF):

https://bitbucket.org/zeromancer1972/icsug-2015-demo

It uses the following plugins available on OpenNTF:

XPages Extension Library (9.0.1.07+):

http://extlib.openntf.org/

Bootstrap 4 Xpages:

http://www.openntf.org/main.nsf/project.xsp?r=project/Bootstrap4XPages

OpenNTF Domino API:

http://www.openntf.org/main.nsf/project.xsp?r=project/OpenNTF%20Domino%20API

32#engageug

Q & A

33#engageug

Other Resources

http://en.wikipedia.org/wiki/Faceted_search

http://lucene.apache.org/solr/

https://www.focul.net/focul-best-practice-faceted-filtering-xpages-using-java-beans/