Day 2: differences between opensocial 0.7 and 0.8

In my playing yesterday I was trying to extract whether a viewing user had the app installed. The user attribute HAS_APP needed to be added to the request in order to return this, this caused some bother as it appears that HAS_APP is only available in opensocial 0.8 and the default on the MySpace platform is 0.7. However, upgrading to 0.8 required changing a few things.

opensocial.DataRequest.PersonId.OWNER;
opensocial.DataRequest.PersonId.VIEWER;

respectively become

opensocial.IdSpec.PersonId.OWNER;
opensocial.IdSpec.PersonId.VIEWER;

I then received the following error which hadn’t occured before.

data.get(opensocial.IdSpec.PersonId.OWNER) is undefined
[Break on this error] var owner = data.get(opensocial.IdSpec.PersonId.OWNER).getData();

It seems that request.add now takes two arguments, the second being a handle to extract the result from in the callback function.

dataReqObj = os.newDataRequest();
var viewerReq = os.newFetchPersonRequest(v);
//dataReqObj.add(viewerReq);
dataReqObj.add(viewerReq, 'viewer');
dataReqObj.send(viewerResponse);

function viewerResponse(data) {
//  var viewer = data.get(opensocial.IdSpec.PersonId.VIEWER).getData();
  var viewer = data.get('viewer').getData();
  heading = 'Hello, ' + viewer.getDisplayName();
  var has_app = viewer.getField(opensocial.Person.Field.HAS_APP);
  if (has_app) {
     heading += '<p>You have this app</p>';
  }
  document.getElementById('viewer').innerHTML = heading;
}

A detailed list of changes between 0.7 and 0.8 are listed here.

http://wiki.developer.myspace.com/index.php?title=OpenSocial_Version_0.8_Breaking_Changes