複数件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 +=
- '
- <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 コメント:
コメントを投稿