Tuesday, August 9, 2016

IBM Connections Docs 2.0 CR1 upgrade failure. Here´s the fix.

I attempted my first Docs 2.0 CR1 upgrade today, on a fresh Docs installation.

It failed.

I got the same error as Roberto Boccadoro did as described here:

Roberto, thanks for this solution.
Although I ran into a new issue in step 4 of your solution.

I was not able to run the command:
upgrade_node.bat -installroot D:\IBM\ConnectionsDocs\Conversion -symcount 8

This is the error I got:

Traceback (most recent call last):  File "upgrade_node.py", line 5, in
    from config import CONFIG  File "D:\temp\docs_remote_installer\installer\config.py", line 46, in
    CONFIG=Config()  File "D:\temp\docs_remote_installer\installer\config.py", line 38, in __init__    self.get_input()  File "D:\temp\docs_remote_installer\installer\config.py", line 17, in get_input    if(not os.path.exists(options.install_root)):  File "d:\Python27\lib\genericpath.py", line 18, in exists    os.stat(path)TypeError: coercing to Unicode: need string or buffer, NoneType found

I then opened up the "upgrade_node.bat" file, and I noticed that the only thing it does is run python on the "upgrade_node.py" script.

After searching the net, I noticed a comment about the fact that python does not accept arguments unless they are defined with 2 hyphens, aka "--"

So I ran this command, which has 2 hyphens on the "installroot" and the "symcount" argument.

python upgrade_node.py --installroot d:\IBM\ConnectionsDocs\Conversion --symcount 8

This worked for me and Step 4 of Robertos guide worked.

Monday, August 1, 2016

Using TDI/SDI to populate Profile Tags in IBM Connections 5.

I have created this simple AssemblyLine to automatically populate tags on profiles in IBM Connections.

This one works in IBM Connections 5.0, but haven´t tested it on version 5.5 yet.

The AL does the following:

  1. The iterator is a CSV file, with the following structure:


    For example:



    The location of the CSV file is:

  2. A JDBC connector in Lookup mode, which connects to the PEOPLEDB table named EMPINST.EMPLOYEE.

    The Link Criteria is the mailaddress from the CSV file. If this one matches with the PROF_EMAIL_LOWER field in the SQL Table, one work attribute is fetched from the table.
    This is the PROF_KEY attribute.
  3. Then a TAG_ID is generated using this random UUID4 script:
  4. Then I write 4 fields into the EMPINST.PEOPLE_TAG table in the PEOPLEDB database.

    -PROF_SOURCE_KEY (this is normally the prof_key value of the user who tags)
    -PROF_TARGET_KEY (the prof_key value of the person beeing tagged)
    -PROF_TAG_ID (the value generated in step 3 above)
    -PROF_TAG (the tag-value itself, from the CSV file)
There are 2 other fields, which are disabled in the "write_entry" connector. The fields are "PROF_TYPE" and "TENANT_KEY".
Those two fields auto-populate in the DB. This means that the AL does not have to worry about them.

This AL is easy to customize to fit your needs. Switch out the iterator with an ldap connector, perhaps? :-)


Here´s the iterator:

Here´s the side-lookup I do into the EMPLOYEE table, to fetch the PROF_KEY value:

IF branch that checks if the PROF_KEY actually was fetched:

Script where I generate the UUID4 value for the PROF_TAG_ID field:

Here´s the JDBC Connector that writes the tag to the profile.
The author of the tag is the user itself, which means that when TDI writes this tag, it says that I, myself created the tag. That´s where the field "PROF_SOURCE_KEY" and "PROF_TARGET_KEY" comes into play. The value of the fields are equal.

As you can see, the connector is in "AddOnly" mode, and not in "Update" mode. I tested it, and running the same AL on the same csv file, where all the same tags are attempted inserted once more, only produces a small error message. I had no interest in running it in "Update" mode, checking to see if the tag already exists, and tagged by the user itself. This way the user gets a tag, by him- /herself, only.

Before running the Assembly line:

After running the AL:

The Assembly Line can be downloaded here:
Import it into your Connections tdisol project and test it out :-)

Hope this was useful to you, and yes, keep me in mind when the IBM Champions nomination is due :-D

Tuesday, April 26, 2016

Kudos Boards - error message "Unable to retrieve Members"

After installing Kudos Boards, I had this error message:

I went over all the config parameters, and encountered that I had the wrong path to the "sbt.properties" file.

So if you get this error, check the path and correct it if it´s wrong.

The documentation says that the file should be on the path:

But my data directory lies directly on "/opt/IBM/data" so I had to correct the environment variable to:

Monday, April 11, 2016

Renaming an IBM Connections hostname. Redirecting IHS/Apache

Ok, I´ve done some renaming of IBM Connections servers lately.

Basically the renaming consists of
  • Changing the Lotus-ConnectionsConfig.xml file.
  • Changing the LtpaToken Domain name
  • Changing the SSL cert in iKeyman
  • Changing IBM HTTP Server config, (ssl config and hostname changes)
  • Running wsadmin commands to change url that´s stored in various conten, like Blogs and StatusUpdates (See "update" at the end of this blogentry).
 What I want to focus on here, are the Apache Redirect rules which I like to implement, in order for easing the single users day.

If users already have bookmarked IBM Connections stuff in their local browser, and access this bookmark a lot. They would be upset that suddenly, one day, the bookmark does not work. The users don´t normally read the Admin emails about major system changes, so this is a way of simplifying things for them. (and you, hehe)

So. When you have done all the renaming steps that are required, and you have a working system up and running, on the new host names, then this is the httpd.conf redirection I use.

Redirect rules in Apache:
I have not tested this in IHS before, but I guess it should work there as well. I did this one in Apache the last time, and this is the config this blog entry is based on.

The way I do this, is that I create two new VirtualHosts in addition to the two that was already in the httpd.conf config file. (one for port 80 and one for 443, basic stuff)
The VirtualHost names has the same names as the ones that already exists, namely "*:80" and "*.443".
To make sure that Apache don´t create error messages about "this VirtualHost already exists" and so on, the following 2 lines also has to exist in the httpd.conf:
NameVirtualHost *:80
NameVirtualHost *:443
Just put the two lines somewhere above all of your VirtualHost config, but not inside your VirtualHost config.

And then, lets say the old hostname was "CNXOLD.item.no" and the new hostname is "CNXNEW.item.no"
I added this brand new VirtualHost config in the httpd.conf file:

    ServerName CNXOLD.item.no
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

    ServerName CNXOLD.item.no
    UseCanonicalName On
    RewriteEngine on
    RewriteRule   ^/$  /homepage  [NE,R]

    RewriteRule ^/blogs/(.*) https://CNXNEW.item.no/blogs/$1 [R,L]
    RewriteRule ^/activities/(.*) https://CNXNEW.item.no/activities/$1 [R,L]
    RewriteRule ^/communities/(.*) https://CNXNEW.item.no/communities/$1 [R,L]
    RewriteRule ^/dogear/(.*) https://CNXNEW.item.no/dogear/$1 [R,L]
    RewriteRule ^/files/(.*) https://CNXNEW.item.no/files/$1 [R,L]
    RewriteRule ^/forums/(.*) https://CNXNEW.item.no/forums/$1 [R,L]
    RewriteRule ^/homepage/(.*) https://CNXNEW.item.no/homepage/$1 [R,L]
    RewriteRule ^/mobile/(.*) https://CNXNEW.item.no/mobile/$1 [R,L]
    RewriteRule ^/profiles/(.*) https://CNXNEW.item.no/profiles/$1 [R,L]
    RewriteRule ^/wikis/(.*) https://CNXNEW.item.no/wikis/$1 [R,L]

    Plus some basic SSL stuff here :-)


So, in this way, browser requests towards "cnxnew.item.no" behaves normally, because you already have the VirtualHost config in place for this. This above mentioned addittional VirtualHost config, will redirect any user over to the new server, and also maintaining the url entirely. The old bookmark "https://cnxold.item.no/profiles/blablabla" will redirect the user to the url "https//cnxnew.item.no/profiles/blablabla".

The fun part was the added surprise of also learning that the Mobile iOS App also handeled the redirection automatically. The Config of the app towards the old server will automatically store the new hostname.

Sadly, the Desktop Plugin did not. So this one has to be manually fixed regarding the hostname.

By request, here´s the wsadmin commands:
I mentioned the wsadmin commands for changing urls in Blog-entries and status-updates.
Here´s the link for this:
Blogs: https://www.ibm.com/support/knowledgecenter/SSYGQH_5.0.0/admin/admin/t_admin_blogs_replace_urls.dita

Status Updates: As of right now, there´s no wsadmin command for changing url´s that´s been pasted into status updates. If this is important to change, you need to go directly into the database and change there.
I got this confirmed by Christoph Stoettner today, as I asked him about it.
Since status updates has a short lifespan (by default 45 days), both he and I tend to just ignore changing the url´s that exists inside of status-updates and just do the ones for Blogs.

Friday, November 27, 2015

My user experience with IBM Docs collaboration - blew me away! Docs Rocks!

I thought I knew what IBM Docs was..... I most certainly did not!

I mean, don´t get me wrong, I knew what Docs can do and what options you have with integration with Connections Files, but what I experienced yesterday, it was just euphoric !!
A little background about IBM Docs, so that we are all on the same page here; With IBM Docs you can create and share documents over the Web. You can collaborate with your colleagues, update and edit "live" shared documents, presentations or spreadsheets. IBM Docs is 100% integrated into IBM Connections where all editable files are just a click away from being opened in IBM Docs.

You can access an editor similar to Word, Powerpoint or Excel, where you among other things can format numbers, text, and add images and shapes.

You can choose whether the documents should be private or shared. If you share it, you can choose if everyone should have access to them, or just a selected few.

If you set the document to be private, it´s only accessible and viewable to you. You can also choose whether or not the persons you are sharing the document with, has access to edit it, add comments or simply only have read-only access to it. The document is automatically saved when you write/edit it, so that you don´t have to worry about this yourself. When you're finished, publish it into your Connections Files archive, publicly or privately.

The features of IBM Docs probably covers 95% of the need users have. Imagine that 95% of the company uses this and the remaining 5% have a need that indicates that full version of office package is installed. Thats money-saving for ya!
But now, over to my eureka moment:
What I knew about Docs, and what I've tested previously, is to view files located in IBM Connections, and maybe edit some of them, all in a browser window. Simple, faster, you do not have to download the file first, edit it locally and then uploading a new version, as it is in a default IBM Connections out-of-the-box installation.
Yesterday evening, I sat at home with my colleagues Svein, Runar, and Mathis, who where sitting in their respected houses as well, and edited a presentation to one of our customers, AT THE SAME TIME! And the thing that was euphoric, was the short amount of time it took to make a presentation in which 4 people contributed.
How did such a mock-up of a presentation come together earlier? Well, one person did a little part, sent the file to some other guy, who then did some changes, back and forth, back and forth and then the whole presentation was probably glued together at the end. Perhaps also with face-2-face meeting to finalize the presentation.

Yesterday, I sat and inserted the images. Meanwhile I saw that different colors bounced around on the other slides, up and down, blue, yellow and green. Docs shows each person that´s editing the document with different color codes. So when I was on slide 9, I saw for instance that Mathis clicked on slide 10. When I clicked on slide 10 simultaneously, I could see that the element he edited there and then, was locked for me, but I could see what changes he did "on-the-fly", letter by letter. When he was finished, I could click on the item and "take over" the editing of it.
At the same time I saw some blue and green colors on the other slides, bounce up and down, indicating activity of the others who edited simultaneously.

When I made changes, I could comment on the change, and actually bring up a discussion on the change; "Is this a better approach?" with answers and responses from the other participants.
And when everyone was happy, the only thing remaining was to publish the result.

The experience and feeling I am left with is just completely awesome! The time saved for us on simultaneously editing the presentation yesterday evening, is not known, but that´s a lot of hours! (... and money)

Cheers from a happy Robert.