mikkel heisterberg - an introduction to developing for the activity stream
DESCRIPTION
The future of business is social and the activity stream is the way events and messages are communicated in the social business. In this session you’ll learn all there is to know about the activity stream including exactly what it is and how to interact with it using your favorite development environment whether that be JavaScript, XPages, Java or even the plain vanilla HTTP based REST API. This session is for you if you want to start working the Activity Stream.TRANSCRIPT
![Page 1: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/1.jpg)
This presentation by Mikkel Flindt Heisterberg ([email protected], http://lekkimworld.com), OnTime® by IntraVision, is licensed under a Creative Commons Attribution-ShareAlike 2.5 Denmark License
An Introduction to Working With the
Activity Stream
Mikkel Flindt Heisterberg Senior Solution Architect / Partner
OnTime® by IntraVision
![Page 2: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/2.jpg)
@me
• Developer for IBM Notes, Domino, Sametime, Java, DB2, Websphere Application Server, Web
• Lover of plugins – plugins are cool! – but slowly becoming the widget guy
• IBM Champion
• Blog: lekkimworld.com
• @lekkim
![Page 3: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/3.jpg)
OnTime® Group Calendar • Probably the best, most versatile, group calendar
product in the World
• In active development since 1997, sold through partners throughout the World
• Various user interfaces to suit just about any need from IBM Notes Standard, to web browsers, mobile devices, IBM Connections and IBM Notes Basic
• Oh and there’s an API as well...
![Page 4: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/4.jpg)
NOTES INTERFACE
![Page 5: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/5.jpg)
WEB INTERFACE
![Page 6: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/6.jpg)
Team-At-A-Glace (TAAG) SIDEBAR INTERFACE
![Page 7: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/7.jpg)
MOBILE INTERFACES
![Page 8: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/8.jpg)
DISCOVERY INTERFACE
![Page 9: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/9.jpg)
API EXPLORER
![Page 10: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/10.jpg)
Questions? Talk to Lars...
...and then head to http://www.ontimesuite.com for a fully functional 30 day trial license. It takes under 30 minutes to set up.
Want online demos? Head to http://demo.ontimesuite.com
![Page 11: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/11.jpg)
What is this session about? “The future of business is social and the activity stream is the way events and messages are communicated in the social business. In this session you'll learn all there is to know about the activity stream including exactly what it is and how to interact with it using your favorite development environment whether that be JavaScript, XPages, Java or even the plain vanilla HTTP based REST API. This session is for you if you want to start working the Activity Stream.”
![Page 12: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/12.jpg)
The activity stream concept Activity stream was added in IBM Connections v. 4.0. “An activity stream is a list of recent activities performed by an individual, typically on a single website. For example, Facebook's News Feed is an activity stream. Since the introduction of the News Feed on September 6, 2006 other major websites have introduced similar implementations for their own users. Since the proliferation of activity streams on websites, there have been calls to standardize the format so that websites could interact with a stream provided by another website.”
![Page 13: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/13.jpg)
What is the Activity Stream • River of news – it’s like water flowing by you
• Notifications about ”stuff” happening in (other) systems – we refer to these notifications as entries
• Entries may be saved for future reference and entries may be actionable i.e. indicated that it must be acted upon
• Typically you decide what goes into your stream
• A replacement for email notifications (although you can have those too...)
• Standards based – like – meaning – IBM took the standard and added IBM Connections specific stuff to it
![Page 14: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/14.jpg)
What is the Activity Stream NOT • 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 actionable
• Meant as a content repository
• Something that implies that you must read it all – it’s notifications – treat it as such...
![Page 15: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/15.jpg)
Demo • Let’s look at the activity stream in IBM
Connections
• See options for filtering (saved/actionable)
![Page 16: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/16.jpg)
Demo safety slide
![Page 17: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/17.jpg)
No content stored in the stream
![Page 18: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/18.jpg)
• HTTP is much more than what a web browser reveals • The request
– has a method (GET, POST, PUT, DELETE)
– may have headers that describe the request such as a Content-Type (text/html), cookies and authentication information.
– may have a body data
• The response – has a return code (200 = OK, 301 = Moved, 404 = Not found)
– may carry body data
– may have headers that describe the response (e.g. Content-Type, charset and new location)
REST API’s 101 (1)
![Page 19: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/19.jpg)
• You will mainly use the POST and PUT methods to send JSON data
(Content-Type: application/json) to the API
• JSON is super simple key/value data format. It has simple datatypes
(strings, numbers, booleans), objects and arrays
{
”email”: ”[email protected]”,
”niceGuy”: true,
”age”: 36,
”name”: {
”first”: ”Mikkel Flindt”,
”last”: ” Heisterberg”
},
”Lotuspheres”: [2006, 2007, 2008, 2009, 2010, 2011, 2012],
”IBMConnects”: [2013]
}
REST API’s 101 (2)
![Page 20: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/20.jpg)
• HTTP is pure text and easily done using telnet but there are cool tools to make it easier: – RESTClient in Firefox – Advanced REST Client in Chrome – cURL if you’re a command line guy/gal
• Recommend RESTClient in Firefox as the Chrome equivalent sends an Origin header that doesn’t agree with IBM Connections
• Charles Web Proxy, http://www.charlesproxy.com
REST API’s 101 (3)
![Page 21: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/21.jpg)
How many streams are there? • In my opinion it makes most sense to not
consider the activity 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 posting to it will return a ”403 Forbidden”
![Page 22: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/22.jpg)
Stream URL components https://<host>/connections/opensocial/<auth>/rest/activitystreams
/<user ID>/<group ID>/<application ID>/<activity ID>
Component Meaning
<auth> (optional) If using form based authentication leave this component out. Otherwise options are anonymos, basic, oauth (last option not covered in this presentation).
<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 options for special meaning such as @saved, @actions etc. Refer for InfoCenter and resources slide for more.
<application ID> When retrieving entries this refers to the application (or ”generator”) that created the entry. All the IBM Connections app names can be used (profiles, blogs, wikis etc.) plus custom ones (e.g. ontimegc). @all used for all applications.
<activity ID> Used to reference a specific event e.g. for updating saved status.
![Page 23: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/23.jpg)
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/bdb562fb-b145-43dc... Work with entry from my stream based on ID
Stream URL Examples
* All URLs above start with https://<host>/connections/opensocial/<auth>/rest
Also used when creating new entries (e.g. POSTing)
![Page 24: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/24.jpg)
Anatomy of a stream entry • A stream entry reads like ”the current user
posted a note to IBM Connections and you should act on it”
![Page 25: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/25.jpg)
Anatomy of a stream entry • A stream entry reads like ”the current user
posted a note to IBM Connections and you should act on it”
The person doing the posting is called the actor and can be a specific user ID but usually the current user (@me)
![Page 26: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/26.jpg)
Anatomy of a stream entry • A stream entry reads like ”the current user
posted a note to IBM Connections and you should act on it” What the person does is called
the verb and there’s a long list of predefined ones such as post, update, create...
![Page 27: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/27.jpg)
Anatomy of a stream entry • A stream entry reads like ”the current user
posted a note to IBM Connections and you should act on it” The object in question is called
the object and can be anything that represents the target ”thing” i.e. file, note, meeting...
![Page 28: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/28.jpg)
Anatomy of a stream entry • A stream entry reads like ”the current user
posted a note to IBM Connections and you should act on it” The system the user worked
on is called the target and can be any system you need to refer to
![Page 29: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/29.jpg)
Anatomy of a stream entry • A stream entry reads like ”the current user
posted a note to IBM Connections and you should act on it”
IBM Connections supports some special properties for entries such as actionable and saved to allow users to work with entries
![Page 30: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/30.jpg)
Anatomy of a stream entry • A stream entry reads like ”the current user
posted a file to IBM Connections and you should act on it”
{
"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"
}
}
![Page 31: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/31.jpg)
Anatomy of a stream entry • A stream entry reads like ”the current user
posted a file to IBM Connections and you should act on it”
{
"actor": {"id": "@me"},
"verb": ”create",
"title": ”Sales proposal for Rockets Inc.",
"updated": "2013-05-17T12:00:00.000Z",
"object": {
"title": "Sales proposal for Rockets Inc.",
"objectType": ”proposal",
"id": "1234567890-1234567890-1234567890"
},
”target”: {
”displayName”: ”Acme Corp. CRM”,
”url”: ”https://crm.example.com”
}
}
IBM Connections is the implied default target but you can specify your own target in the entry
![Page 32: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/32.jpg)
POST /connections/opensocial/basic/rest/activitystreams/@me/@all Host: social.example.com Content-Type: application/json Content-Length: xyz Authorization: Basic xyz123
{
"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"
}
}
* Smallest entry you can/should post to the stream
Posting an entry* to the stream
![Page 33: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/33.jpg)
Demo • RESTClient in Firefox
• Easily work with feeds, add authentication, headers etc.
• Use Private Browsing mode
![Page 34: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/34.jpg)
Demo safety slide
![Page 35: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/35.jpg)
Deleting from the stream • In short you can’t – up to IBM Connections v. 4.5
you cannot delete from the activity stream – you’ll just get an 403 Forbidden back
• There is some light at the end of the tunnel though – this directly from the developers at IBM: “We are however adding 'propagateDelete' at the moment, which deletes all events related to a given object on receipt of a delete event (if so specified). This will be protected by a trusted role.”
![Page 36: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/36.jpg)
Action required!
![Page 37: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/37.jpg)
GET /connections/opensocial/basic/rest/activitystreams/@me/@actions
Host: social.example.com Authorization: Basic xyz123
PUT /connections/.../activitystreams/@me/@all/@all/de325123-e269-4a33-b62a
Host: social.example.com Content-Type: application/json Content-Length: xyz Authorization: Basic xyz123
{
"actor": {"id": "@me"},
"id": "de325123-e269-4a33-b62a",
"connections": {
"actionable": false
}
}
Mark/unmark as actionable
Response
{"entry": {
"connections": {
"actionable": "false"
},
"id": "unmark actionable:"
}}
![Page 38: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/38.jpg)
Save for later
![Page 39: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/39.jpg)
GET /connections/opensocial/basic/rest/activitystreams/@me/@saved
Host: social.example.com Authorization: Basic xyz123
PUT /connections/.../activitystreams/@me/@all/@all/de325123-e269-4a33-b62a
Host: social.example.com Content-Type: application/json Content-Length: xyz Authorization: Basic xyz123
{
"actor": {"id": "@me"},
"id": "de325123-e269-4a33-b62a",
"connections": {
”saved": false
}
}
Mark/unmark saved
Response
{"entry": {
"connections": {
“saved": "false"
},
"id": "unmark saved:“
}}
![Page 40: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/40.jpg)
Rolling it up
• Rollup is telling the stream that an post/update relates to the same ”thing”
• Used to avoid cluttering up the user interface
![Page 41: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/41.jpg)
POST /connections/opensocial/basic/rest/activitystreams/@me/@all Host: social.example.com Content-Type: application/json Content-Length: xyz Authorization: Basic xyz123
{
"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"
},
”connections”: {
”rollupid”: ”1234567890-1234567890-1234567890”
}
}
Rolling it up
![Page 42: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/42.jpg)
Templates • Two main reasons for looking at templates
– Internationalization (i18n) / translation
– Getting a standard representation in the UI
• Two types of templates
– Object Substitution replaces a reference with nice markup – an example is replacing the actor with a HTML reference using the business card
– Title Template Substitution – uses object substitutions it makes standard titles
![Page 43: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/43.jpg)
Templates • Object Substitution
– ${Actor} - this is converted into appropriately marked up HTML which displays the Actors name and links to a Business Card
– ${Object} - if this is a person we display as with the Actor above, otherwise the displayName with a link to the url
– ${Target} - if this is a person we display as with the Actor above, otherwise the displayName with a link to the url
• Title Template Substitution – ${created} = ${Actor} created ${Object}
– ${create.target} = ${Actor} created ${Object} in ${Target}
![Page 44: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/44.jpg)
POST /connections/opensocial/basic/rest/activitystreams/@me/@all Host: social.example.com Content-Type: application/json Authorization: Basic xyz123
{
"generator": {"id": "ontimegc”},
"actor": {"id": ”@me"},
"verb": "create",
"title": "${create}",
"updated": "2013-05-21T12:00:00.000Z",
"object": {
"summary": "Project Z Review Meeting",
"objectType": "meeting",
"id": "123456789012345678901234567890OP”
}
}
Using templates
![Page 45: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/45.jpg)
Embedded Experiences • EE works a litte different in e-mail
and in the activity stream
• E-mail – Traditional (SMTP) e-mail is using
Multipurpose Internet Mail Extension (MIME)
– EE’s adds an additional ”MIME part” – clients in the know will show content based on this data if possible and allowed by policy
• Activity stream – Activity stream delivery model is a bit different than in e-mail as we already
have a structured payload
– Application sending the entry adds an openSocial.embed object to the entry with link to the gadget required for rendering the EE and context info
![Page 46: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/46.jpg)
{
”actor”: {”id”: ”@me”},
...
...
"openSocial": {
"embed": {
"gadget": "http://ee.example.com/mygadget.xml",
"context": {"id":"12345"}
}
}
}
Embedded Experiences
![Page 47: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/47.jpg)
• By default you may only post entries to your own activity stream
• Sending to others can be considered as spam • As with standards there are multiple ways of doing it
using either – OpenSocial (openSocial: {deliverTo: []}) – Activitystrea.ms (to: []) – Just use the second one...
• To send to another users stream you need to either be him/her or be a trusted application (more information later...)
Posting to other users stream
![Page 48: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/48.jpg)
{
"generator": {"id": "ontimegc”},
"actor": {"id": "@me"},
"to": [{"objectType": "person", "id": "A7E718F4-3040-2A00-C125"}],
"verb": "create",
"title": "${create}",
"updated": "2013-05-21T12:00:00.000Z",
"object": {
"summary": "Project X Review Meeting",
"objectType": "meeting",
"id": "123456789012345678901234567890MN”
},
"connections": {
"rollupid": "123456789012345678901234567890MN",
}
}
Posting to other user
![Page 49: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/49.jpg)
{
"generator": {"id": "ontimegc”},
"actor": {"id": "A7E718F4-3040-2A00-C125"},
"to": [{"objectType": "person", "id": "A7E718F4-3040-2A00-C125"}],
"verb": "create",
"title": "${create}",
"updated": "2013-05-21T12:00:00.000Z",
"object": {
"summary": "Project Y Review Meeting",
"objectType": "meeting",
"id": "123456789012345678901234567890OP”
},
"connections": {
"rollupid": "123456789012345678901234567890OP”
}
}
Posting as other user
![Page 50: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/50.jpg)
{
"generator": {"id": "ontimegc”},
"actor": {"id": "1E7F44DD-9C20-842A-C125"},
"to": [{"objectType": "person", "id": "A7E718F4-3040-2A00-C125"}],
"verb": "create",
"title": "${create}",
"updated": "2013-05-21T12:00:00.000Z",
"object": {
"summary": "Project Z Review Meeting",
"objectType": "meeting",
"id": "123456789012345678901234567890OP”
},
"connections": {
"rollupid": "123456789012345678901234567890OP”
}
}
Posting to & as other user
![Page 51: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/51.jpg)
How it looks in the UI
![Page 52: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/52.jpg)
Registering generators wsadmin>execfile("newsAdmin.py")
wsadmin>NewsActivityStreamService.listApplicationRegistrations()
{wikis=wikis, communities=communities, general=General, profiles=profiles, activities=activities, homepage=homepage, blogs=blogs, forums=forums, files=files, dogear=dogear, demoapp=Demo Application, kudos=Kudos}
wsadmin>NewsActivityStreamService.registerApplication("ontimegc", "OnTime Group Calendar", "http://www.ontimesuite.com", "", ”http://inside.intravision.dk/images/ontime.gif”, ””, ”OnTime Group Calendar”, ”true”)
wsadmin>
After first use of a generator it can be referenced by ID. Purpose of registering is that users may filter by it in the UI.
![Page 53: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/53.jpg)
Benefit of registering generator
![Page 54: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/54.jpg)
Granting access (1) • Permission to send to other users are granted
using the trustedExternalApplication role
• Granted in the WidgetContainer application using wsadmin or the Websphere Application Server Integrated Solutions Console – the latter is easiest
![Page 55: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/55.jpg)
Granting access (2)
![Page 56: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/56.jpg)
Granting access (3)
![Page 57: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/57.jpg)
Granting access (4)
![Page 58: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/58.jpg)
Granting access (5)
![Page 59: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/59.jpg)
Summary • There’s no one stream - @me vs. @public vs. community • Be patient – wrapping your head around these concepts can be
hard in the beginning • Remember that the data isn’t stored in the stream but rather is
pointed to from the stream • Entries are automatically purged from the stream unless saved or
marked actionable • You cannot delete from the stream (yet) • Accessed using REST API URL based on user, group, application and
activity ID • When working with the RESTClient in Firefox use ”Private Browsing”
mode as credentials used and cookies returned in one tab doesn’t leak to other ”Private Browsing” tabs.
• Pretty easy to use once you grasp the concepts
![Page 60: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/60.jpg)
Resources • Activity Streams in the OpenSocial specification, http://opensocial-
resources.googlecode.com/svn/spec/trunk/Social-API-Server.xml#ActivityStreams-Service
• AppDev wiki, http://www-10.lotus.com/ldd/appdevwiki.nsf
• IBM Connections Activity Stream Integration (AD104 from IBM Connect 2013), http://www.slideshare.net/brianog/ad104-ibm-connections-actiivtystream-integration
• Activity Stream hands-on lab, http://www-10.lotus.com/ldd/appdevwiki.nsf/xsp/.ibmmodres/domino/OpenAttachment/ldd/appdevwiki.nsf/82567C415DF5243185257AEE00626F82/attach/5-sdk-workshop-activitystreams.pdf
![Page 61: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/61.jpg)
Tools of the trade • RESTclient in Firefox (recommended),
https://addons.mozilla.org/da/firefox/addon/restclient/
• Advanced REST client in Chrome (issues with POSTs), http://bit.ly/advancedrest
• cURL (for any imaginable operating system), http://curl.haxx.se/
• Charles Web Proxy, http://www.charlesproxy.com
![Page 62: Mikkel Heisterberg - An introduction to developing for the Activity Stream](https://reader033.vdocuments.us/reader033/viewer/2022052822/554f63d2b4c905c8088b4c08/html5/thumbnails/62.jpg)
Q&A
• But?, How?, Doesn't that mean...
• Give it to me! (or come talk to me after the session or find me in the hallways...)
• Twitter: @lekkim
• Email: [email protected]
• Blog: http://lekkimworld.com