<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2218697746720039032</id><updated>2012-02-16T03:04:59.065-08:00</updated><category term='appData'/><category term='source'/><category term='facebook'/><category term='flash'/><category term='platform'/><category term='javascript'/><category term='orkut'/><category term='api change'/><category term='opensocial event'/><category term='example'/><category term='opensocial lightweight-javascript'/><category term='event'/><category term='myspace'/><category term='quirk'/><category term='actionscript'/><category term='flex'/><category term='opensocial'/><title type='text'>opensocial-actionscript-client</title><subtitle type='html'>This blog will show the development activities and some general rants about opensocial-actionscript-client project. opensocial-actionscript-client is an opensource library for actionscript (and Flex/Flash) to access Google's Opensocial API. :)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://opensocial-actionscript-client.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>solwu</name><uri>http://www.blogger.com/profile/12115249955114888574</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2218697746720039032.post-8329852247762752103</id><published>2009-04-23T15:18:00.000-07:00</published><updated>2009-04-23T15:29:00.193-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='opensocial lightweight-javascript'/><title type='text'>OpenSocial Spec 0.9 is published</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span class="358522921-23042009"&gt;Opensocial 0.9 spec  is published on Apr 16 according to &lt;span class="Apple-style-span" style="white-space: pre; "&gt;OpenSocial API &lt;/span&gt;blog (&lt;span class="Apple-style-span" style="font-family: Georgia; font-size: 16px; "&gt;&lt;a href="http://blog.opensocial.org/2009/04/opensocial-community-defines-version-09.html"&gt;http://blog.opensocial.org/2009/04/opensocial-community-defines-version-09.html)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span class="358522921-23042009"&gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span class="358522921-23042009"&gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span class="358522921-23042009"&gt;major  features:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span class="358522921-23042009"&gt;1. lightweight javascript API&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span class="358522921-23042009"&gt;2. proxied content    &lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span class="358522921-23042009"&gt;3. data  pipelining&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span class="358522921-23042009"&gt;4. templates and  OSML&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;&lt;a title="http://www.opensocial.org/Technical-Resources/opensocial-spec-v09/OpenSocial-Specification-Release-Notes.html#rfc.section.1" href="http://www.opensocial.org/Technical-Resources/opensocial-spec-v09/OpenSocial-Specification-Release-Notes.html#rfc.section.1"&gt;http://www.opensocial.org/Technical-Resources/opensocial-spec-v09/OpenSocial-Specification-Release-Notes.html#rfc.section.1&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Lightweight javascript API will be a great news for developers.  I have blogged earlier about how cumbersome the JS API is.  Lightweight javascript API is a great improvement.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;eg.  examples coming from OpenSocial Release Notes:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: verdana; font-size: 13px; "&gt;&lt;p style="margin-left: 2em; margin-right: 2em; "&gt;Requesting the viewer in OpenSocial v0.8&lt;/p&gt;&lt;pre style="margin-left: 3em; background-color: rgb(255, 255, 224); padding-top: 0.25em; padding-right: 0.25em; padding-bottom: 0.25em; padding-left: 0.25em; "&gt;var req = opensocial.newDataRequest(); req.add(req.newFetchPersonRequest(opensocial.DataRequest.PersonId.OWNER), "req"); req.send(callback); &lt;/pre&gt;&lt;div id="rfc.figure.u.2"&gt;&lt;/div&gt;&lt;p style="margin-left: 2em; margin-right: 2em; "&gt;Requesting the viewer in OpenSocial v0.9&lt;/p&gt;&lt;pre style="margin-left: 3em; background-color: rgb(255, 255, 224); padding-top: 0.25em; padding-right: 0.25em; padding-bottom: 0.25em; padding-left: 0.25em; "&gt;osapi.people.getViewer().execute(callback);&lt;/pre&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Once that Orkut and Myspace support lightweight javascript api in Spec 0.9.  I think we shall change our opensocial-actionscript-client interface to follow lightweight javascript api.  Right now, our interface mimics the regular javascript api in OpenSocial Spec 0.8.  &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2. templates - people who are familiar with JSP EL will find this to be very similar.  This should make the code more readable.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3. OSML - each containers will be required to implement a set of standard tags such as Name Badge.  This is another timesaver.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2218697746720039032-8329852247762752103?l=opensocial-actionscript-client.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensocial-actionscript-client.blogspot.com/feeds/8329852247762752103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/04/opensocial-spec-09-is-published.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/8329852247762752103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/8329852247762752103'/><link rel='alternate' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/04/opensocial-spec-09-is-published.html' title='OpenSocial Spec 0.9 is published'/><author><name>Sol Wu</name><uri>http://www.blogger.com/profile/11976788592932814187</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2218697746720039032.post-7690930156693711784</id><published>2009-03-05T22:09:00.000-08:00</published><updated>2009-03-05T12:19:23.661-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='orkut'/><category scheme='http://www.blogger.com/atom/ns#' term='platform'/><category scheme='http://www.blogger.com/atom/ns#' term='myspace'/><title type='text'>Dimension of app on myspace, orkut, and facebook</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Each platform has different size limit for apps that appearing on their canvas and profile.  I hope this can be a collaborative effort, please feel free to chime in.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This will be posted on &lt;a href="http://code.google.com/p/opensocial-actionscript-client/wiki/dimensions"&gt;http://code.google.com/p/opensocial-actionscript-client/wiki/dimensions&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Myspace&lt;/span&gt;&lt;/div&gt;&lt;div&gt;canvas: 960 x (no limit?)&lt;/div&gt;&lt;div&gt;narrow profile: 300 x ?&lt;/div&gt;&lt;div&gt;wide profile: 430 x ?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Reference: What is an Myspace app&lt;/div&gt;&lt;div&gt;&lt;a href="http://developer.myspace.com/community/myspace/anatomyOfAnApp.aspx"&gt;http://developer.myspace.com/community/myspace/anatomyOfAnApp.aspx&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;orkut&lt;/span&gt;&lt;/div&gt;&lt;div&gt;canvas: 765x600&lt;/div&gt;&lt;div&gt;profile: 470x280&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Reference: Anatomy of an orkut app&lt;/div&gt;&lt;div&gt;&lt;a href="http://code.google.com/apis/orkut/articles/anatomy.html"&gt;http://code.google.com/apis/orkut/articles/anatomy.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;facebook&lt;/span&gt;&lt;/div&gt;&lt;div&gt;canvas: 760 x (no limit?)&lt;/div&gt;&lt;div&gt;main profile: ?&lt;/div&gt;&lt;div&gt;narrow profile: ?&lt;/div&gt;&lt;div&gt;wide profile: ?&lt;/div&gt;&lt;div&gt;application tab: ?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Reference:&lt;/div&gt;&lt;div&gt;You can see this in developer application.  When you create an application, it will ask you whether your canvas should be new size (760 px) or old size (68x px).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2218697746720039032-7690930156693711784?l=opensocial-actionscript-client.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensocial-actionscript-client.blogspot.com/feeds/7690930156693711784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/03/dimension-of-app-on-myspace-orkut-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/7690930156693711784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/7690930156693711784'/><link rel='alternate' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/03/dimension-of-app-on-myspace-orkut-and.html' title='Dimension of app on myspace, orkut, and facebook'/><author><name>Sol Wu</name><uri>http://www.blogger.com/profile/11976788592932814187</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2218697746720039032.post-8383122582188968161</id><published>2009-02-26T23:01:00.001-08:00</published><updated>2009-02-26T23:02:22.435-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='example'/><category scheme='http://www.blogger.com/atom/ns#' term='source'/><category scheme='http://www.blogger.com/atom/ns#' term='actionscript'/><title type='text'>Create Activity feature added to the library</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: 13px; "&gt;&lt;table width="100%" border="0" cellspacing="0" cellpadding="0" style="border-collapse: separate; "&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="vt" id="wikimaincol" width="100%" style="vertical-align: top; "&gt;&lt;div id="wikimeta" style="float: right; width: 18em; "&gt;&lt;div class="pmeta_bubble_bg" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(229, 236, 249); margin-bottom: 0.6em; background-position: initial initial; "&gt;&lt;div class="round4" style="border-left-width: 4px; border-left-style: solid; border-left-color: rgb(255, 255, 255); border-right-width: 4px; border-right-style: solid; border-right-color: rgb(255, 255, 255); font-size: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; height: 1px; "&gt;&lt;/div&gt;&lt;div class="round2" style="border-left-width: 2px; border-left-style: solid; border-left-color: rgb(255, 255, 255); border-right-width: 2px; border-right-style: solid; border-right-color: rgb(255, 255, 255); font-size: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; height: 1px; "&gt;&lt;/div&gt;&lt;div class="round1" style="border-left-width: 1px; border-left-style: solid; border-left-color: rgb(255, 255, 255); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(255, 255, 255); font-size: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; height: 1px; "&gt;&lt;/div&gt;&lt;div class="box-inner" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 13px; padding-bottom: 0px; padding-left: 13px; "&gt;&lt;table style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; border-collapse: separate; "&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan="2" style="padding-bottom: 5px; font-size: 100%; "&gt;Updated &lt;span title="Thu Feb 26 22:38:44 2009"&gt;Today (21 minutes ago)&lt;/span&gt;by &lt;a href="http://code.google.com/u/swswsw/"&gt;swswsw&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th class="vt" style="font-size: 100%; vertical-align: top; "&gt;Labels:&lt;/th&gt;&lt;td style="font-size: 100%; "&gt;&lt;a href="http://code.google.com/p/opensocial-actionscript-client/w/list?q=label:example" title="" style="color: rgb(0, 0, 204); "&gt;example&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div class="round1" style="border-left-width: 1px; border-left-style: solid; border-left-color: rgb(255, 255, 255); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(255, 255, 255); font-size: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; height: 1px; "&gt;&lt;/div&gt;&lt;div class="round2" style="border-left-width: 2px; border-left-style: solid; border-left-color: rgb(255, 255, 255); border-right-width: 2px; border-right-style: solid; border-right-color: rgb(255, 255, 255); font-size: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; height: 1px; "&gt;&lt;/div&gt;&lt;div class="round4" style="border-left-width: 4px; border-left-style: solid; border-left-color: rgb(255, 255, 255); border-right-width: 4px; border-right-style: solid; border-right-color: rgb(255, 255, 255); font-size: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; height: 1px; "&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id="wikiheader" style="margin-bottom: 1em; "&gt;&lt;span class="Apple-style-span" style="font-size: 16px; font-weight: bold;"&gt;The library is capable of doing requestCreateActivity() now.&lt;/span&gt;&lt;/div&gt;&lt;div id="wikiheader" style="margin-bottom: 1em; "&gt;&lt;span class="Apple-style-span" style="font-size: 16px; font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;h1 style="font-size: x-large; margin-top: 0px; "&gt;&lt;a name="Example_of_requestCreateActivity"&gt;Example of requestCreateActivity&lt;/a&gt;&lt;/h1&gt;&lt;a name="Example_of_requestCreateActivity"&gt;&lt;pre class="prettyprint" style="font-size: 110%; margin-left: 2em; padding-top: 0.5em; padding-right: 0.5em; padding-bottom: 0.5em; padding-left: 0.5em; border-left-width: 3px; border-left-style: solid; border-left-color: rgb(204, 204, 204); "&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;        &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136); "&gt;private&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136); "&gt;function&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; createActivity&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;():&lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136); "&gt;void&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;{&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136); "&gt;var&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136); "&gt;params&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;:&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102); "&gt;Object&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;=&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;{};&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136); "&gt;params&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;[&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;com&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;nextgenapp&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;opensocial&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;activity&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;.&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102); "&gt;Field&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;TITLE&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;]&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;=&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; &lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0); "&gt;"test activitiy title"&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;;&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136); "&gt;var&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; activity&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;:&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102); "&gt;Activity&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;=&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; container&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;newActivity&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;(&lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136); "&gt;params&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;);&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;&lt;br /&gt;               &lt;br /&gt;                container&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;requestCreateActivity&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;(&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;activity&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;,&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; com&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;nextgenapp&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;opensocial&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;.&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102); "&gt;CreateActivityPriority&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;HIGH&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;,&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; createActivityCallback&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;);&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;}&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136); "&gt;private&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136); "&gt;function&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; createActivityCallback&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;(&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;respItem&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;:&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102); "&gt;ResponseItem&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;):&lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136); "&gt;void&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;{&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span class="com" style="color: rgb(136, 0, 0); "&gt;// note: requestSendMessage() returns ResponseItem, not DataResponse.  &lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;&lt;br /&gt;                trace&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;(&lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0); "&gt;"createActivityCallback"&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;);&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102); "&gt;Alert&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;show&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;(&lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0); "&gt;"createActivityCallback.  haderror="&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;+&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; respItem&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;hadError&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;());&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136); "&gt;if&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;(&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;respItem&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;hadError&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;())&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;{&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;&lt;br /&gt;                        &lt;/span&gt;&lt;span class="com" style="color: rgb(136, 0, 0); "&gt;// get the response item&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;&lt;br /&gt;                        &lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102); "&gt;Alert&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;show&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;(&lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0); "&gt;"createActivityCallback.  errorCode="&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;+&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; respItem&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;getErrorCode&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;()&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;+&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; &lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0); "&gt;".  errorMessage="&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;+&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; respItem&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;getErrorMessage&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;());&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;&lt;br /&gt;                       &lt;br /&gt;                        &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136); "&gt;if&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;(&lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0); "&gt;"forbidden"&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;==&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; respItem&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;getErrorCode&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;())&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;{&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;&lt;br /&gt;                                &lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102); "&gt;Alert&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;show&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;(&lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0); "&gt;"user denied permission.  you have to ask user for permission."&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;);&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;&lt;br /&gt;                        &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;}&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;}&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0); "&gt;}&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0); "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/a&gt;&lt;p style="max-width: 65em; "&gt;&lt;a name="Example_of_requestCreateActivity"&gt;A full sample code can be found here: &lt;/a&gt;&lt;a href="http://opensocial-tutorial-trial.googlecode.com/svn/trunk/os-as-lib-081-test/src/ActivityExampleOrkut.mxml" rel="nofollow"&gt;http://opensocial-tutorial-trial.googlecode.com/svn/trunk/os-as-lib-081-test/src/ActivityExampleOrkut.mxml&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2218697746720039032-8383122582188968161?l=opensocial-actionscript-client.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensocial-actionscript-client.blogspot.com/feeds/8383122582188968161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/create-activity-feature-added-to.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/8383122582188968161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/8383122582188968161'/><link rel='alternate' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/create-activity-feature-added-to.html' title='Create Activity feature added to the library'/><author><name>Sol Wu</name><uri>http://www.blogger.com/profile/11976788592932814187</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2218697746720039032.post-100096978323859457</id><published>2009-02-20T22:26:00.000-08:00</published><updated>2009-02-20T10:30:16.810-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='example'/><category scheme='http://www.blogger.com/atom/ns#' term='actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial'/><title type='text'>Examples for reading &amp; writing appData</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;font-family:arial;font-size:13;"  &gt;&lt;h1 style="font-size: x-large; margin-top: 0px;"&gt;&lt;a name="Example_of_update_appData"&gt;Example of update appData&lt;/a&gt;&lt;/h1&gt;&lt;a name="Example_of_update_appData"&gt;&lt;pre class="prettyprint"  style="border-left: 3px solid rgb(204, 204, 204); padding: 0.5em; margin-left: 2em;font-size:110%;"&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;    &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;private&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;function&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; updateData&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;():&lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;void&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;       &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;var&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; dr&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;:&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;DataRequest&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; container&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;newDataRequest&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;();&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;       dr&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;add&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;dr&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;newUpdatePersonAppDataRequest&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;"VIEWER"&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;"testdatakey1"&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;'test'&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;));&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;       dr&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;send&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;updatePersonAppDataCallback&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;   &lt;br /&gt;       &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;private&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;function&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; updatePersonAppDataCallback&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;dataResp&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;:&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;DataResponse&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;):&lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;void&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;       &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;               &lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;Alert&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;show&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;"updatePersonAppDataCallback().  \n dataResp.hadError()="&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; dataResp&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;hadError&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;()&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;               &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;"\n dataResp.getErrorMessage()="&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; dataResp&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;getErrorMessage&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;());&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;             &lt;br /&gt;       &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/a&gt;&lt;h1 style="font-size: x-large; margin-top: 0px;"&gt;&lt;a name="Examples_of_fetch_appData"&gt;Examples of fetch appData&lt;/a&gt;&lt;/h1&gt;&lt;a name="Examples_of_fetch_appData"&gt;&lt;pre class="prettyprint"  style="border-left: 3px solid rgb(204, 204, 204); padding: 0.5em; margin-left: 2em;font-size:110%;"&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;        &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;private&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;function&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; fetchData&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;():&lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;void&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;       &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;               &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;var&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; dr&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;:&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;DataRequest&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; container&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;newDataRequest&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;();&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;               &lt;/span&gt;&lt;span class="com" style="color: rgb(136, 0, 0);"&gt;//var idSpec:IdSpec = container.newIdSpec({ com.nextgenapp.opensocial.IdSpec.Field.USER_ID : "VIEWER"});   // does not work.  has compile error.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;               &lt;/span&gt;&lt;span class="com" style="color: rgb(136, 0, 0);"&gt;//var idSpec:IdSpec = container.newIdSpec({ "USER_ID" : "VIEWER"}); // do this instead.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;               &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;var&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; idSpecParam&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;:&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;Object&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;{};&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;               idSpecParam&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;[&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;com&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;nextgenapp&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;opensocial&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;IdSpec&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;Field&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;USER_ID&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;]&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;"VIEWER"&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;;&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;               &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;var&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; idSpec&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;:&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;IdSpec&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; container&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;newIdSpec&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;idSpecParam&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;       dr&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;add&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;dr&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;newFetchPersonAppDataRequest&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;idSpec&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;[&lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;"testdatakey1"&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;],&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;null&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;),&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; opt_key&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;       dr&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;send&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;fetchPersonAppDataCallback&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;       &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;       &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;private&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;function&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; fetchPersonAppDataCallback&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;dataResp&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;:&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;DataResponse&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;):&lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;void&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;       &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;               trace&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;"fetchPersonAppDataCallback()"&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;               &lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;Alert&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;show&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;"fetchPersonAppDataCallback()"&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;               &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;if&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;dataResp&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;hadError&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;())&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;                       &lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;Alert&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;show&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;"error: "&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; dataResp&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;getErrorMessage&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;());&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;               &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;             &lt;br /&gt;               &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;var&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; appData&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;:&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;Object&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; dataResp&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;get&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;opt_key&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;).&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;getData&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;();&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;               &lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;Alert&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;show&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;"appData="&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; appData&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;             &lt;br /&gt;               &lt;/span&gt;&lt;span class="com" style="color: rgb(136, 0, 0);"&gt;// appData should have a member (user's id).  inside that, it should have a member&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;             &lt;br /&gt;               &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;var&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; appDataDisplay&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;:&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;String&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;""&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;;&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;               &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;for&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;var&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; propNameLevel1&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;:&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;String&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;in&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; appData&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;)&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;                       appDataDisplay &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;+=&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;"\n"&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; propNameLevel1 &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;" : "&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; appData&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;[&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;propNameLevel1&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;]);&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;                       &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;for&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;var&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; propNameLevel2&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;:&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;String&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;in&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; appData&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;[&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;propNameLevel1&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;])&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;                               appDataDisplay &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;+=&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;"\n----"&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; propNameLevel2 &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;" : "&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; appData&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;[&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;propNameLevel1&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;][&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;propNameLevel2&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;]);&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;                       &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;               &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;             &lt;br /&gt;               &lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;Alert&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;show&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;"appData expanded="&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; appDataDisplay&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;       &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/a&gt;&lt;p style="max-width: 65em;"&gt;&lt;a name="Examples_of_fetch_appData"&gt;A full sample code can be found here:&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;/a&gt;&lt;a href="http://opensocial-tutorial-trial.googlecode.com/svn-history/r180/trunk/os-as-lib-081-test/src/AppDataExampleOrkut.mxml" rel="nofollow" style="color: rgb(0, 0, 204);"&gt;http://opensocial-tutorial-trial.googlecode.com/svn-history/r180/trunk/os-as-lib-081-test/src/AppDataExampleOrkut.mxml&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2218697746720039032-100096978323859457?l=opensocial-actionscript-client.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensocial-actionscript-client.blogspot.com/feeds/100096978323859457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/examples-for-reading-writing-appdata.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/100096978323859457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/100096978323859457'/><link rel='alternate' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/examples-for-reading-writing-appdata.html' title='Examples for reading &amp; writing appData'/><author><name>Sol Wu</name><uri>http://www.blogger.com/profile/11976788592932814187</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2218697746720039032.post-4931918097236186968</id><published>2009-02-18T23:06:00.001-08:00</published><updated>2009-02-20T10:29:30.872-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='example'/><category scheme='http://www.blogger.com/atom/ns#' term='actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial'/><title type='text'>requestSendMessage Example with Callback</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;h1 style="font-size: x-large; margin-top: 0px;"&gt;&lt;a name="Sample_Code_for_requestSendMessage()_with_callback"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/h1&gt;&lt;a name="Sample_Code_for_requestSendMessage()_with_callback"&gt;&lt;pre class="prettyprint" style="border-left: 3px solid rgb(204, 204, 204); padding: 0.5em; font-size: 110%; margin-left: 2em;"&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;    &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;private&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;function&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; sendEmail&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;():&lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;void&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;var&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; msgParams&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;:&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;Object&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;{};&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;                msgParams&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;[&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;com&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;nextgenapp&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;opensocial&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;Message&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;Field&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;TITLE&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;]&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;'test title'&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;;&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;                msgParams&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;[&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;com&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;nextgenapp&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;opensocial&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;Message&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;Field&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;TYPE&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;]&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; com&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;nextgenapp&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;opensocial&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;Message&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;Type&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;EMAIL&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;;&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;       &lt;br /&gt;        &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;var&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; message&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;:&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;Message&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; container&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;newMessage&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;"test msg body"&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; msgParams&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;        container&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;requestSendMessage&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;([&lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;"VIEWER"&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;],&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; message&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; sendEmailCallback&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;     &lt;br /&gt;        &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;private&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;function&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; sendEmailCallback&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;respItem&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;:&lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;ResponseItem&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;):&lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;void&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span class="com" style="color: rgb(136, 0, 0);"&gt;// note: requestSendMessage() returns ResponseItem, not DataResponse.  &lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;                trace&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;"sendEmailCallback"&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;Alert&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;show&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;"sendEmailCallback.  haderror="&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; respItem&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;hadError&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;());&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span class="kwd" style="color: rgb(0, 0, 136);"&gt;if&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;respItem&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;hadError&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;())&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;                        &lt;/span&gt;&lt;span class="com" style="color: rgb(136, 0, 0);"&gt;// get the response item&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;                        &lt;/span&gt;&lt;span class="typ" style="color: rgb(102, 0, 102);"&gt;Alert&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;show&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;(&lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;"sendEmailCallback.  errorCode="&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; respItem&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;getErrorCode&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;()&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="str" style="color: rgb(0, 136, 0);"&gt;".  errorMessage="&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt; respItem&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;getErrorMessage&lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;());&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span class="pun" style="color: rgb(102, 102, 0);"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/a&gt;&lt;p style="max-width: 65em;"&gt;&lt;a name="Sample_Code_for_requestSendMessage()_with_callback"&gt;A full sample code can be found here:&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;/a&gt;&lt;a href="http://opensocial-tutorial-trial.googlecode.com/svn-history/r180/trunk/os-as-lib-081-test/src/SendMsgExampleOrkut.mxml" rel="nofollow"&gt;http://opensocial-tutorial-trial.googlecode.com/svn-history/r180/trunk/os-as-lib-081-test/src/SendMsgExampleOrkut.mxml&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2218697746720039032-4931918097236186968?l=opensocial-actionscript-client.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensocial-actionscript-client.blogspot.com/feeds/4931918097236186968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/requestsendmessage-example-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/4931918097236186968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/4931918097236186968'/><link rel='alternate' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/requestsendmessage-example-with.html' title='requestSendMessage Example with Callback'/><author><name>Sol Wu</name><uri>http://www.blogger.com/profile/11976788592932814187</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2218697746720039032.post-1725082810118473799</id><published>2009-02-18T23:02:00.001-08:00</published><updated>2009-02-18T23:05:34.030-08:00</updated><title type='text'>requestSendMessage() callback returns a ResponseItem, not DataResponse.</title><content type='html'>The following is javascript api behavior:&lt;br /&gt;This is common knowledge if you have use requestSendMessage() before.  requestSendMessage()’s callback function gives you a ResponseItem, not DataResponse.  In other functions like fetchPeopleRequest, it will return a DataResponse.  &lt;br /&gt;&lt;br /&gt;Since the javascript api behaves this way, our actionscript library will behave the same way.  &lt;br /&gt;&lt;br /&gt;Eg.  &lt;br /&gt;&lt;blockquote&gt;    private function sendEmail():void&lt;br /&gt;    {&lt;br /&gt;     var msgParams:Object = {};&lt;br /&gt;  msgParams[com.nextgenapp.opensocial.Message.Field.TITLE] = 'test title';&lt;br /&gt;  msgParams[com.nextgenapp.opensocial.Message.Field.TYPE] = com.nextgenapp.opensocial.Message.Type.EMAIL;&lt;br /&gt;     &lt;br /&gt;     var message:Message = container.newMessage("test msg body", msgParams);&lt;br /&gt;     container.requestSendMessage(["VIEWER"], message, sendEmailCallback);&lt;br /&gt;    }&lt;br /&gt;      &lt;br /&gt;        private function sendEmailCallback(respItem:ResponseItem):void &lt;br /&gt;        {&lt;br /&gt;  // note: requestSendMessage() returns ResponseItem, not DataResponse.  &lt;br /&gt;  trace("sendEmailCallback");&lt;br /&gt;  Alert.show("sendEmailCallback.  haderror=" + respItem.hadError());&lt;br /&gt;  if (respItem.hadError()) {&lt;br /&gt;   // get the response item&lt;br /&gt;   Alert.show("sendEmailCallback.  errorCode=" + respItem.getErrorCode() + ".  errorMessage=" + respItem.getErrorMessage());&lt;br /&gt;  }&lt;br /&gt; }&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2218697746720039032-1725082810118473799?l=opensocial-actionscript-client.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensocial-actionscript-client.blogspot.com/feeds/1725082810118473799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/requestsendmessage-callback-returns.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/1725082810118473799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/1725082810118473799'/><link rel='alternate' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/requestsendmessage-callback-returns.html' title='requestSendMessage() callback returns a ResponseItem, not DataResponse.'/><author><name>Sol Wu</name><uri>http://www.blogger.com/profile/11976788592932814187</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2218697746720039032.post-6527358485900805412</id><published>2009-02-18T02:11:00.000-08:00</published><updated>2009-02-23T18:08:25.748-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='api change'/><category scheme='http://www.blogger.com/atom/ns#' term='actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial'/><title type='text'>Changing constant value to small case</title><content type='html'>Currently, field constants have upper-case value.&lt;br /&gt;eg.&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-weight: bold;"&gt;public static const THUMBNAIL_URL:String = "THUMBNAIL_URL";&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;However, according to the spec, the value has been standardize to lower-case.&lt;br /&gt;&lt;br /&gt;An excerpt of the spec on http://wiki.opensocial.org/index.php?title=Opensocial.Person_(v0.8)&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;opensocial.Person.Field.THUMBNAIL_URL&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;   Person's photo thumbnail URL, specified as a string. This URL must be fully qualified. Relative URLs will not work in gadgets. This field may be used interchangeably with the string 'thumbnailUrl'.&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So we will start changing the value to lower case soon.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;eg.&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-weight: bold;"&gt;public static const THUMBNAIL_URL:String = "thumbnailUrl";&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2218697746720039032-6527358485900805412?l=opensocial-actionscript-client.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensocial-actionscript-client.blogspot.com/feeds/6527358485900805412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/currently-field-constants-have-upper.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/6527358485900805412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/6527358485900805412'/><link rel='alternate' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/currently-field-constants-have-upper.html' title='Changing constant value to small case'/><author><name>solwu</name><uri>http://www.blogger.com/profile/12115249955114888574</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2218697746720039032.post-7917971616597252213</id><published>2009-02-18T01:40:00.000-08:00</published><updated>2009-02-18T01:52:39.608-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial'/><title type='text'>requestSendMessage() is implemented</title><content type='html'>We have implemented opensocial.requestSendMessage().&lt;br /&gt;&lt;br /&gt;Here is the excerpt example code:&lt;br /&gt;&lt;br /&gt;       var msgParams:Object = {};&lt;br /&gt;       msgParams[com.nextgenapp.opensocial.Message.Field.TITLE] = 'test title';&lt;br /&gt;       msgParams[com.nextgenapp.opensocial.Message.Field.TYPE] = com.nextgenapp.opensocial.Message.Type.EMAIL;&lt;br /&gt;     &lt;br /&gt;       var message:Message = container.newMessage("test msg body", msgParams);&lt;br /&gt;       container.requestSendMessage(["VIEWER"], message);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A full sample code can be found here: &lt;a href="http://opensocial-tutorial-trial.googlecode.com/svn-history/r180/trunk/os-as-lib-081-test/src/SendMsgExampleOrkut.mxml"&gt;http://opensocial-tutorial-trial.googlecode.com/svn-history/r180/trunk/os-as-lib-081-test/src/SendMsgExampleOrkut.mxml&lt;/a&gt;&lt;br /&gt;&lt;mx:application mx="http://www.adobe.com/2006/mxml" layout="absolute" creationcomplete="init()"&gt;&lt;mx:button x="10" y="60" label="send email" click="sendEmail()"&gt;&lt;mx:button x="10" y="120" label="send notification" click="sendNotification()"&gt;&lt;br /&gt;&lt;/mx:button&gt;&lt;/mx:button&gt;&lt;/mx:application&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2218697746720039032-7917971616597252213?l=opensocial-actionscript-client.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensocial-actionscript-client.blogspot.com/feeds/7917971616597252213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/requestsendmessage-is-implemented.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/7917971616597252213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/7917971616597252213'/><link rel='alternate' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/requestsendmessage-is-implemented.html' title='requestSendMessage() is implemented'/><author><name>solwu</name><uri>http://www.blogger.com/profile/12115249955114888574</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2218697746720039032.post-1849113159201000016</id><published>2009-02-18T01:37:00.000-08:00</published><updated>2009-02-18T01:40:42.782-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='orkut'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial'/><title type='text'>Difference between email &amp; notification on Orkut</title><content type='html'>I am wondering: is there a difference between email &amp;amp; notification on Okrut?  I tried requestSendMessage() with email and notification.  They seem to do exactly the same thing.  Both result in an email being sent.  Is there a differnce?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2218697746720039032-1849113159201000016?l=opensocial-actionscript-client.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensocial-actionscript-client.blogspot.com/feeds/1849113159201000016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/difference-between-email-notification.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/1849113159201000016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/1849113159201000016'/><link rel='alternate' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/difference-between-email-notification.html' title='Difference between email &amp; notification on Orkut'/><author><name>solwu</name><uri>http://www.blogger.com/profile/12115249955114888574</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2218697746720039032.post-1603340337107438149</id><published>2009-02-18T01:11:00.000-08:00</published><updated>2009-02-18T01:20:28.944-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='event'/><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><title type='text'>Facebook Developer Garage Palo Alto - Feeds and Social Distribution</title><content type='html'>Facebook will host a Facebook Developer Garage in Palo Alto.  If you are a facebook app developer and you are in San Francisco Bay Area .   This should definitely worth your while to attend.  :) &lt;br /&gt;http://www.facebook.com/home.php#/event.php?eid=137109600304&amp;amp;ref=ts&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2218697746720039032-1603340337107438149?l=opensocial-actionscript-client.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensocial-actionscript-client.blogspot.com/feeds/1603340337107438149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/facebook-developer-garage-palo-alto.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/1603340337107438149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/1603340337107438149'/><link rel='alternate' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/facebook-developer-garage-palo-alto.html' title='Facebook Developer Garage Palo Alto - Feeds and Social Distribution'/><author><name>solwu</name><uri>http://www.blogger.com/profile/12115249955114888574</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2218697746720039032.post-1613740166997097213</id><published>2009-02-17T00:06:00.000-08:00</published><updated>2009-02-17T00:11:26.774-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='quirk'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial'/><title type='text'>DataResponse.getErrorMessage() showing undefined for updatePersonAppData</title><content type='html'>I was testing updatePersonAppData on orkut.  I deliberately tried to create an error by giving a wrong id such as "" instead of "VIEWER".  I find that hadError() does return true, but getErrorMessage() returns undefined.  I kind of expected getErrorMessage() to return something interesting to help us debug.  Sadly, it returns undefined.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2218697746720039032-1613740166997097213?l=opensocial-actionscript-client.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensocial-actionscript-client.blogspot.com/feeds/1613740166997097213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/dataresponsegeterrormessage-showing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/1613740166997097213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/1613740166997097213'/><link rel='alternate' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/dataresponsegeterrormessage-showing.html' title='DataResponse.getErrorMessage() showing undefined for updatePersonAppData'/><author><name>solwu</name><uri>http://www.blogger.com/profile/12115249955114888574</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2218697746720039032.post-3070435333329223192</id><published>2009-02-16T21:00:00.000-08:00</published><updated>2009-02-16T19:17:00.290-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='appData'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial'/><title type='text'>Preliminary AppData implementation</title><content type='html'>Preliminary AppData implementation is completed and tested.  You can update and fetch AppData.  Escape character is not yet supported.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;To update app data&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;     &lt;span style="font-family:courier new;"&gt;var dr:DataRequest = container.newDataRequest();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;       dr.add(dr.newUpdatePersonAppDataRequest("VIEWER", "testdatakey1", "testdata1"));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;       dr.send(updatePersonAppDataCallback);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;To fetch app data&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;span style="font-family:courier new;"&gt;var dr:DataRequest = container.newDataRequest();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   var idSpecParam:Object = {};&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;       idSpecParam[com.nextgenapp.opensocial.IdSpec.Field.USER_ID] = "VIEWER";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var idSpec:IdSpec = container.newIdSpec(idSpecParam);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;       dr.add(dr.newFetchPersonAppDataRequest(idSpec, ["testdatakey1"], null));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;       dr.send(updatePersonAppDataCallback);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The usage of the api is exactly the same as the opensocial javascript api.&lt;br /&gt;&lt;br /&gt;If you have any questions about usage of these 2 functions or you feel the interface method is that the best, please send your suggestions to us.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2218697746720039032-3070435333329223192?l=opensocial-actionscript-client.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensocial-actionscript-client.blogspot.com/feeds/3070435333329223192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/preliminary-appdata-implementation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/3070435333329223192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/3070435333329223192'/><link rel='alternate' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/preliminary-appdata-implementation.html' title='Preliminary AppData implementation'/><author><name>Sol Wu</name><uri>http://www.blogger.com/profile/11976788592932814187</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2218697746720039032.post-832610488281099834</id><published>2009-02-16T19:18:00.000-08:00</published><updated>2009-02-16T19:38:31.683-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='appData'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial'/><title type='text'>fetchPersonAppData data structure</title><content type='html'>opensocial javascript API's fetchPersonAppData returns an object with the following structure:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- person_id&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;nbsp&amp;nbsp    - [key, value]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;nbsp&amp;nbsp    - [key, value]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- person_id&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;nbsp&amp;nbsp    - [key, value]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;nbsp&amp;nbsp    - [key, value]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This structure retain the maximum flexibility so that it can return multiple person and multiple key at the same time.  However, it can easily confuse first-time users of our library if we return the raw data.  We are thinking whether we should return a more structured data back to the caller.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Structure: &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;AppData&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;nbsp&amp;nbsp    - PersonData&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp        - DataElement&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp        - DataElement&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;nbsp&amp;nbsp    - PersonData&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp        - DataElement&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp        - DataElement    &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;AppData.getPersonDatas() returns an Array of PersonData object.  Each PersonData contains an array of DataElement.  Each DataElement is a [key, value] pair.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Advantage of returning a structured data&lt;/span&gt;&lt;br /&gt;It will be easier for the user of our library to decipher the data.  Flex Builder's code-helper will be useful in this case.  Without refering back at the javascript documentation, user can still figure out the data structure of the data being returned.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Disadvantage&lt;/span&gt;&lt;br /&gt;It will be a departure from the javascript API.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you have strong feeling about going one way or the other, please let us know.&lt;/key,value&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2218697746720039032-832610488281099834?l=opensocial-actionscript-client.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensocial-actionscript-client.blogspot.com/feeds/832610488281099834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/opensocial-javascript-apis.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/832610488281099834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/832610488281099834'/><link rel='alternate' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/opensocial-javascript-apis.html' title='fetchPersonAppData data structure'/><author><name>Sol Wu</name><uri>http://www.blogger.com/profile/11976788592932814187</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2218697746720039032.post-7194059846211304620</id><published>2009-02-16T19:17:00.000-08:00</published><updated>2009-02-16T19:17:27.162-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='opensocial event'/><title type='text'>WeekendApps - OpenSocial</title><content type='html'>My friend Waleed is organizing a WeekendApps event focused on OpenSocial.  It should be fun and exciting.  It will be hold on Feb 20, 2009.  For more details, please see http://weekendapps.com.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;What is WeekendApps ?  &lt;/span&gt;&lt;br /&gt;(description copied from WeekendApps Wiki)&lt;br /&gt;WeekendApps is a 3-day hackathon. Arrive on Friday, join a team, build an app, launch on Sunday.  Sign up here: &lt;a href="http://weekendapps.com/" class="external free" title="http://weekendapps.com" rel="nofollow"&gt;http://weekendapps.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2218697746720039032-7194059846211304620?l=opensocial-actionscript-client.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensocial-actionscript-client.blogspot.com/feeds/7194059846211304620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/weekendapps-opensocial.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/7194059846211304620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/7194059846211304620'/><link rel='alternate' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/weekendapps-opensocial.html' title='WeekendApps - OpenSocial'/><author><name>Sol Wu</name><uri>http://www.blogger.com/profile/11976788592932814187</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2218697746720039032.post-820707649998764831</id><published>2009-02-14T09:14:00.000-08:00</published><updated>2009-02-14T09:23:52.890-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial'/><title type='text'>opensocial javascript api rants</title><content type='html'>Opensocial javascript api is very flexible, this is a benefit when there are multiple containers need to implement the same standard.  It also allows batch multiple commands.  I think people already know its advantages, so I’m not going to rant about advantages.  I’m just going to do some ranting about some of the shortcomings that comes with these flexibilities.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;1.    cumbersome&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Instead of one call like:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;opensocial.person.getViewer();&lt;/blockquote&gt;it takes 4 lines to do the same thing.  The following code is not actual code, it only illustrates the point.&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;var req = opensocial.newDataRequest();&lt;br /&gt;var personReq = req.newFetchPersonRequest();&lt;br /&gt;req.add(personReq, “…”);&lt;br /&gt;req.send();&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;2. usually, when there is objects, it is easy to infer the data structure.  With getField()/setField() instead of property, it is harder to infer data structure.  Also, we don’t get the benefit of the code-helper by IDE.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Solution?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;To address #1:&lt;/span&gt;&lt;br /&gt;Perhaps we should have some new api call build on top of the existing api to make things more terse:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Eg.&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;OpensocialShortcut.person.getViewer();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;OpensocialShortcut.person.getFriends();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;OpensocialShortcut.data.update();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;OpensocialShortcut.data.fetch();&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;To address #2:&lt;/span&gt;&lt;br /&gt;On the actionscript api, perhaps we should have extension to allow people to access object properties like this:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;person.name.firstName&lt;br /&gt;person.gender.getKey()&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;instead of&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;person.getField(opensocial.Person.Field.NAME).getField(opensocial.Name.Field.FIRST_NAME);&lt;br /&gt;person.getField(opensocial.Person.Field.GENDER).getKey();&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;---------&lt;br /&gt;&lt;br /&gt;What do you think?  Is it better to have the API call featured like the one shown in “Solution” section?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2218697746720039032-820707649998764831?l=opensocial-actionscript-client.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensocial-actionscript-client.blogspot.com/feeds/820707649998764831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/opensocial-javascript-api-rants.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/820707649998764831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/820707649998764831'/><link rel='alternate' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/opensocial-javascript-api-rants.html' title='opensocial javascript api rants'/><author><name>Sol Wu</name><uri>http://www.blogger.com/profile/11976788592932814187</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2218697746720039032.post-283971426357155469</id><published>2009-02-11T18:26:00.000-08:00</published><updated>2009-02-11T18:29:48.393-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='orkut'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='myspace'/><title type='text'>Difference between MySpace and Orkut – part2</title><content type='html'>Person object returned by JavaScript API have different types for properties.&lt;br /&gt;&lt;br /&gt;Orkut&lt;br /&gt;The Person object's NAME property contains an opensocial.Name object. GENDER property contains an opensocial.Enum object.&lt;br /&gt;&lt;br /&gt;MySpace&lt;br /&gt;The Person object returned by MySpace JavaScript API have string for NAME and GENDER.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2218697746720039032-283971426357155469?l=opensocial-actionscript-client.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensocial-actionscript-client.blogspot.com/feeds/283971426357155469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/difference-between-myspace-and-orkut_11.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/283971426357155469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/283971426357155469'/><link rel='alternate' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/difference-between-myspace-and-orkut_11.html' title='Difference between MySpace and Orkut – part2'/><author><name>solwu</name><uri>http://www.blogger.com/profile/12115249955114888574</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2218697746720039032.post-236177271622438711</id><published>2009-02-11T18:23:00.000-08:00</published><updated>2009-02-11T18:29:29.711-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='orkut'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='myspace'/><title type='text'>Difference between MySpace and Orkut – part 1</title><content type='html'>Difference between MySpace and Orkut – part 1&lt;br /&gt;&lt;br /&gt;We implement the MySpace newFetchPersonRequest() first.  Then we try to implement newFetchPersonRequest() for Orkut.  Then we found out that there are a few thing that MySpace sample code is different from the Orkut code.&lt;br /&gt;&lt;br /&gt;The following are Javascript code.  On Actionscript side, we abstract the difference, so the Actionscript API is the same across the two containers.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var dataRequest = opensocial.newDataRequest();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var OWNERReq = dataRequest.newFetchPersonRequest(oParam.view, param);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;dataRequest.add(OWNERReq, &lt;span style="color: rgb(255, 0, 0);"&gt;'viewer'&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;on MySpace code, it has&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var os = &lt;span style="color: rgb(255, 0, 0);"&gt;opensocial.Container.get()&lt;/span&gt;; // different from standard&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var dataRequest = os.newDataRequest();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var OWNERReq = os.newFetchPersonRequest(oParam.view, param);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;dataRequest.add(OWNERReq); // different from standard, does not require the extra name.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2218697746720039032-236177271622438711?l=opensocial-actionscript-client.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensocial-actionscript-client.blogspot.com/feeds/236177271622438711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/difference-between-myspace-and-orkut.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/236177271622438711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/236177271622438711'/><link rel='alternate' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/difference-between-myspace-and-orkut.html' title='Difference between MySpace and Orkut – part 1'/><author><name>solwu</name><uri>http://www.blogger.com/profile/12115249955114888574</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2218697746720039032.post-4298480703329288170</id><published>2009-02-11T18:20:00.001-08:00</published><updated>2009-02-11T18:29:08.417-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial'/><title type='text'>Overview</title><content type='html'>Opensocial-actionscript-client blog&lt;br /&gt;&lt;br /&gt;This blog will show the development activities and some general rants and discussion about opensocial-actionscript-client project. opensocial-actionscript-client is an opensource library for actionscript (and Flex/Flash) to use opensocial API. :)&lt;br /&gt;&lt;br /&gt;The code is opensourced and hosted at:&lt;br /&gt;http://code.google.com/p/opensocial-actionscript-client&lt;br /&gt;&lt;br /&gt;The download is located at:&lt;br /&gt;http://code.google.com/p/opensocial-actionscript-client/downloads/list&lt;br /&gt;&lt;br /&gt;New update are shown at:&lt;br /&gt;http://code.google.com/p/opensocial-actionscript-client/updates/list&lt;br /&gt;&lt;br /&gt;What is opensocial-actionscript-client api&lt;br /&gt;Opensocial-actionscript-client is an OpenSocial library for Actionscript/Flex/Flash.  This is an opensource library.  It allows Actionscript/Flex/Flash client to access OpenSocial API.&lt;br /&gt;&lt;br /&gt;A Little More Detail About the Architecture&lt;br /&gt;The library uses Opensocial Javascript API, not REST API.  It was a careful and necessary decision to go for Javascript API for the following reasons:&lt;br /&gt;1.    Some containers have a closed-off crossdomain.xml (which means Flash cannot connect to their server)&lt;br /&gt;2.    Not all containers support REST API yet&lt;br /&gt;These are restrictions that cannot be overcome, unless the containers (the social networks sites) change their policies.&lt;br /&gt;&lt;br /&gt;Current OpenSocial Version&lt;br /&gt;Currently, the API uses OpenSocial 0.8, the latest version at the moment.&lt;br /&gt;&lt;br /&gt;Contribution/Feedback&lt;br /&gt;You are welcome to contribute or add to the library.  It is opensource!  :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2218697746720039032-4298480703329288170?l=opensocial-actionscript-client.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensocial-actionscript-client.blogspot.com/feeds/4298480703329288170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/overview.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/4298480703329288170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/4298480703329288170'/><link rel='alternate' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/overview.html' title='Overview'/><author><name>solwu</name><uri>http://www.blogger.com/profile/12115249955114888574</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2218697746720039032.post-6596718241056279342</id><published>2009-02-11T14:27:00.000-08:00</published><updated>2009-02-11T15:16:44.285-08:00</updated><title type='text'>Design Concept</title><content type='html'>&lt;!--[if !mso]&gt; &lt;style&gt; v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} &lt;/style&gt; &lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" latentstylecount="156"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face  {font-family:Wingdings;  panose-1:5 0 0 0 0 0 0 0 0 0;  mso-font-charset:2;  mso-generic-font-family:auto;  mso-font-pitch:variable;  mso-font-signature:0 268435456 0 0 -2147483648 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal  {mso-style-parent:"";  margin:0in;  margin-bottom:.0001pt;  mso-pagination:widow-orphan;  font-size:12.0pt;  font-family:"Times New Roman";  mso-fareast-font-family:"Times New Roman";} h1  {mso-style-next:Normal;  margin-top:12.0pt;  margin-right:0in;  margin-bottom:3.0pt;  margin-left:0in;  mso-pagination:widow-orphan;  page-break-after:avoid;  mso-outline-level:1;  font-size:16.0pt;  font-family:Arial;  mso-font-kerning:16.0pt;} p.MsoCaption, li.MsoCaption, div.MsoCaption  {mso-style-noshow:yes;  mso-style-next:Normal;  margin:0in;  margin-bottom:.0001pt;  mso-pagination:widow-orphan;  font-size:10.0pt;  font-family:"Times New Roman";  mso-fareast-font-family:"Times New Roman";  font-weight:bold;} @page Section1  {size:8.5in 11.0in;  margin:1.0in 1.25in 1.0in 1.25in;  mso-header-margin:.5in;  mso-footer-margin:.5in;  mso-paper-source:0;} div.Section1  {page:Section1;}  /* List Definitions */  @list l0  {mso-list-id:482039640;  mso-list-type:hybrid;  mso-list-template-ids:794872756 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l0:level1  {mso-level-tab-stop:.5in;  mso-level-number-position:left;  text-indent:-.25in;} @list l1  {mso-list-id:955063614;  mso-list-type:hybrid;  mso-list-template-ids:351160118 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l1:level1  {mso-level-number-format:bullet;  mso-level-text:;  mso-level-tab-stop:.5in;  mso-level-number-position:left;  text-indent:-.25in;  font-family:Symbol;} @list l2  {mso-list-id:1733111960;  mso-list-type:hybrid;  mso-list-template-ids:-990862232 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l2:level1  {mso-level-tab-stop:39.0pt;  mso-level-number-position:left;  margin-left:39.0pt;  text-indent:-.25in;} ol  {margin-bottom:0in;} ul  {margin-bottom:0in;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable  {mso-style-name:"Table Normal";  mso-tstyle-rowband-size:0;  mso-tstyle-colband-size:0;  mso-style-noshow:yes;  mso-style-parent:"";  mso-padding-alt:0in 5.4pt 0in 5.4pt;  mso-para-margin:0in;  mso-para-margin-bottom:.0001pt;  mso-pagination:widow-orphan;  font-size:10.0pt;  font-family:"Times New Roman";  mso-ansi-language:#0400;  mso-fareast-language:#0400;  mso-bidi-language:#0400;} &lt;/style&gt; &lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:shapedefaults ext="edit" spidmax="1043"&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:shapelayout ext="edit"&gt;   &lt;o:idmap ext="edit" data="1"&gt;  &lt;/o:shapelayout&gt;&lt;/xml&gt;&lt;![endif]--&gt;    &lt;p class="MsoNormal"&gt;The main goal for this project is to develop a client-based actionscript-to-opensocial framework reusable across multiple container platforms.&lt;span style=""&gt;  &lt;/span&gt;This means being able to write once a flash client application and run anywhere on any platform opensocial is supported. Our initial release will not have the complete implementation. However, as this is a framework and open source, we’ll build the features on an as-needed basis. We’ll also rely on the community to help expand and support the features for opensocial and other container specific platforms.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;Currently, MySpace has an actionscript library which implements opensocial API using RESTful interface for communication with the backend server. There are two issues for the flash client in using this approach:&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="1" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;If the      client is directly communicating with the container itself, it must assume      that the container has a ‘crossdomain.xml’ policy on its server to bypass      the security restrictions of Flash applications. Otherwise, the      aforementioned API will not work.&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;The      RESTful APIs as defined by Google’s opensocial are meant for      Server-to-Server communication. So in essence, it’s not meant for a flash      application to use such mechanism to communicate with the opensocial      containers.&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Here’s where our framework will come in. We want to create a framework/library which can be used by client-side flex application that can bypass security issues such as the cross-domain policy. This can be done by creating a framework/library which sits on top of the opensocial javascript library. By doing this, we will be bypassing the flash security restrictions which requires ‘crossdomain.xml’. Since this will also be using the Javascript implementations provided by the platform containers, it will also bypass any security restrictions of Javascript itself. The diagram shows our current design.&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_k3W_hve7e1s/SZNb7jSRV2I/AAAAAAAAAIk/pRp6d7BAqIM/s1600-h/diagram1.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 262px;" src="http://1.bp.blogspot.com/_k3W_hve7e1s/SZNb7jSRV2I/AAAAAAAAAIk/pRp6d7BAqIM/s320/diagram1.PNG" alt="" id="BLOGGER_PHOTO_ID_5301682264987490146" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;The framework/library will consist of an actionscript library which runs on top of a Actionscript/Javascript Bridge. The actionscript library will consists of all opensocial functions and classes created for a specific version. The Actionscript/Javascript bridge will link the library to the platform’s Javascript opensocial implementation using Flash’s ExternalInterface class and an XML file corresponding to the opensocial implementation. There are a couple benefits of doing it this way:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 39pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;1.&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;      &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Using the bridge in this manner allows us to write everything in actionscript. There is no javascript code that needs to be loaded separately with this library. All Javascript code will be incorporated into the bridge through the XML files generated.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 39pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;2.&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;      &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Having such decoupling promotes reusability. We now can create the library based on different versions of the opensocial API. &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 39pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;3.&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;      &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Designing it this way also creates flexibility. We now can build applications which can run on any opensocial platform by switching in and out the Container’s implementation. This means no change in the application code whatsoever.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 39pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;4.&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;      &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;As mentioned earlier, the Javascript opensocial implementation is a requirement for all opensocial containers. This means that applications running on our framework can technically run any opensocial network and work immediately as long as they have not used container specific opensocial calls.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;h1&gt;Data Structure&lt;/h1&gt;  &lt;p class="MsoNormal"&gt;The following are the initial design of actionscript classes created for this framework based on opensocial v. 0.81:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;ul style="margin-top: 0in;" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;Activity      – opensocial Activity&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Address      – opensocial Address&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;CreateActivityPriority      – opensocial CreateActivityPriority&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;DataRequest      – opensocial DataRequest&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Environment      – opensocial Environment&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;IdSpec      – opensocial IdSpec&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;MediaItem      – opensocial MediaItem&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Message      – opensocial Message&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Name –      opensocial Name&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;NavigationParameters      – opensocial NavigationParameters&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;OSContainer      – Represents the opensocial container&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Organization      – opensocial Organization&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;OrkutContainer      – Implementation of OSContainer for Orkut&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;OrkutOSFactory      – Bridge to map actionscript opensocial calls with javascript calls using      XML files for Orkut&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;OSXmlFactory      – Factory to load XML representation of opensocial Javascript function&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Permission      – opensocial Permission&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Person      – opensocial Person&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Phone      – opensocial Phone&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Hi5Container      – Implementation of OSContainer for Hi5&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Hi5OSFactory      – Bridge to map actionscript opensocial calls with javascript calls using      XML files for Hi5&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;MySpaceContainer      – Implementation of OSContainer for MySpace&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;MySpaceOSFactory      – Bridge to map actionscript opensocial calls with javascript calls using      XML files for MySpace&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;XMLLoader      – Helper class to load the XML file&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_k3W_hve7e1s/SZNZYWV9GJI/AAAAAAAAAIc/O1W5qOoHQ74/s1600-h/diagram2.PNG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 278px;" src="http://4.bp.blogspot.com/_k3W_hve7e1s/SZNZYWV9GJI/AAAAAAAAAIc/O1W5qOoHQ74/s320/diagram2.PNG" alt="" id="BLOGGER_PHOTO_ID_5301679461194602642" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: -81pt; page-break-after: avoid;"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1026" type="#_x0000_t75" style="'width:590.25pt;height:513pt'" ole=""&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\aatong\LOCALS~1\Temp\msohtml1\01\clip_image002.emz" title=""&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:oleobject type="Embed" progid="Visio.Drawing.11" shapeid="_x0000_i1026" drawaspect="Content" objectid="_1295869329"&gt;  &lt;/o:OLEObject&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;/p&gt;  &lt;p class="MsoCaption" style="text-indent: -1in;"&gt;Figure &lt;!--[if supportFields]&gt;&lt;span style="'mso-element:field-begin'"&gt;&lt;/span&gt;&lt;span style="'mso-spacerun:yes'"&gt; &lt;/span&gt;SEQ Figure \* ARABIC &lt;span style="'mso-element:"&gt;&lt;/span&gt;&lt;![endif]--&gt;&lt;span style=""&gt;1&lt;/span&gt;&lt;!--[if supportFields]&gt;&lt;span style="'mso-element:field-end'"&gt;&lt;/span&gt;&lt;![endif]--&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: -81pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: -81pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2218697746720039032-6596718241056279342?l=opensocial-actionscript-client.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensocial-actionscript-client.blogspot.com/feeds/6596718241056279342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/design-concept.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/6596718241056279342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2218697746720039032/posts/default/6596718241056279342'/><link rel='alternate' type='text/html' href='http://opensocial-actionscript-client.blogspot.com/2009/02/design-concept.html' title='Design Concept'/><author><name>Aaron</name><uri>http://www.blogger.com/profile/17720712289430777421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_k3W_hve7e1s/SZNb7jSRV2I/AAAAAAAAAIk/pRp6d7BAqIM/s72-c/diagram1.PNG' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
