Social Connections VI in Prague

featured1

This week starts in the beautiful town Prague with Social Connections VI. I met great people and first of all i want to thank the organisation team for this great event.

At the end we made the traditional image with all attendees.

Foto © 2014 by Oli Heinz

Foto ©2014 by Oli Heinz

I enjoyed two very delicious dinners and had great discussions around IBM ICS, met old and new friends. After years of tweets, forum entries and virtual talks i finally met Martin in person and had an entertaining evening with him and Sjaak.

Foto © 2014 by Oli Heinz

Foto ©2014 by Oli Heinz

Big thanks to Oliver Heinz who made fantastic photos of prague, us and around the event. All pictures in this blog posts are made by him.

My session “Script it!

This time i made a session without support of Klaus or Sharon, but i was happy with the result and i hope that some attendees will help to get the IBMCNX Community scripts more complete.

"Foto by Oli Heinz (http://twitter.com/oliheinz)"

Foto ©2014 by Oli Heinz

And for everyone the offer again, you see the different kinds of persistent Skype group chats, if you want to join, send me a short message.

During this week we heared several announcements:

I see forward to Social Connections VII and hope to meet lots of you there!

New version of “Administration Scripts for WebSphere”

As preparation for Social Connections VI in Prague next week i redesigned the “Administration Scripts for IBM Websphere“.

Some highlights:

  • all scripts are moved to a subfolder with DMGR/bin (folder name: ibmcnx)
  • tested in multinode environments
  • added some classes everybody can use for his own scripts
  • adding policies to libraries (personal and communities) are using search now

New scripts:

  • documentation of all jvm settings of each application server
  • create a file with all documentation in one step
  • create cluster members for additional nodes

Sharon created a document with the content of all of our presentations and collected several tipps all around connections and community scripts. She will share this next time. We started to share parts of this document and more documentations (installation, usage) for scripts and IBM Connections on:

Scripting101.org

The new version can be downloaded from:

Search fails with the error CLFRW0060E: Input-output exception

29-04-2014 13-01-15

IBM released a tech document on friday with title: Search fails with the error CLFRW0060E: Input-output exception.

This document solves one of my problems i had in a demo environment since two weeks. I traced the environment, checked j2ee roles, reinstalled CR3 and 4, redeployed search and activities, but i always got an error, when the search wants to access the activities seed list.

So what happened? I want to show the /search/serverStatus page in a course and for this i want to remove all warnings and errors. When you don’t set SEARCH_SEEDLIST_TIMEOUT, you get a warning, that the variable is not set.

29-04-2014 13-01-15

So i had set this to 150 and checked the serverStatus page and all was green. So i thought everything is ok and didn’t check the documentation to this. After some hours the search was broken, with the error mentioned above. When i checked the Seedlist URL with the browser everything was ok, when the search wants to access it i got the Input-output exception.

When you read the tech document, you see that SEARCH_SEEDLIST_TIMEOUT is needed in miliseconds! So i had set it to 0.15 seconds and this is too less for activities, all other applications were ok. After reading the document i remembered setting this value and increased it to 15000 and voila the search builds perfectly and all errors are gone.

I learned again that i should read the documentation and that search/serverStatus does not validate the variables, it only checks that that the variable is present. Maybe this should be made as a feature request?

In the trace you see login data and that search can’t access the url, but not that the request timed out.

Customizing IBM Connections Profiles – Add custom field to searchResults

Adding a custom field to IBM Connections Profiles is great documented in “SHOW301: Make Your IBM® Connections Deployment Your Own: Customize It!” the Connect 2014 session of Wannes Rams and Klaus Bild. Thanks to them for this great collection of customizing tipps.

In my case the bundle name is “stoeps” and the custom field i want to add is “twitterId”.

lotusconnections-config.xml

<resources>
    <!-- Custom strings for field labels --> 
    <widgetBundle name="local.stoeps.profiles.strings.uiLabels" prefix="stoeps"/>
</resources>

local.stoeps.profiles.strings.uilabels.properties

# extension property field labels
label.stoeps.twitterId=Twitter Id:

profiles-types.xml

<property>
   <!-- Custom field for Twitter ID -->
   <ref>twitterId</ref>
   <updatability>readwrite</updatability>
   <hidden>false</hidden>
</property>  

profiles-config.xml

Checkout profiles-config.xml and change following points:

<profileDataModels>
    <profileExtensionAttributes>
    ...
        <simpleAttribute extensionId="twitterId" length="180 />
    </profileExtensionAttributes>
</profileDataModels>

Uncomment the extensions templateData:

<template name="businessCardInfo">
  <templateDataModel>
        <!--  include if you render workLocation, organization, department information -->
        <templateData>codes</templateData>
        <!--  include if any only if you render profile extension fields in the template -->
        <templateData>extensions</templateData><!-- activated for twitterId in searchResult -->
        <!--  include if you render secretary name or email in the template -->
        <!--   <templateData>secretary</templateData> -->
        <!--  include if you render manager name or email in the template -->
        <!--  <templateData>manager</templateData> -->  
        <!--  include if you render information dependent upon two users being connected -->
        <!--  <templateData>connection</templateData> -->               
  </templateDataModel>
</template>
<template name="searchResults">
  <templateDataModel>
        <!--  include if you render workLocation, organization, department information -->
        <templateData>codes</templateData>
        <!--  include if any only if you render profile extension fields in the template -->
        <templateData>extensions</templateData><!-- activated for twitterId in searchResult -->
        <!--  include if you render secretary name or email in the template -->
        <!--   <templateData>secretary</templateData> -->
        <!--  include if you render manager name or email in the template -->
        <!--  <templateData>manager</templateData> -->                  
  </templateDataModel>            
</template>
...
<searchLayout>
...     
<!-- custom field in searchResult -->
<extensionAttribute showLabel="false" labelKey="label.stoeps.twitterId" bundleIdRef="stoeps" extensionIdRef="twitterId"/>
</searchLayout>

Now you must add following line to :

profilesEdit.ftl

I added following line within <@util.renderSection sectionLabel=”contactInformation”>:

<@util.renderFormControl ref="twitterId" singleColumnLayout=false nlsBundle="stoeps" nlsKey="label.stoeps.twitterId"/>

profilesDetails.ftl

<#-- Customize start -->
<#-- Adding a field twitter id -->
<@util.renderProperty ref="twitterId" nlsKey="label.stoeps.twitterId" nlsBundle="stoeps" hideIfEmpty=true ;  ref, dataId, dataKey, nlsKey, nlsBundle>
    <@util.renderValue ref=ref renderAs="twitter" />            
        <br/>
</@util.renderProperty>     

<#– Customize end –>

searchResults.ftl

I added following code above the renderProperty of jobResp:

<@util.renderProperty ref="twitterId" nlsKey="label.stoeps.twitterId" nlsBundle="stoeps" hideIfEmpty=true ;  ref, dataId, dataKey, nlsKey, nlsBundle>        
    <div>
         <@util.renderValue ref=ref renderAs="twitter"/>
    </strong>   
    </div>
</@util.renderProperty> 

renderAs comes from commonUtil.ftl, to format a URL to the Twitter Homepage.

commonUtil.ftl

...
<#elseif renderAs = "email">
    <a href="mailto:${value}">${value}</a>
<#-- customize start -->
<#elseif renderAs = "twitter">
    <#-- special rendering for twitter id -->
    <a href="http://twitter.com/${value}" target="_new">@${value}</a>       
<#-- customize end -->
<#elseif renderAs = "blogUrl">
...

Result:

search result

Selection_20140415_11:28:28_001

Profile

Selection_20140415_11:37:41_001