Categories
Podcast XPages

NotesIn9 136: Using XPages with Bootstrap 3 and FontAwesome

Ok enough Java.  We need something that even Marky Roden might like!

In this show Tim Tripcony returns to end out “Tim Tripcony week” on NotesIn9.  He’ll give a demo on how you can start using Bootstrap 3 and Font Awesome with your XPages applications.  He’ll do so by using themes and a content delivery network.

Really good stuff!!

Categories
Java Podcast XPages

NotesIn9 135: Using Java in XPages Part4

Tim Tripcony returns again for another great show in his Java series.  Today he’ll be introducing the concept of a “MimeBean”.  A “MimeBean” gives the ability to save Java Objects inside a notes field.  It opens up many new possibilities for storing data in your applications.

Not to be missed!

Categories
Java Podcast XPages

NotesIn9 134: Using Java with XPages Part 3

In this show Tim Tripcony continues his series of exploring the use of Java with your XPages application.  Today’s show discusses linking buttons to Java, dealing with ReadOnly properties and how to deal with explilcit getters and setters – but only when you want to!

There’s even a little more Bootstrap goodness in here!

Categories
Java Notes In 9 Podcast XPages

NotesIn9 132: Using Java in XPages Part 1

Ok.  There’s a lot going on in this show so let’s get started:

This show came from a Skype Chat I had with Tim Tripcony.  The goal here is a series that focuses on how you actually use xpages and java beans together.  We want to show how to bind to Java Objects instead of documents and actually use them.  This is not a full “app” but more of a CRUD example.  We didn’t want to distract too much from the core concept of linking XPages to Java Beans directly.

Of course I failed at that as since Tim was using source control for this I wanted to start the show with source control.  So you can see me bring the project down and create not only the .ntf but also the .nsf file.  So if that’s not too interesting to you skip it.  the Java stuff starts around the 15 minute mark I think.

I did do some editing to cut out some other parts that weren’t needed.  So there’s a pretty poor transition in there at one point. One of the things I cut out was how Tim was using Themes to pull Bootstap 3 into his app from a CDN.  So if you’re interested in Bootstrap you might want to download the app and check that out!  Clever.  Beats putting it into the NSF.

Today is actually my birthday.  So as a gift to the community I wanted to get this show out and start this series.  Jesse Gallagher asked if that I was doing a Hobbit Style Birthday.  Where a Hobbit gives out gifts on their birthday.  Wish I would have thought of it that way.  Typical Jesse – usually 3 steps ahead of me.

Anyway – I hope you like the show.

P.S. This show is at another new resolution. 1440×900 I believe.  I’m having trouble getting my  Parallels VM to use my normal 1280×720 resolution.  It works great for my work VM but not my NotesIn9 VM.  Really weird.  I do like the bigger resolution since you know…  it’s Designer and all that.  So I might try to keep this.  I don’t know.  But PLEASE let me know if you have problems viewing the show or reading any code.

Categories
Notes In 9 Podcast XPages

NotesIn9 131: Use SourceTree for better XPages Source Control

In previous NotesIn9’s I’ve talked about using Source Control inside Domino Designer.  Well today it all changes! Whatever I said before..  forget it!

The great Jedi master Yoda once said:  “You must unlearn what you have learned”. I’m officially calling a “Do Over” and we’re going to start from scratch with Source Control.

This show focuses on using Source Control but in a whole new way.  Rather then trying to control it from inside Domino Designer we’re going to use a really great FREE external application called “SourceTree”.

This app supports Git and Mercurial and has built in “HG Flow” which really should take a lot of pain out of creating branches and releases.

I ATTEMPT to demo how to install SourceTree, how to use it with your XPages Applications and how to push it to the server and pull an application back down from the server.

This is an early video.  I’ve only barely started using this myself but I wanted to get this out right away for our internal development team as well as anyone else who’s interested. It took me a while to “get it” and I want to spare anyone the pain that I went through.  I will do a followup video as needed.

Big thanks go out to Nathan T. Freeman, Russ Maher and Declan Lynch for their help which led to this video.

Categories
Learning XPages Notes In 9 Podcast XPages

NotesIn9 130: Using XPages Type Ahead for Navigation.

In this episode Tim Tripcony makes a brilliant return to the show with a great demo on using “Fancy Typeahead” as navigation.  This builds on some previous examples on Type Ahead that you might want to look at as well.

http://notesin9.com/index.php/2009/11/07/episode-007-a-license-to-typeahead/

http://notesin9.com/index.php/2012/03/12/notesin9-050-improving-the-type-ahead-control/

http://notesin9.com/index.php/2011/02/11/notesin9-24-fancy-type-ahead-in-xpages/

— This is the really important one for Fancy Typeahead

P.S. This show has been released at a different resolution.  I usually try and stay with 1280×720 but Tim’s demo was 1980×1080.  Bigger is better when working in Designer so please let me know what you think.  If the resolution is ok or if it cases a problem.  If it’s all ok then maybe I don’t need to keep worrying about staying within the 1280×720.  Let me know what you think!

Categories
Notes In 9 Podcast XPages

NotesIn9 128: Fixing URL Issues

In this show I fix a problem with my XPagesCheatSheet.com that had to do with URL handling.  I’ll describe the problem and detail the fixes.

Categories
Java Podcast XPages

NotesIn9 127: XPages Parallel Processing

In this show Serdar Basegmez returns with a demo taken from his recent presentation at Icon UK.

He’ll introduce the concept of creating a new thread in your XPages application that can be used for longer running processes.  This effectively lets you do 2 things at once in your application.

 

You can download a demo database here:  https://github.com/sbasegmez/ICONUK2013

Categories
Notes In 9 Podcast XPages

NotesIn9 124: Code Snippets

In today’s episode, Martin Rolph, a great new contributor, comes on the show to demonstrate how you can use the built in Snippet functionality of Domino Designer.

I also do a brief demo of OpenNTF’s XSnipppet’s project.  A really wonderful resource.

Categories
Java Notes In 9 Podcast XPages

NotesIn9 122: Working with Java Objects in XPages

This show comes directly from my day job.  This is a presentation that I gave to the internal XPages team. I talk about using Java Objects but not necessarily via “Managed Beans”.

A lot of XPages and Java talk centers around “Managed Beans” but that’s not your only option.  There are additional ways to use Java Code in your XPages Applications that don’t need Managed Beans.  There’s also DataContext, objectData and “ScopedBinding”.  NOTE: “ScopedBinding” is a term I’m making up myself.

So I’m really not an expert here, this is just stuff I’ve been playing with and there might be things I’ve missed but this is a simple demo on how to use a Java Class from each of these entry points. I thought it might be useful especially if you hear the term “Java Managed Bean” and think it’s something scary.

Another Note:  I have a little Java Class in here for the demo.  That Class itself was rushed and not exactly an example of best practice.  It’s kinda close, but I left some crap in there that needs to be cleaned up.

Hope You like the show.

P.S. In the show I am asking for feedback on how you prefer to consume NotesIn9 Videos.  Do you stream from the website? Do you download and watch off line via iTunes/RSS?  Do you prefer YouTube?  Any feedback on that would be appreciated.  I’m trying to find out preferences between downloading vs streaming for the most part. Feel free to comment here, or send me a note on twitter or email.

thanks!

UPDATE: I mentioned on the video that there were several things that I did not know.  Most of them have been answered by the great Tim Tripcony who sent me the information below.

 

UPDATE 2: Here is the demo file for this show

beans.zip

Comments from Tim Tripcony:

 

Great video today! I’m hoping I can answer some of the questions you brought up during the demo:

1. Java “purists” would tell you that if your class has A) an argumentless constructor, B) properties exposed via getters and setters, and C) implements Serializable, it’s a bean. With “managed beans”, all that is being “managed” is the variable name and scope. So the class you showed is always a bean, regardless of each of the ways you demo’ed using it, because its own code meets the bean criteria. But you also registered it in faces-config, so Domino “manages” making sure there’s always an instance of that bean named “PersonBean” in the session scope. That’s what makes it managed. It was already a bean because it uses bean conventions (serializable, argumentless constructor, and getters/setters).

2. ignoreRequestParams is ideal for “related” data sources. For instance, if you had an XPages-based blog, and you’re using the standard document data source for blog entries, then you’d want that data source to respect the URL, because then you can use built-in URL parameters like action, documentId, formName, and databaseName, and it’ll know which document to open, whether it’s new, in edit mode or read mode, etc. In contrast, if you had a repeat underneath the entry content to display comments, then your data source for each comment in the repeat *should* set ignoreRequestParams to true. Otherwise, even if you’ve set action to “openDocument” and calculating the documentId based on what row the repeat is rendering, the data will IGNORE those properties, because it will see matching URL parameters and the value of those parameters will override the data source properties. BUT… all of this behavior is the way that the original data sources (document and view) behave. The object data source always ignores the URL, so ignoreRequestParams has no effect, because it always ignores the params. The property just shows up because it’s part of the base interface for all data sources.

3. requestParamPrefix is ideal for “sibling” data sources. What I mean by that is if you have two data sources on a page that are sort of “peers” (as opposed to a parent-response, discussion thread style relationship). For example, suppose you had two documents that you wanted to allow the user to compare side-by-side… if you created one document data source with standard attributes (just var and formName), and a second document data source where requestParamPrefix=”other”, then your URL query string could contain something like documentId=”OU812″&otherdocumentId=”OU813″… So your first data source will be bound to the document whose note ID is OU812, and your second data source will be bound to the document whose note ID is OU813. Object data sources also ignore this property; this only affects document and view data sources.

4. The reason you had to set your data context to compute on page load is because data contexts are automatically associated with the request scope… so if you set it to compute dynamically, then it will create a new one on each request, not just one for each page instance (i.e. view scope). Setting it to compute on page load makes it behave more like a data source than a data context.

5. Your assumption about the syntax of #{sessionScope.ScopeBean.firstName} is correct. All 4 of the scopes are Maps, so when the variable resolver identifies sessionScope as a Map, then the property resolver knows that instead of the usual getPropertyName() / setPropertyName(newValue) syntax, it should call get(“propertyName”) and put(“propertyName”, newValue) instead… but only if it’s the last property in the chain — anything in the middle is always treated as a get. So the whole expression essentially gets translated into sessionScope.get(“ScopeBean”).getFirstName() in read operations, and sessionScope.get(“ScopeBean”).setFirstName() in write operations.