複数件activityIdを指定したnewFetchActivitiesRequestできた。
GadgetXMLで、表示のところのJavaScriptで間違えがあったので、ちょっとだけ修正。
修正したJavaScriptは、以下な感じ。
function getTwoData() {
/*===================================================================*/
/* OWNER IdSpec */
/*===================================================================*/
var idspec = new opensocial.IdSpec();
idspec.setField(opensocial.IdSpec.Field.USER_ID, opensocial.IdSpec.PersonId.OWNER);
idspec.setField(opensocial.IdSpec.Field.GROUP_ID, opensocial.IdSpec.GroupId.SELF);
var params = {};
params['activityId'] = [
'tjt0tt30k9f0hje01eu0emq0zr505bd0',
'w920slc0ze20nmf0diq0cnk0mj71kbz0'
];
/*===================================================================*/
/* DataRequestオブジェクトを作成し、 */
/* そこにActivity取得リクエストを追加. */
/* レスポンスを取得するときのキーは'get_activity' */
/*===================================================================*/
var req = opensocial.newDataRequest();
req.add(req.newFetchActivitiesRequest(idspec, params), 'get_activity');
/*===================================================================*/
/* 送信! */
/*===================================================================*/
req.send(function(response){
var activity = response.get('get_activity')
if (activity.hadError()) {
document.getElementById('result').innerHTML
= 'エラーだったよ:' + activity.getErrorMessage();
return;
}
var out = document.createElement('ul');
if (activity.getData().size() == 0) {
var li = document.createElement('li');
li.innerHTML = 'Activity0件';
out.appendChild(li);
}
activity.getData().each(function(act) {
var li = document.createElement('li');
var title = act.getField(opensocial.Activity.Field.TITLE);
var media = act.getField(opensocial.Activity.Field.MEDIA_ITEMS);
if (media != undefined) {
for (var ii=0, len = media.length; ii < len; ii++) {
if (media[ii].getField(opensocial.MediaItem.Field.TYPE) == opensocial.MediaItem.Type.IMAGE) {
title +=
'<br /><img src="'
+ media[ii].getField(opensocial.MediaItem.Field.URL);
+ '/>';
}
}
}
li.innerHTML = title;
out.appendChild(li);
});
document.getElementById('result').appendChild(out);
});
}
で、jsonrpccontainer.jsは修正済みのものを使用っと。
で、メインのサーバ側ActivityServiceのgetActivities(activityId複数版)。
public Future<RestfulCollection<Activity>> getActivities(UserId userId, GroupId groupId,
String appId, Set<String> fields, CollectionOptions options, Set<String> activityIds, SecurityToken token)
throws ProtocolException {
if (logger.isDebugEnabled()) {
logger.debug("userId:[" + userId + "]:");
logger.debug("groupId:[" + groupId + "]:");
logger.debug("appId:[" + appId + "]:");
for (String field: fields) {
logger.debug("field:[" + field + "]");
}
logger.debug("options:sortBy:[" + options.getSortBy() + "]");
logger.debug("options:sortOrder:[" + options.getSortOrder() + "]");
logger.debug("options:filter:[" + options.getFilter() + "]");
logger.debug("options:filterOperation:[" + options.getFilterOperation() + "]");
logger.debug("options:filterValue:[" + options.getFilterValue() + "]");
logger.debug("options:first:[" + options.getFirst() + "]");
logger.debug("options:max:[" + options.getMax() + "]");
logger.debug("options:updatedSince:[" + options.getUpdatedSince() + "]");
for (String activityId: activityIds) {
logger.debug("activityId:[" + activityId + "]");
}
}
return ImmediateFuture.newInstance(
new RestfulCollection<Activity>(
logic.getActivities(userId, activityIds, token, options.getFirst(), options.getMax())));
}
logic.getActivitiesは、userIdとactivityIdsをキーにテーブルからデータを持ってくるだけ。
そんだけ。
次は最後のactivityIds指定なし版のnewFetchActivitiesRequestのサーバ側実装をやってみる。
.
0 コメント:
コメントを投稿