SlideShare une entreprise Scribd logo
1  sur  22
Télécharger pour lire hors ligne
There’s	
  an	
  API	
  for	
  that!	
  Why	
  and	
  
how	
  to	
  build	
  on	
  the	
  IBM	
  
Connec=ons	
  PLATFORM	
  
	
  
Mikkel	
  Flindt	
  Heisterberg	
  
OnTime®	
  by	
  IntraVision	
  
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:	
  mS@intravision.dk	
  
hNp://lekkimworld.com	
  
hNp://slideshare.net/lekkim	
  
There’s	
  more	
  beneath	
  the	
  surface	
  
The	
  IBM	
  Connec=ons	
  plaVorm	
  
Widgets	
  
Widgets	
  –	
  descriptor	
  
<iw:iwidget id="com.example.ExampleWidget" supportedModes="view fullpage”
mode="view” lang="en" xmlns:iw="http://www.ibm.com/xmlns/prod/iWidget"
iScope="com.example.ExampleWidget">
<iw:resource uri="http://www.example.com/ExampleWidget.js" />
<iw:resource uri="http://www.example.com/ExampleWidget.css" />
<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>
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() {}
});
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>
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
–  iContext.io.rewriteURI(uri:string) : string
–  iContext.iEvents.fireEvent(name:string, type:string,
payload:object)
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://slideshare.net/lekkim	
  
Mikkel	
  Flindt	
  Heisterberg	
  
	
  
TwiNer:	
  @lekkim	
  
E-­‐mail:	
  mS@intravision.dk	
  
hNp://lekkimworld.com	
  
hNp://slideshare.net/lekkim	
  
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	
  
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”	
  
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”: ”mh@intravision.dk”,
”niceGuy”: true,
”age”: 37,
”name”: {
”first”: ”Mikkel Flindt”, ”last”: ” Heisterberg”
},
”Connectospheres”: [6, 7, 8, 9, 10, 11, 12, 13, 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"
}
}
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.	
  
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/
urn:lsid:lconn.ibm.com:activitystreams.story:bdb562f…
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)
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.	
  
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=”profiles.person.photo.updated"/>
-->
</subscriptions>
</postHandler>
Event	
  Handlers	
  –	
  implementa=on	
  
import com.ibm.connections.spi.events.EventHandler
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("profiles.person.photo.updated")) {
// a profile photo was updated
this.doEventProfilesPhotoUpdated(event);
} else if (event.getName().equals("profiles.updated")) {
// a profile was updated
this.doEventProfilesUpdated(event);
}
}
}
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	
  
Thank	
  you	
  
•  Presenta=ons	
  on	
  slideshare.net	
  –	
  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:	
  mS@intravision.dk	
  
hNp://lekkimworld.com	
  
hNp://slideshare.net/lekkim	
  

Contenu connexe

Tendances

O365con14 - a developer jam with yammer
O365con14 - a developer jam with yammerO365con14 - a developer jam with yammer
O365con14 - a developer jam with yammerNCCOMMS
 
Nishimura finding vulnerabilities-in-firefox-for-i-os-(nishimunea)
Nishimura finding vulnerabilities-in-firefox-for-i-os-(nishimunea)Nishimura finding vulnerabilities-in-firefox-for-i-os-(nishimunea)
Nishimura finding vulnerabilities-in-firefox-for-i-os-(nishimunea)PacSecJP
 
Introduction to OAuth 2.0 - Part 2
Introduction to OAuth 2.0 - Part 2Introduction to OAuth 2.0 - Part 2
Introduction to OAuth 2.0 - Part 2Nabeel Yoosuf
 
7 Deadly Sins in Azure AD App Development
7 Deadly Sins in Azure AD App Development7 Deadly Sins in Azure AD App Development
7 Deadly Sins in Azure AD App DevelopmentJoonas Westlin
 
MBL302 Using the AWS Mobile SDKs - AWS re: Invent 2012
MBL302 Using the AWS Mobile SDKs - AWS re: Invent 2012MBL302 Using the AWS Mobile SDKs - AWS re: Invent 2012
MBL302 Using the AWS Mobile SDKs - AWS re: Invent 2012Amazon Web Services
 
Advanced CSRF and Stateless Anti-CSRF
Advanced CSRF and Stateless Anti-CSRFAdvanced CSRF and Stateless Anti-CSRF
Advanced CSRF and Stateless Anti-CSRFjohnwilander
 
HATEOAS 101 - Opinionated Introduction to a REST API Style
HATEOAS 101 - Opinionated Introduction to a REST API StyleHATEOAS 101 - Opinionated Introduction to a REST API Style
HATEOAS 101 - Opinionated Introduction to a REST API StyleApigee | Google Cloud
 
Rapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and FirebaseRapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and FirebasePeter Friese
 
Using ArcGIS with OAuth 2.0 - Esri DevSummit Dubai 2013
Using ArcGIS with OAuth 2.0 - Esri DevSummit Dubai 2013Using ArcGIS with OAuth 2.0 - Esri DevSummit Dubai 2013
Using ArcGIS with OAuth 2.0 - Esri DevSummit Dubai 2013Aaron Parecki
 
GeneralMobile Hybrid Development with WordPress
GeneralMobile Hybrid Development with WordPressGeneralMobile Hybrid Development with WordPress
GeneralMobile Hybrid Development with WordPressGGDBologna
 
Introduction to OAuth 2.0 - Part 1
Introduction to OAuth 2.0  - Part 1Introduction to OAuth 2.0  - Part 1
Introduction to OAuth 2.0 - Part 1Nabeel Yoosuf
 
Introduction to OAuth 2.0 - Part 1
Introduction to OAuth 2.0 - Part 1Introduction to OAuth 2.0 - Part 1
Introduction to OAuth 2.0 - Part 1Nabeel Yoosuf
 
QuickConnect
QuickConnectQuickConnect
QuickConnectAnnu G
 
amazon-cognito-auth-in-minutes
amazon-cognito-auth-in-minutesamazon-cognito-auth-in-minutes
amazon-cognito-auth-in-minutesVladimir Budilov
 
IBM Connect 2016: 1402 - Getting Technically Cozy with IBM Connections Cloud ...
IBM Connect 2016: 1402 - Getting Technically Cozy with IBM Connections Cloud ...IBM Connect 2016: 1402 - Getting Technically Cozy with IBM Connections Cloud ...
IBM Connect 2016: 1402 - Getting Technically Cozy with IBM Connections Cloud ...David Simpson
 
HTML5 and the dawn of rich mobile web applications
HTML5 and the dawn of rich mobile web applicationsHTML5 and the dawn of rich mobile web applications
HTML5 and the dawn of rich mobile web applicationsJames Pearce
 
How to add your own OpenSocial Gadgets to IBM Connections
How to add your own OpenSocial Gadgets to IBM ConnectionsHow to add your own OpenSocial Gadgets to IBM Connections
How to add your own OpenSocial Gadgets to IBM ConnectionsIBM Connections Developers
 

Tendances (20)

- Webexpo 2010
- Webexpo 2010- Webexpo 2010
- Webexpo 2010
 
O365con14 - a developer jam with yammer
O365con14 - a developer jam with yammerO365con14 - a developer jam with yammer
O365con14 - a developer jam with yammer
 
Nishimura finding vulnerabilities-in-firefox-for-i-os-(nishimunea)
Nishimura finding vulnerabilities-in-firefox-for-i-os-(nishimunea)Nishimura finding vulnerabilities-in-firefox-for-i-os-(nishimunea)
Nishimura finding vulnerabilities-in-firefox-for-i-os-(nishimunea)
 
Introduction to OAuth 2.0 - Part 2
Introduction to OAuth 2.0 - Part 2Introduction to OAuth 2.0 - Part 2
Introduction to OAuth 2.0 - Part 2
 
7 Deadly Sins in Azure AD App Development
7 Deadly Sins in Azure AD App Development7 Deadly Sins in Azure AD App Development
7 Deadly Sins in Azure AD App Development
 
MBL302 Using the AWS Mobile SDKs - AWS re: Invent 2012
MBL302 Using the AWS Mobile SDKs - AWS re: Invent 2012MBL302 Using the AWS Mobile SDKs - AWS re: Invent 2012
MBL302 Using the AWS Mobile SDKs - AWS re: Invent 2012
 
Advanced CSRF and Stateless Anti-CSRF
Advanced CSRF and Stateless Anti-CSRFAdvanced CSRF and Stateless Anti-CSRF
Advanced CSRF and Stateless Anti-CSRF
 
HATEOAS 101 - Opinionated Introduction to a REST API Style
HATEOAS 101 - Opinionated Introduction to a REST API StyleHATEOAS 101 - Opinionated Introduction to a REST API Style
HATEOAS 101 - Opinionated Introduction to a REST API Style
 
Rapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and FirebaseRapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and Firebase
 
DEV-1467 - Darwino
DEV-1467 - DarwinoDEV-1467 - Darwino
DEV-1467 - Darwino
 
Social Login
Social LoginSocial Login
Social Login
 
Using ArcGIS with OAuth 2.0 - Esri DevSummit Dubai 2013
Using ArcGIS with OAuth 2.0 - Esri DevSummit Dubai 2013Using ArcGIS with OAuth 2.0 - Esri DevSummit Dubai 2013
Using ArcGIS with OAuth 2.0 - Esri DevSummit Dubai 2013
 
GeneralMobile Hybrid Development with WordPress
GeneralMobile Hybrid Development with WordPressGeneralMobile Hybrid Development with WordPress
GeneralMobile Hybrid Development with WordPress
 
Introduction to OAuth 2.0 - Part 1
Introduction to OAuth 2.0  - Part 1Introduction to OAuth 2.0  - Part 1
Introduction to OAuth 2.0 - Part 1
 
Introduction to OAuth 2.0 - Part 1
Introduction to OAuth 2.0 - Part 1Introduction to OAuth 2.0 - Part 1
Introduction to OAuth 2.0 - Part 1
 
QuickConnect
QuickConnectQuickConnect
QuickConnect
 
amazon-cognito-auth-in-minutes
amazon-cognito-auth-in-minutesamazon-cognito-auth-in-minutes
amazon-cognito-auth-in-minutes
 
IBM Connect 2016: 1402 - Getting Technically Cozy with IBM Connections Cloud ...
IBM Connect 2016: 1402 - Getting Technically Cozy with IBM Connections Cloud ...IBM Connect 2016: 1402 - Getting Technically Cozy with IBM Connections Cloud ...
IBM Connect 2016: 1402 - Getting Technically Cozy with IBM Connections Cloud ...
 
HTML5 and the dawn of rich mobile web applications
HTML5 and the dawn of rich mobile web applicationsHTML5 and the dawn of rich mobile web applications
HTML5 and the dawn of rich mobile web applications
 
How to add your own OpenSocial Gadgets to IBM Connections
How to add your own OpenSocial Gadgets to IBM ConnectionsHow to add your own OpenSocial Gadgets to IBM Connections
How to add your own OpenSocial Gadgets to IBM Connections
 

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

An Introduction to Working With the Activity Stream
An Introduction to Working With the Activity StreamAn Introduction to Working With the Activity Stream
An Introduction to Working With the Activity StreamMikkel Flindt Heisterberg
 
Mikkel Heisterberg - An introduction to developing for the Activity Stream
Mikkel Heisterberg - An introduction to developing for the Activity StreamMikkel Heisterberg - An introduction to developing for the Activity Stream
Mikkel Heisterberg - An introduction to developing for the Activity StreamLetsConnect
 
IBM Connections How to use existing data to increase adoption success with IB...
IBM Connections How to use existing data to increase adoption success with IB...IBM Connections How to use existing data to increase adoption success with IB...
IBM Connections How to use existing data to increase adoption success with IB...Dominopoint - Italian Lotus User Group
 
How to increase social adoption - meetIT 2016, Milano
How to increase social adoption - meetIT 2016, MilanoHow to increase social adoption - meetIT 2016, Milano
How to increase social adoption - meetIT 2016, MilanoHenning Schmidt
 
(WEB301) Operational Web Log Analysis | AWS re:Invent 2014
(WEB301) Operational Web Log Analysis | AWS re:Invent 2014(WEB301) Operational Web Log Analysis | AWS re:Invent 2014
(WEB301) Operational Web Log Analysis | AWS re:Invent 2014Amazon Web Services
 
Active Server Page(ASP)
Active Server Page(ASP)Active Server Page(ASP)
Active Server Page(ASP)Keshab Nath
 
Introduction to Stream Processing
Introduction to Stream ProcessingIntroduction to Stream Processing
Introduction to Stream ProcessingGuido Schmutz
 
Entwickler camp2012 how to connect your app to the activity stream with x_pages
Entwickler camp2012 how to connect your app to the activity stream with x_pagesEntwickler camp2012 how to connect your app to the activity stream with x_pages
Entwickler camp2012 how to connect your app to the activity stream with x_pagesFrank van der Linden
 
Prototyping applications with heroku and elasticsearch
 Prototyping applications with heroku and elasticsearch Prototyping applications with heroku and elasticsearch
Prototyping applications with heroku and elasticsearchprotofy
 
When dynamic becomes static : the next step in web caching techniques
When dynamic becomes static : the next step in web caching techniquesWhen dynamic becomes static : the next step in web caching techniques
When dynamic becomes static : the next step in web caching techniquesWim Godden
 
Introduction to Stream Processing
Introduction to Stream ProcessingIntroduction to Stream Processing
Introduction to Stream ProcessingGuido Schmutz
 
Four Scenarios for Using an Integration Service Environment (ISE)
Four Scenarios for Using an Integration Service Environment (ISE)Four Scenarios for Using an Integration Service Environment (ISE)
Four Scenarios for Using an Integration Service Environment (ISE)Daniel Toomey
 
Log insight technical overview customer facing (based on 3.x)
Log insight technical overview customer facing (based on 3.x)Log insight technical overview customer facing (based on 3.x)
Log insight technical overview customer facing (based on 3.x)David Pasek
 
Introduction to AWS Organizations
Introduction to AWS OrganizationsIntroduction to AWS Organizations
Introduction to AWS OrganizationsAmazon Web Services
 
Advance java session 19
Advance java session 19Advance java session 19
Advance java session 19Smita B Kumar
 
IBM Bluemix OpenWhisk: Serverless Conference 2016, London, UK: The Future of ...
IBM Bluemix OpenWhisk: Serverless Conference 2016, London, UK: The Future of ...IBM Bluemix OpenWhisk: Serverless Conference 2016, London, UK: The Future of ...
IBM Bluemix OpenWhisk: Serverless Conference 2016, London, UK: The Future of ...OpenWhisk
 
Introduction to Stream Processing
Introduction to Stream ProcessingIntroduction to Stream Processing
Introduction to Stream ProcessingGuido Schmutz
 
SplunkLive! Advanced Session
SplunkLive! Advanced SessionSplunkLive! Advanced Session
SplunkLive! Advanced SessionSplunk
 
IBM Connections Activity Stream 3rd Party Integration - Social Connect VI - P...
IBM Connections Activity Stream 3rd Party Integration - Social Connect VI - P...IBM Connections Activity Stream 3rd Party Integration - Social Connect VI - P...
IBM Connections Activity Stream 3rd Party Integration - Social Connect VI - P...James Gallagher
 
Masterless Puppet Using AWS S3 Buckets and IAM Roles
Masterless Puppet Using AWS S3 Buckets and IAM RolesMasterless Puppet Using AWS S3 Buckets and IAM Roles
Masterless Puppet Using AWS S3 Buckets and IAM RolesMalcolm Duncanson, CISSP
 

Similaire à Social Connections VI Prague - An introduction to ibm connections as an appdev platform (20)

An Introduction to Working With the Activity Stream
An Introduction to Working With the Activity StreamAn Introduction to Working With the Activity Stream
An Introduction to Working With the Activity Stream
 
Mikkel Heisterberg - An introduction to developing for the Activity Stream
Mikkel Heisterberg - An introduction to developing for the Activity StreamMikkel Heisterberg - An introduction to developing for the Activity Stream
Mikkel Heisterberg - An introduction to developing for the Activity Stream
 
IBM Connections How to use existing data to increase adoption success with IB...
IBM Connections How to use existing data to increase adoption success with IB...IBM Connections How to use existing data to increase adoption success with IB...
IBM Connections How to use existing data to increase adoption success with IB...
 
How to increase social adoption - meetIT 2016, Milano
How to increase social adoption - meetIT 2016, MilanoHow to increase social adoption - meetIT 2016, Milano
How to increase social adoption - meetIT 2016, Milano
 
(WEB301) Operational Web Log Analysis | AWS re:Invent 2014
(WEB301) Operational Web Log Analysis | AWS re:Invent 2014(WEB301) Operational Web Log Analysis | AWS re:Invent 2014
(WEB301) Operational Web Log Analysis | AWS re:Invent 2014
 
Active Server Page(ASP)
Active Server Page(ASP)Active Server Page(ASP)
Active Server Page(ASP)
 
Introduction to Stream Processing
Introduction to Stream ProcessingIntroduction to Stream Processing
Introduction to Stream Processing
 
Entwickler camp2012 how to connect your app to the activity stream with x_pages
Entwickler camp2012 how to connect your app to the activity stream with x_pagesEntwickler camp2012 how to connect your app to the activity stream with x_pages
Entwickler camp2012 how to connect your app to the activity stream with x_pages
 
Prototyping applications with heroku and elasticsearch
 Prototyping applications with heroku and elasticsearch Prototyping applications with heroku and elasticsearch
Prototyping applications with heroku and elasticsearch
 
When dynamic becomes static : the next step in web caching techniques
When dynamic becomes static : the next step in web caching techniquesWhen dynamic becomes static : the next step in web caching techniques
When dynamic becomes static : the next step in web caching techniques
 
Introduction to Stream Processing
Introduction to Stream ProcessingIntroduction to Stream Processing
Introduction to Stream Processing
 
Four Scenarios for Using an Integration Service Environment (ISE)
Four Scenarios for Using an Integration Service Environment (ISE)Four Scenarios for Using an Integration Service Environment (ISE)
Four Scenarios for Using an Integration Service Environment (ISE)
 
Log insight technical overview customer facing (based on 3.x)
Log insight technical overview customer facing (based on 3.x)Log insight technical overview customer facing (based on 3.x)
Log insight technical overview customer facing (based on 3.x)
 
Introduction to AWS Organizations
Introduction to AWS OrganizationsIntroduction to AWS Organizations
Introduction to AWS Organizations
 
Advance java session 19
Advance java session 19Advance java session 19
Advance java session 19
 
IBM Bluemix OpenWhisk: Serverless Conference 2016, London, UK: The Future of ...
IBM Bluemix OpenWhisk: Serverless Conference 2016, London, UK: The Future of ...IBM Bluemix OpenWhisk: Serverless Conference 2016, London, UK: The Future of ...
IBM Bluemix OpenWhisk: Serverless Conference 2016, London, UK: The Future of ...
 
Introduction to Stream Processing
Introduction to Stream ProcessingIntroduction to Stream Processing
Introduction to Stream Processing
 
SplunkLive! Advanced Session
SplunkLive! Advanced SessionSplunkLive! Advanced Session
SplunkLive! Advanced Session
 
IBM Connections Activity Stream 3rd Party Integration - Social Connect VI - P...
IBM Connections Activity Stream 3rd Party Integration - Social Connect VI - P...IBM Connections Activity Stream 3rd Party Integration - Social Connect VI - P...
IBM Connections Activity Stream 3rd Party Integration - Social Connect VI - P...
 
Masterless Puppet Using AWS S3 Buckets and IAM Roles
Masterless Puppet Using AWS S3 Buckets and IAM RolesMasterless Puppet Using AWS S3 Buckets and IAM Roles
Masterless Puppet Using AWS S3 Buckets and IAM Roles
 

Plus de Mikkel Flindt Heisterberg

BP309 Project Management Inside and Outside the Box
BP309 Project Management Inside and Outside the BoxBP309 Project Management Inside and Outside the Box
BP309 Project Management Inside and Outside the BoxMikkel Flindt Heisterberg
 
Creating a keystore for plugin signing the easy way
Creating a keystore for plugin signing the easy wayCreating a keystore for plugin signing the easy way
Creating a keystore for plugin signing the easy wayMikkel Flindt Heisterberg
 
BP207 - Easy as pie creating widgets for ibm connections
BP207 - Easy as pie   creating widgets for ibm connectionsBP207 - Easy as pie   creating widgets for ibm connections
BP207 - Easy as pie creating widgets for ibm connectionsMikkel Flindt Heisterberg
 
Plug yourself in and your app will never be the same (2 hr editon)
Plug yourself in and your app will never be the same (2 hr editon)Plug yourself in and your app will never be the same (2 hr editon)
Plug yourself in and your app will never be the same (2 hr editon)Mikkel Flindt Heisterberg
 
Plug yourself in and your app will never be the same (2 hour edition)
Plug yourself in and your app will never be the same (2 hour edition)Plug yourself in and your app will never be the same (2 hour edition)
Plug yourself in and your app will never be the same (2 hour edition)Mikkel Flindt Heisterberg
 
Plug yourself in and your app will never be the same (1 hr edition)
Plug yourself in and your app will never be the same (1 hr edition)Plug yourself in and your app will never be the same (1 hr edition)
Plug yourself in and your app will never be the same (1 hr edition)Mikkel Flindt Heisterberg
 

Plus de Mikkel Flindt Heisterberg (12)

An Introduction to Lightning Web Components
An Introduction to Lightning Web ComponentsAn Introduction to Lightning Web Components
An Introduction to Lightning Web Components
 
IBM Connections 5 Gæstemodel
IBM Connections 5 GæstemodelIBM Connections 5 Gæstemodel
IBM Connections 5 Gæstemodel
 
BP309 Project Management Inside and Outside the Box
BP309 Project Management Inside and Outside the BoxBP309 Project Management Inside and Outside the Box
BP309 Project Management Inside and Outside the Box
 
Creating a keystore for plugin signing the easy way
Creating a keystore for plugin signing the easy wayCreating a keystore for plugin signing the easy way
Creating a keystore for plugin signing the easy way
 
BP207 - Easy as pie creating widgets for ibm connections
BP207 - Easy as pie   creating widgets for ibm connectionsBP207 - Easy as pie   creating widgets for ibm connections
BP207 - Easy as pie creating widgets for ibm connections
 
OnTime Partner Webinar September 2011
OnTime Partner Webinar September 2011OnTime Partner Webinar September 2011
OnTime Partner Webinar September 2011
 
Plug yourself in and your app will never be the same (2 hr editon)
Plug yourself in and your app will never be the same (2 hr editon)Plug yourself in and your app will never be the same (2 hr editon)
Plug yourself in and your app will never be the same (2 hr editon)
 
Plug yourself in and your app will never be the same (2 hour edition)
Plug yourself in and your app will never be the same (2 hour edition)Plug yourself in and your app will never be the same (2 hour edition)
Plug yourself in and your app will never be the same (2 hour edition)
 
Lotusphere Comes To You 2011
Lotusphere Comes To You 2011Lotusphere Comes To You 2011
Lotusphere Comes To You 2011
 
Lotus Community Call - 22 March 2011
Lotus Community Call - 22 March 2011Lotus Community Call - 22 March 2011
Lotus Community Call - 22 March 2011
 
Plug yourself in and your app will never be the same (1 hr edition)
Plug yourself in and your app will never be the same (1 hr edition)Plug yourself in and your app will never be the same (1 hr edition)
Plug yourself in and your app will never be the same (1 hr edition)
 
Lotus Notes Plugin Installation For Dummies
Lotus Notes Plugin Installation For DummiesLotus Notes Plugin Installation For Dummies
Lotus Notes Plugin Installation For Dummies
 

Dernier

Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfYashikaSharma391629
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 

Dernier (20)

Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 

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

  • 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.
  • 3. 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:  mS@intravision.dk   hNp://lekkimworld.com   hNp://slideshare.net/lekkim  
  • 4. There’s  more  beneath  the  surface  
  • 5. The  IBM  Connec=ons  plaVorm  
  • 7. Widgets  –  descriptor   <iw:iwidget id="com.example.ExampleWidget" supportedModes="view fullpage” mode="view” lang="en" xmlns:iw="http://www.ibm.com/xmlns/prod/iWidget" iScope="com.example.ExampleWidget"> <iw:resource uri="http://www.example.com/ExampleWidget.js" /> <iw:resource uri="http://www.example.com/ExampleWidget.css" /> <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>
  • 8. 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() {} });
  • 9. 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>
  • 10. 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 –  iContext.io.rewriteURI(uri:string) : string –  iContext.iEvents.fireEvent(name:string, type:string, payload:object)
  • 11. 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://slideshare.net/lekkim   Mikkel  Flindt  Heisterberg     TwiNer:  @lekkim   E-­‐mail:  mS@intravision.dk   hNp://lekkimworld.com   hNp://slideshare.net/lekkim  
  • 12. 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  
  • 13. 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”  
  • 14. 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”: ”mh@intravision.dk”, ”niceGuy”: true, ”age”: 37, ”name”: { ”first”: ”Mikkel Flindt”, ”last”: ” Heisterberg” }, ”Connectospheres”: [6, 7, 8, 9, 10, 11, 12, 13, 14] }
  • 15. 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" } }
  • 16. 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.  
  • 17. 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/ urn:lsid:lconn.ibm.com:activitystreams.story:bdb562f… 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)
  • 18. 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.  
  • 19. 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=”profiles.person.photo.updated"/> --> </subscriptions> </postHandler>
  • 20. Event  Handlers  –  implementa=on   import com.ibm.connections.spi.events.EventHandler 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("profiles.person.photo.updated")) { // a profile photo was updated this.doEventProfilesPhotoUpdated(event); } else if (event.getName().equals("profiles.updated")) { // a profile was updated this.doEventProfilesUpdated(event); } } }
  • 21. 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  
  • 22. Thank  you   •  Presenta=ons  on  slideshare.net  –  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:  mS@intravision.dk   hNp://lekkimworld.com   hNp://slideshare.net/lekkim