C3UG Agenda for Nov. 17 Meeting


Our meeting scheduled for Thursday November 17 is finalized. The agenda is here. Please register for the event, indicating if you will attend in person or online. This event is available to everyone in the collaboration community regardless of if you are in Canada or not.

We will be live in four cities: Montreal, Toronto, Calgary, and Vancouver. The meeting starts at 1:00 pm Atlantic / 12:00 pm Eastern / 11:00 am Central / 10:00 am Mountain / 9:00 am Pacific.

We will have 6 presentations, on topics including IBM Notes and Domino XPages, IBM Connections and IBM Watson. Please join us.

Posted in Uncategorized

Accepting Abstracts to Present at C3UG

Abstract submission is open for the next Cross Canada Collaboration User Group. The deadline is Friday, October 21. The event is on Thursday, November 17.

We have presentation time slots of 45, 30, and 15 minutes, and are inviting 5 minute lightning talks too. We are looking to cram as much good content into 4 hours as we can. Our preference is to have each speaker be at one of our live locations but we will also consider online presentations too.

We have tracks for Development and Infrastructure, Administration, Customer Case Studies and solutions, and IBM Technology. We expect to have a session that highlights announcements from World of Watson.

You can find more information and the abstract submission form at our web site, powered by Domino and OpenNTF.

Posted in Collaboration

Cross Canada Collaboration User Group

Announcing the revival of what was previously known as the Cross-Country Lotus User Group (CCLUG) with a new name: Cross Canada Collaboration User Group (C3UG).

Work is well underway to plan this event, with more information and announcements to come shortly.  We will be accepting abstracts to present in the coming days.

This event will happen in person and online, so people in remote locations as well as locations around the world will all be welcome to participate.

Save the date: Thursday, November 17, 2016.  We are currently planning for a four hour event, although that may change.  Tentative times are 1:00pm – 4:00pm Eastern, 10:00am – 2:00pm Pacific.

Posted in Uncategorized

Working with Multi-Value Date Fields Using the OpenNTF Domino API

I completed a task yesterday that caused me no small amount of grief and wanted to write down what I learned, primarily for myself so I don’t forget, but also to share with others who may be struggling with the transition to using Java in your XPages applications.  I also want to say thank you to the people who offered support, and probably have them and more correct my mistakes. 🙂

Let me set up the scenario.  This task was an enhancement to an existing application I had built at the end of last year.  It was my first successful foray into using Java for all business logic in an XPages application.  Of note, I used the OpenNTF Domino API.  I built it with Bootstrap too, to support both desktop and iPad users.

The application is a task management system.  A task is assigned.  It is followed up on by an individual, and in it they provide proof that they have completed the task.  The task is then assigned back to a supervisor for review.  The supervisor may verify that the task is complete, may indicate that it is tentatively approved for cases where an on-site inspection is required, or may indicate that the proof is insufficient, and assign the task back to the individual.  For cases where the proof is tentatively accepted, it may then either be verified or the task returned.

The enhancement was to track how long it takes for the supervisor to review the proof.  If it is longer than 2 business days the system will note that the supervisor action was within the target period.  It will also track if the action took longer than 2 business days.

I added a date field to track the date that the proof was supplied and another to track when the action was taken, and a third field to track if the action was taken within the target period.  Given that the supervisor could send the task back the requirement was to track each time there was an exchange.  So that meant two multi-value date fields and a multi-value text field.

Anyone who has worked with multi-value Notes date fields and java before will be likely be smiling by now.  Little old me was walking into a blizzard without adequate supplies.  For those of you who can make LotusScript do magical things you can already craft a solution in your head, as did I.  When proof is supplied, grab the first date field, append a value to the field, and save.  When an action is taken, grab the second date field, append a value, grab the text field, calculate and append a value, and save.  We will ignore the fact that in the case of a tentatively accepted proof we don’t have to take the second step when the proof is ultimately verified.

Rather than talk about my struggles I will talk about the solution, other than to say that a Date object in Java is not the same as a DateTime object in Notes, and a Date object in Java is deprecated meaning you should really use a Calendar object, except that it’s okay to use a Date in Java when working in Notes.

The call to use is document.getItemValueDateTimeArray.  Unfortunately, this call returns a Vector<Base<?>> object.  People who have been using Java for a while will be able to explain what this is and why it makes sense.  To a newbie it caused no shortage of pain.  In very simple terms, what is returned is a list of values, as objects.  Those object values happen to be Notes DateTime objects.  The trick is that the compiler doesn’t know that they are DateTime objects.  Naturally the next step is to turn them into DateTime objects, but as I said above we then need to turn them into Java Date objects.

There is some code missing before this step, but this explains what I’ve just said above (it’s the step that reads the values from the field when we first open the document):

    Vector<Base<?>> tempProofSupplied = new Vector<Base<?>>();
    Vector<Date> tempPs = new Vector<Date>();
    tempProofSupplied = docAction.getItemValueDateTimeArray("ProofSupplied");
    if (tempProofSupplied != null) {
        for (Object obj : tempProofSupplied) {
            if (obj != null) {
                DateTime dtPs = (DateTime) obj;

After I figured out the part above, the rest of the code pretty much fell into place.  For example, to add a new date to the list:

    public void trackProofSupplied(Date dateProofSupplied) {
        try {
            if (null == this.proofSupplied) {
                this.proofSupplied = new Vector<Date>();
        } catch (Exception e) {
            System.out.println(" ERROR ! action.trackProofSupplied: " + e.toString());

I also want to say a big Thank You to Frank Van Der Linden who posted a snippet of Java Date utilities to OpenNTF, including one very useful function: calculateBusinessDays.  Saved me having to figure that one out myself.  Fair warning: it includes Calendar objects that I hadn’t used in the code above.  Calendars are really useful by the way, and worth investing the time to understand if you haven’t yet.

Posted in Uncategorized

What You Do When No One is Watching

This isn’t a post about technology.  It’s a quick story about a wonderful customer service experience I had yesterday and a good lesson for anyone in business.

My daughter has been trying to sell her car for the past few months.  I haven’t been involved to any great degree, but yesterday she was meeting a potential buyer who contacted her via Craigslist and she wanted me to join her as she wasn’t sure who she was meeting.  It turns out the buyer was a young man, and after the test drive he said he wanted to buy the car.  They agreed on the price, and he asked if he could pay and take the car home right away.  It was close to 5:00 pm on a Sunday.  He had to get the money from his bank and then we had to find an insurance agent that was open for him to get the insurance.  Believe it or not, we found one close by that was open until 6:00 pm.

He went off to get the money and we agreed to meet him at the insurance broker.  When we arrived we found out that the bank branch he went to was closed and he asked if he could do an online transfer instead.  We agreed.  It was approximately 5:30 pm by this time.  The online transfer was sent to my daughter via e-mail to confirm.  We waited for her to receive it.

The insurance broker office had 2 people in front of us waiting for service, and the man behind the counter told us that we would have a short wait.  In the time that it took for him to help the people in front of us the e-transfer still hadn’t showed up.  Another person had come in to the office, so we let him go ahead of us.  Now it was 5:55 pm, 5 minutes before closing.  While he was serving this new customer I overheard the person from the insurance office say that this was his last day on the job.  I was worried that the transfer wouldn’t happen and that he would ask us to leave.  I think we were all nervous.  I know the young man wanting the purchase the car was because he had an hour drive to get home and he wouldn’t want to have to come back again.

The last customer finished his business, and by then the man at the insurance office had started to help with our transaction, but I let him know that the financial part needed to happen before any insurance transfer, and that we were still waiting for the e-transfer notification.  Thinking we would be asked to come back tomorrow, he instead responded saying that it wouldn’t be a problem since he had lots more work to do still and that he would get our paperwork ready but then catch up on his additional work while we waited.

It took another half hour before the transfer finally happened.  6:30 pm!  In the mean time he offered his restroom for anyone that needed it.  He helped the young man purchasing the car first, and then helped my daughter with her paperwork.  We were very grateful for his patience and his help.  He told us she was his last customer, and that he appreciated that she was cheerful and understanding.  Sounds like he may have had a difficult customer or two to deal with that day.  We thanked him again and were on our way.  What a wonderful experience for my daughter.

I like the odd inspirational saying, and saw one on the wall as we were being helped by this person.  Character: What you do when no one is watching.

I would like to again thank Roger.  It was his last day.  He wasn’t getting paid after the store closed (I heard him say so).  He stayed open late just for us, and he did so while none of his co-workers or the managers of the store were there.

Posted in Uncategorized

IBM Connect Session: Why We Selected GoodReader

As we work through the details behind our presentation at IBM Connect 2016 this post is about our choice to select GoodReader as the app for our users. As we detailed in the presentation, our challenge was to replace three full large binders of paper with an app on a tablet. The material in the binders was being made available in advance of a series of strategy planning meetings that included 18 people over 23 days. The expectation is that all of the participants would have the ability to review the material and make notes to be able to speak to the content in the meetings. Did we mention this were senior managers and executives?

Our Change Agent, Terry, came to us with the request to figure out how to put the material on his iPad and give him the ability to annotate it with his notes using a stylus and eliminate all that paper. It also needed to be secure. He uses an app called Notes Plus and asked us to start there.

By this time I had an iPad so I purchased the app and started to learn how to use it. Notes Plus is a very useful tool that I am only scratching the surface on how to use. I use it primarily to scribble my notes and comments when in meetings. You start with a blank canvas and use your stylus to write notes. Pretty simple. It can also edit PDF files, so it seemed like a good fit for what we wanted. The trick was getting the material into the app. For that we looked to use the Connections app to transfer the files to the iPad.

The Connections app is great, and we have several users who are using it regularly, and a larger number of people using it off and on. For my test I built a Community and put some sample PDF files into it. I synched those files to my iPad using the app and then set about trying to figure out how to open those files in the Notes Plus app. It’s worth stating at this point that the Connections app doesn’t provide the ability to annotate files, so in terms of meeting our needs, despite the security in the app, it wasn’t going to be able to do what we needed it to.

While I was able to select a file in the Connections app and go through the process of opening that file in the Notes Plus app, editing the file, saving it and getting back to it, and keeping everything secure was going to be a challenge in terms of user experience. We wanted to give our users a seamless experience or it wasn’t going to work. I’ve already posted about the challenge we faced with the negative perception of Connections, so for this to work it needed to be easy and intuitive. So our search continued.

The next thing that happened was that I found this blog post from Luis Benitez. It pointed to the exact solution we were looking for. It specifically named GoodReader as an app that can be used with Connections to synch files, annotate them, and keep everything secure. It required that we install FileJockey on our Connections server to enable the WebDav protocol that GoodReader uses as one method to synch files, and after that we were off to the races.

My next posts will include how we set up GoodReader, including its fabulous security, and how we set up FileJockey.

Tagged with: , , ,
Posted in Collaboration

IBM Connect 2016: Session Slides

The slides for the session I presented at IBM Connect 2016 with my colleague Delores Beier from A&W Food Services of Canada have been posted.

IBM Connect 2016 1480 Win, Win, Win: Changing Attitudes, Adopting Social and Going Green – A Customer Solution

Thank you to everyone who attended our session.  The room was close to full, and we really appreciate everyone who took the time to join us in an early-morning time slot.  Thank you also to John Jardin for helping with getting our iPad connected to the A/V output.

Watch this blog for more details on the solution we discussed, including the technical details of hooking IBM Connections up with the GoodReader iPad app.

Posted in Uncategorized