Social Connections VI Prague - An introduction to ibm connections as an appdev platform


Published on

"There’s an API for that! Why and how to build on the IBM Connections PLATFORM " presentation from Social Connections VI in Prague on 16-17 June 2014.

Published in: Software, Technology, Travel

Social Connections VI Prague - An introduction to ibm connections as an appdev platform

  1. 1. There’s  an  API  for  that!  Why  and   how  to  build  on  the  IBM   Connec=ons  PLATFORM     Mikkel  Flindt  Heisterberg   OnTime®  by  IntraVision  
  2. 2. Agenda   •  Brief  intro  to  IBM  Connec=ons  as  a  PLATFORM   •  Briefer  intro  to  widgets  for  IBM  Connec=ons   •  Boxer  brief  intro  to  developing  for  the  Ac=vity   Stream   •  Ultra  brief  intro  to  event  handlers   •  Running  short  on  =me  and  taking  ques=ons  in   the  hall   Mikkel  Flindt  Heisterberg     TwiNer:  @lekkim   E-­‐mail:   hNp://   hNp://  
  3. 3. There’s  more  beneath  the  surface  
  4. 4. The  IBM  Connec=ons  plaVorm  
  5. 5. Widgets  
  6. 6. Widgets  –  descriptor   <iw:iwidget id="com.example.ExampleWidget" supportedModes="view fullpage” mode="view” lang="en" xmlns:iw="" iScope="com.example.ExampleWidget"> <iw:resource uri="" /> <iw:resource uri="" /> <iw:content mode="view"> <![CDATA[ <div id="_IWID_widgetContent">Loading...</div> ]]> </iw:content> <iw:content mode="fullpage"> <![CDATA[ <div id="_IWID_widgetContent">Loading...</div> ]]> </iw:content> </iw:iwidget>
  7. 7. Widgets  –  iScope   dojo.provide("com.example.ExampleWidget"); dojo.declare("com.example.ExampleWidget", null, { constructor: function() {}, onLoad: function() {}, onView: function() {}, onEdit: function() {}, onFullpage: function() {}, onSearch: function() {} });
  8. 8. Widgets  –  declara=on   Declara=vely  configured  using  widgets-­‐config.xml     <widgetDef defId="com.example.ExampleWidget” url="/ExampleWidget.xml" loginRequired="true” showInPallette=”true”> <itemSet> <item name="resourceId" value="{resourceId}" /> <item name="profilesCtx" value="{profilesSvcRef}" /> <item name="myProp" value="Abc123" /> </itemSet> </widgetDef>
  9. 9. Widgets  –  iContext   •  An  iContext  instance  is  set  into  the  iScope  instance   •  The  iContext  provides  access  to  the  widget  markup  (e.g.  root   element),  I/O  related  func=ons  (i.e.  URL  rewri=ng),  widget   aNributes  etc.   •  The  iContext  is  easily  accessed  from  the  iScope  class  using   this.iContext •  Important  func=ons  include: –  iContext.getRootElement() : DOM Element –  iContext.getElementById(id:string) : DOM Element –  iContext.getiWidgetAttributes() : ItemSet –  iContext.getUserProfile() : ItemSet – : string –  iContext.iEvents.fireEvent(name:string, type:string, payload:object)
  10. 10. Ac=vity  Stream   •  The  following  is  based  on  my  highly  acclaimed   (cough,  cough)  presenta=on  on  the  Ac=vity   Stream   •  Much  more  detail  and  many  examples  there   •  See  hNp://   Mikkel  Flindt  Heisterberg     TwiNer:  @lekkim   E-­‐mail:   hNp://   hNp://  
  11. 11. Ac=vity  Stream   •  IS   – River  of  news  –  it’s  like  water  flowing  by  you   – No=fica=ons  about  ”stuff”  happening  in  (other)   systems  –  we  refer  to  these  no=fica=ons  as   entries   •  ISN’T   – A  new  inbox  –  doesn’t  replace  email   – A  perpeptual  data  store  –  entries  are  deleted   based  on  a  server  defined  purge  interval  (default   is  30  days)  unless  saved  or  ac<onable  
  12. 12. Ac=vity  Stream   •  In  my  opinion  it  makes  most  sense  to  not  consider   the  ac=vity  stream  as  one  single  stream   •  Instead  think  that   – Each  user  has  his/her  own  (@me)   – There  is  a  public  stream  (@public)   – A  community  may  have  a  stream  if  the  widget  has   been  added  by  a  community  owner  –  if  there’s  no   stream  for  a  community  pos=ng  to  it  will  return  a   ”403  Forbidden”  
  13. 13. Ac=vity  Stream   •  You  will  mainly  use  the  POST  and  PUT  methods  to  send  JSON  data  (Content-­‐Type:   applica=on/json)  to  the  API   •  JSON  is  super  simple  key/value  data  format.  It  has  simple  datatypes  (strings,   numbers,  booleans),  objects  and  arrays   { ”email”: ””, ”niceGuy”: true, ”age”: 37, ”name”: { ”first”: ”Mikkel Flindt”, ”last”: ” Heisterberg” }, ”Connectospheres”: [6, 7, 8, 9, 10, 11, 12, 13, 14] }
  14. 14. Ac=vity  Stream   { "actor": {"id": "@me"}, "verb": "post", "title": "Some entry title", "updated": "2013-05-17T12:00:00.000Z", "object": { "title": "Some object title", "objectType": "note", "id": "1234567890-1234567890-1234567890" } }
  15. 15. Ac=vity  Stream   hNps://<host>/connec=ons/opensocial/<auth>/rest/ac=vitystreams   /<user  ID>/<group  ID>/<applica<on  ID>/<ac<vity  ID>   Component   Meaning   <auth>   (op<onal)  If  using  form  based  authen=ca=on  leave  this  component  out.  Otherwise  op=ons   are  anonymos,  basic,    oauth.   <user  ID>   The  user  whose  stream  you’re  addressing  –  use  @me  for  current  users  stream,  @public  for   public  stream  or  a  community  ID  for  the  stream  in  a  community.   <group  ID>   The  group  of  entries  you’re  addressing  –  use  @all  for  all  posts  or  op=ons  for  special   meaning  such  as  @saved,  @ac<ons,  @men<ons.  Refer  for  InfoCenter  and  resources  slide   for  more.     <applica=on  ID>   When  retrieving  entries  this  refers  to  the  applica=on  (or  ”generator”)  that  created  the   entry.  All  the  IBM  Connec=ons  app  names  can  be  used  (profiles,  blogs,  wikis  etc.)  plus   custom  ones  (e.g.  on<megc).  @all  used  for  all  applica=ons.   <ac=vity  ID>   Used  to  reference  a  specific  event  e.g.  for  upda=ng  saved  status.  
  16. 16. Ac=vity  Stream   1.  /activitystreams/@me/@all List my (current users) entries 2.  /activitystreams/@public/@all List public stream entries 3.  /activitystreams/@me/@actions List my actionable events 4.  /activitystreams/@me/@saved/blogs List my saved events from blogs 5.  /@me/@all/@all/… Work with entry from my stream based on ID * All URLs above start with https://<host>/connections/opensocial/<auth>/rest Also used when creating new entries (e.g. POSTing)
  17. 17. Other  Programming  Interfaces   •  SPIs  are  lower-­‐level  programming  interfaces  which  may  be  subject  to   modifica<on  from  release  to  release.     •  Event  SPI   –  The  IBM  Connec=ons  Event  SPI  allows  third  par=es  to  consume  event  data  generated  by   IBM  Connec=ons.   •  Seedlist  SPI   –  Use  the  Seedlist  service  provider  interface  (SPI)  provided  with  IBM  Connec=ons  to   integrate  your  search  engine  with  IBM  Connec=ons  content.   •  Service  SPI   –  You  can  use  the  IBM  Connec=ons  Service  SPI  to  learn  about  the  applica=ons  running  in   your  IBM  Connec=ons  deployment.   •  User  SPI   –  You  can  use  the  IBM  Connec=ons  User  SPIs  to  access  informa=on  about  the  users  in   your  IBM  Connec=ons  deployment.  
  18. 18. Event  Handlers  –  declara=on   Declara=vely  configured  using  events-­‐config.xml     <postHandler enabled=”true" invoke="ASYNC" name=”MyEventHandler” class="com.example.MyEventHandler"> <subscriptions> <subscription source="*" type="*" eventName="*"/> <!-- <subscription source=”PROFILES" type="*" eventName=”profiles.updated"/> <subscription source=”PROFILES" type="*" eventName=”"/> --> </subscriptions> </postHandler>
  19. 19. Event  Handlers  –  implementa=on   import public class MyEventHandler implements EventHandler { public void init() throws EventHandlerInitException {} public void destroy() {} public void handleEvent(Event event) throws EventHandlerException { String eventName = event.getName(); // event name Person actor = event.getActor(); // person that triggered event // look at the event name if (event.getName().equals("")) { // a profile photo was updated this.doEventProfilesPhotoUpdated(event); } else if (event.getName().equals("profiles.updated")) { // a profile was updated this.doEventProfilesUpdated(event); } } }
  20. 20. Event  Handlers  –  summary   •  Make  event  handlers  asynchroneous   •  What  happens  if  your  event  handler  fail?   •  What  happens  if  the  recipient  of  the  event   (3rd  party  API)  fail?   •  Be  defensive  –  consider  what  happens  if   events  are  lost  
  21. 21. Thank  you   •  Presenta=ons  on  –  this  one  is   coming   •  Contact  me  –  ojen  =mes  more  than  willing  to   help  –  I’ll  let  you  know  when  it’s  a  project  J   Mikkel  Flindt  Heisterberg     TwiNer:  @lekkim   E-­‐mail:   hNp://   hNp://