intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01

Copyright © 2012 NTT DATA INTRAMART CORPORATION

↑Top

1

intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01

目次
1. 改訂情報
2. はじめに2.1. 本書の目的
2.2. 対象読者
2.3. 本書の構成
3. アプリケーション連携プログラム
3.1. サンプル実装
4. メッセージ種別追加プログラム
4.1. サンプル実装
5. 送信側 IM-Propagation 追加プログラム
5.1. 受信側 IM-Propagation 一覧
5.2. サンプル実装

2

intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01

改訂情報
変更年月日

変更内容

2012-12-21

初版

2013-07-01

第2版

下記を追加・変更しました「メッセージ種別追加プログラム」のサンプルを修正

2014-04-01

第3版

下記を追加・変更しました「メッセージ種別追加プログラム」のサンプルを修正、タイムライン表示用SSJSの追記

2014-05-01

第4版

下記を追加・変更しました
IMBox 拡張プログラミングガイドから IMBox プログラミングガイドに名称を変更「送信側 IM-Propagation 追加プログラム」を追記

3

intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01

はじめに
本書の目的
本書では IMBox の機能を拡張するユーザプログラムを開発する場合の基本的な方法や注意点等について説明します。

対象読者
次の開発者を対象としてます。
独自に作成したアプリケーションを IMBox と連携させたい。
IMBox に独自のメッセージ種別を追加し、 IMBox 内で使用したい。
IM-Propagation を利用した通知するプログラム（トリガ）を実装したい。
次の内容を理解していることが必須となります。
IMBoxの仕様
Javaを理解している開発者
サーバサイドJavaScriptを理解している開発者

本書の構成
本書は上記の対象読者に応じて次の２つの構成を取っています。

アプリケーション連携プログラム
アプリケーション連携を実現するための設定やプログラミング方法について説明します。

メッセージ種別追加プログラム
メッセージ種別追加を実現するための設定やプログラミング方法について説明します。

送信側 IM-Propagation 追加プログラム
IM-Propagation を利用して、IMBox連携を実現するための送信側のプログラミング方法について説明します。

4

intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01

アプリケーション連携プログラム
独自に作成したアプリケーションを、intra-martが提供するAPIを利用することで、次に挙げる例のような処理ができます。
アプリケーションからの通知メッセージをApplicationBoxに投稿する。
アプリケーション情報をウォッチする。
ウォッチされたアプリケーション情報からメッセージをApplicationBoxに投稿する。

項目
サンプル実装設定ファイルの作成
ApplicationBoxへの投稿処理の作成
アプリケーション情報のウォッチ処理の作成
ApplicationBoxへのメッセージ投稿処理の作成

サンプル実装ここではサンプルとして、製品管理システムからApplicationBoxへの通知を行う機能の実装方法について説明します。

作成する資材は以下となります。
1. 設定ファイルの作成
2. メッセージ種別投稿欄の表示画面の作成
3. アプリケーション情報のウォッチ処理の作成

5intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01
4. ApplicationBoxへのメッセージ投稿処理の作成

設定ファイルの作成
アプリケーション連携を行うために、作成したアプリケーションに以下のファイルを設定してください。
設定ファイル例
src/main/conf/imbox-application-config/seihin.xml
1
2
3
4
5
6
7
8
9
10
11
12

<?xml version="1.0" encoding="UTF-8"?><tns:imbox-application-config
xmlns:tns="http://www.intra-mart.jp/imbox/imbox-application-config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.intra-mart.jp/imbox/imbox-application-config ../../schema/imbox-applicationconfig.xsd "><tns:application
applicationCd="seihin"
applicationName="CAPTION.IMBOX.SEIHIN"
iconPath="application/appli.png"
messageTypeCd="MESSAGE_TYPE_MESSAGE" /></tns:imbox-application-config><tns:application> タグでは以下の属性について設定を行います。
属性

内容

applicationCd

アプリケーションの識別ID

applicationName アプリケーション表示名のプロパティID
iconPath

アプリケーション表示画像のパス

messageTypeCd

メッセージ種別識別CD

コラム
iconPath が未指定の場合は、 IMBox で用意しているデフォルトのアイコン画像が適用されます。
iconPath を指定する場合、Storage領域に画像を設定してください。
messageTypeCd に MESSAGE_TYPE_MESSAGE を設定した場合は、 IMBox で用意しているメッセージ形式でタイムラインに表示されます。
独自の形式でApplicationBoxに表示を行いたい場合はメッセージ種別を追加し、追加したメッセージ種別識別CDを設定してください。
メッセージ種別の追加については メッセージ種別追加プログラム を参照してください。

iconPathを指定しない場合

6intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01

iconPathを指定した場合

ApplicationBoxへの投稿処理の作成
アプリケーション連携を設定した、アプリケーションからの通知メッセージをApplicationBoxに投稿する。
アプリケーションから通知をしたいタイミングで、以下の処理を実装してください。
実装例
IMBox にメッセージを投稿するために、 imbox.ApplicationBoxService#sendNoticeMessage() を利用します。

7

intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01
src/main/jssp/src/kintai/register.js
1
2
3
4
5
6
7
8
9
10

function send(){var applicationBoxService = new imbox.ApplicationBoxService();var message = {applicationCd : 'seihin',sendUserCd : 'aoyagi',
messageText : '製品情報が登録されました。',
messageTypeCd : 'MESSAGE_TYPE_MESSAGE',};
applicationBoxService.sendNoticeMessage(message, ['sekine']);}

通知メッセージ情報として、以下のパラメータを設定しています。
パラメータ

内容

applicationCd

アプリケーションの識別ID

sendUserCd

送信ユーザコード

messageText

表示するメッセージ

messageTypeCd メッセージ種別識別CD

コラム
第二引数には、アプリケーション内のウォッチ行う各情報毎の識別IDを指定します。
上記サンプルでは１件だけ設定していますが、複数の識別IDを指定することができます。

上記の処理が行われた場合、関根さん(sekine)のApplicationBoxに製品情報の登録通知が以下のように表示されます。

8

intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01

アプリケーション情報のウォッチ処理の作成
アプリケーション情報をウォッチする実装のサンプルです。
アプリケーションのウォッチを行った場合、ウォッチを行ったアプリケーション情報に変更があった際にApplicationBoxへ通知されます。
ウォッチを行いたいアプリケーション情報に対して、以下の処理を実装してください。
実装例
アプリケーションをウォッチするために、 imbox.ApplicationOperations#watch() を利用します。
src/main/jssp/src/kintai/watch.js
1
2
3
4
5
6
7
8
9
10

function watch(){var applicationOperations = new imbox.ApplicationOperations();
var applicationCd = 'seihin';var entry4Targets = [];entry4Targets.push({
targetId : 'iac',targetName : 'Accel Collaboration'});
applicationOperations.watch(applicationCd,entry4Targets);}

ウォッチ情報として、以下のパラメータを設定しています。

9intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01
パラメータ

内容

applicationCd アプリケーションの識別ID
targetId

ウォッチ対象のID

targetName

ウォッチ対象の名称

コラム
第二引数には、アプリケーション内のウォッチを行う各情報毎の識別IDを指定します。
上記サンプルでは１件だけ設定していますが、複数の識別IDを指定することができます。
ウォッチを解除する場合は imbox.ApplicationOperations#unwatch() を利用してください。

上記の処理が行われた場合、[ IMBox の一覧] > [ウォッチアプリケーション画面] に以下のように表示されます。

10

intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01

ApplicationBoxへのメッセージ投稿処理の作成
ウォッチしたアプリケーション情報から、メッセージをApplicationBoxに投稿する実装のサンプルです。
ウォッチを実装したアプリケーション情報に変更があった際にApplicationBoxに通知します。
アプリケーション情報の更新タイミングで、以下の処理を実装してください。
実装例
IMBox にメッセージを投稿するために、 imbox.ApplicationBoxService#sendWatchMessage() を利用します。
src/main/jssp/src/kintai/update.js
1
2
3
4
5
6
7
8
9
10
11

function sendWatcher(){var applicationBoxService = new imbox.ApplicationBoxService();var targetId = 'iac';
var message = {applicationCd : 'seihin',sendUserCd : 'aoyagi',
messageText : 'Accel Collaborationの情報が更新されました。',
messageTypeCd : 'MESSAGE_TYPE_MESSAGE',};
applicationBoxService.sendWatchMessage(message, [targetId]);}

ウォッチ通知メッセージ情報として、以下を設定しています。

11

intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01
パラメータ

内容

applicationCd

アプリケーションの識別ID

sendUserCd

送信ユーザコード

messageText

表示するメッセージ

messageTypeCd メッセージ種別識別CD
targetId

更新されるアプリケーション情報のID（ウォッチで使用するウォッチ対象のID）

上記の処理が行われた場合、ウォッチを行ったユーザのApplicationBoxにAccel Collaborationの更新通知が以下のように表示されます。

コラム
通知メッセージ、 ウォッチ通知メッセージの送信時に今回は引数に threadSummarizeCd を使用していません
が、threadSummarizeCd の指定を行うと、 threadSummarizeCd 単位でメッセージをスレッド形式で表示することも可能です。

12intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01

メッセージ種別追加プログラム
IMBox ではメッセージ種別追加プログラムを実装することにより、次に挙げる例のような処理ができます。
作成したメッセージ種別を IMBox に追加することで、タイムラインに投稿することができます。

項目
サンプル実装設定ファイルの作成
メッセージ種別投稿欄の表示画面の作成
投稿処理の作成
タイムライン表示画面

サンプル実装ここではサンプルとして、インフォメーションという新しいメッセージ種別を追加する実装方法について説明します。
作成する資材は以下となります。
1. 設定ファイルの作成
2. メッセージ種別投稿欄の表示画面の作成
3. 投稿処理の作成
4. タイムライン表示画面

設定ファイルの作成
メッセージ種別を追加するために、以下のファイルを設定してください。
設定ファイル例
src/main/conf/imbox-message-config/imbox-message-config_information.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

<?xml version="1.0" encoding="UTF-8"?><imbox-message-config
xmlns="http://www.intra-mart.jp/imbox/imbox-message-config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.intra-mart.jp/imbox/imbox-message-config ../schema/imbox-message-config.xsd"><public-message><message-config
display_flag="true"
enabled_flag="true"
sort_no="3"message_type_name="CAP.INFOMATION"
post_type_path="app/message_type/type_information"
display_path="app/message_type/information_timeline"
message_type_cd="MESSAGE_TYPE_INFOMATION"/></public-message></imbox-message-config><message-config> タグで以下の属性の設定を行います。
属性

内容

display_flag

メッセージ種別セレクトボックス表示フラグ

enabled_flag

使用可否フラグ

message_type_cd

メッセージ種別識別CD

message_type_name メッセージ種別名称のプロパティID

13intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01
属性

内容

post_type_path

投稿欄表示用ファイルパス

display_path

タイムライン表示用ファイルパス

iconPath

アプリケーションの表示画像のパス

sort_noメッセージ種別ソートナンバー

コラム
メッセージ種別セレクトボックス表示フラグ に true を設定した場合、 メッセージ種別のセレクトボックスに表示されるようになります。通知のみに使用する場合は false を設定してください。
使用可否フラグ を true にした場合、使用可能となります。 false を設定した場合は、使用不可となります。
投稿欄表示用ファイルパス は投稿欄の表示として使用したいjsspのパスを設定してください。メッセージ種別セレクトボックスを切り替えた際に、表示されます。
投稿欄表示用ファイルパス は メッセージ種別セレクトボックス表示フラグ が false の場合は必要ありません。
タイムライン表示用ファイルパス はタイムラインに表示として使用したいjsspのパスを設定してください。
メッセージ種別ソートナンバー は既存のメッセージ種別が 1 となっています。メッセージ種別情報返却の際は、このソートナンバーで返却される保障はありません。

メッセージ種別投稿欄の表示画面の作成
設定ファイルに追加したメッセージ種別の「投稿欄表示用ファイルパス」に指定した画面を作成します。
実装例
投稿欄表示用HTMLの作成
src/main/jssp/src/app/message_type/type_information.html

14intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

<style type="text/css">#imui-container #imbox-message-type textarea.imbox-textarea{
width: 98%;
height: 45px;
resize: none;
overflow: hidden;}#imui-container #imbox-message-type input.imbox-text {width: 96%;}
#imui-container #imbox-message-type div.imbox-button{
padding-top: 10px;
text-align: right;}</style><div><div class="imui-box-supplementation mt-10"><span class="im-ui-icon-common-16-information float-L"></span><p class="imui-pgh-section imbox-timeline-question-info"><imart type="string" value="お知らせしましょう" /></p></div><form id="information_form"><ul class= "mt-10"><li class= "mt-10"> <imart type="imuiTextbox" id="information-title" class="imbox-text" name="informationtitle-name" placeholder="タイトル"/></li><li class= "mt-10"><imart type="imuiTextbox" id="information-date" class="imbox-text" name="informationdate-name" placeholder="日時" /></li><li class= "mt-10"><imart type="imuiTextbox" id="information-place" class="imbox-text" name="informationplace-name" placeholder="場所"/></li></ul><div class="mt-10"><textarea id="information-detail" class="imbox-textarea" name="information-detail-name" placeholder="詳細"></textarea></div></form></div><form id="imbox_timeline_send_form" action="ui/filer/upload" method="POST" enctype="multipart/form-data"><imart type="include" page="imbox/views/timeline/item/add_options" /></form><div id="information_button" class="imbox-button mt-20 align-R"><button type="button" id="information_send_button" class="imui-medium-button">投稿</button></div>

タグ・添付ファイルを表示する場合は、作成するHTMLに以下のタグを追加してください。
1
2
3<form id="imbox_timeline_send_form" action="ui/filer/upload" method="POST" enctype="multipart/form-data"><imart type="include" page="imbox/views/timeline/item/add_options" /></form>

この位置に表示されます。

15

intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01

投稿処理の作成
メッセージ種別を独自に追加した場合、対応する投稿処理をCSJSにて実装する必要があります。

投稿処理のCSJS実装例

16

intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01<script type="text/javascript">(function($){$('#information_send_button').click(function(){var button = $(this);var attributes = {informationDate : $('#information-date').val(),informationPlace: $('#information-place').val(),informationDetail : $('#information-detail').val()};
var title = $('#information-title').val();var messageTypeCd = $('.imbox-timeline-sendtype-list').children(':selected').val();var boxCd = ($imbox.timeline.clientType === $imbox.constants.CLIENT_TYPE_LIST['COMPONENTS']) ?
$imbox.timeline.boxCd: $('.imbox-timeline-grouptype-list').children(':selected').val();var url = 'imbox/send/' + encodeURIComponent(boxCd);
var attachFlag = '0';
var files = [];var tagNames = [];$('.imbox-timeline-send-tag-list-hidden').each(function(){tagNames.push($(this).val());});
if(tagNames.length){attachFlag = '1';}for(i = 0, length = $imbox.fileName.length; i < length; i++){if($imbox.fileName[i].key === 'imbox_timeline_send_form'){
files.push($imbox.fileName[i].name);}}var data = {'send_message': title,'messageTypeCd': messageTypeCd,'displayId': $imbox.timeline.displayId,'timelineType': $imbox.timeline.timelineType,'clientType': $imbox.timeline.clientType,'attributes': ImJson.toJSONString(attributes, false),'attachName[]': files,'attachPath': $('#imbox_timeline_send_attach_file_name').data('store_to'),'attachFlag': attachFlag,'tag_name': tagNames};
if(!imuiValidate('#imbox_timeline_send_form', imboxTimelineSendRules, imboxTimelineSendMessage, '')){
return false;}
var success = $imbox.ajax.send('POST', url, data, $imbox.timeline.sendCallback, button);if (success) {$('#information-date').val('');$('#information-place').val('');$('#information-detail').val('');$('#information-title').val('');
imuiResetForm('#imbox_timeline_send_form');}});})(jQuery);</script>

url パラメータは以下のようにエンコーディング処理を行う必要があります。
url = 'imbox/send/' + encodeURIComponent(boxCd);$imbox.ajax.send メソッドを使用する際に渡すデータにおいて、以下のパラメータは必須となります。

17

intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01
パラメータ

内容

send_message

投稿内容（任意の文字列を入力する箇所で利用してください。）

messageTypeCd

メッセージ種別識別CD

displayId

画面ID

timelineType

投稿した画面のタイムライン種別（スレッド形式で表示している画面は「TIMELINE_TYPE_THREAD」の固定値、メッセージ形式で表示している画面は「TIMELINE_TYPE_MESSAGE」の固定値となります。）

clientType

操作しているクライアントの種別（PC版IMBoxを利用している場合は「IMBOX」の固定値、スマートフォン版IMBoxを利用している場合は「MOBILE」の固定値、IMBox連携用画面を利用している場合は「IMBOX」の固定値となります。）

コラム
拡張項目を使用する場合は attributes オブジェクトを作成し、作成したい情報を設定してください。
SSJSの投稿処理を記述する必要はありません。

タイムライン表示画面
設定ファイルに追加したメッセージ種別の「タイムライン表示用ファイルパス」に指定した画面を作成します。
拡張項目として記述した attributes オブジェクトを表示する場合は、対応する表示処理をSSJSにて実装する必要があります。
実装例
タイムライン表示用SSJSの作成
src/main/jssp/src/app/message_type/information_timeline.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

var $imbox = {};/*** インフォメーション用タイムライン画面初期処理* @param {Object} request リクエストパラメータ*/function init(request){
let message = request.message;
let attributes = request.message.attributes;$imbox.informationTitle = message.messageText;$imbox.informationDate = attributes.informationDate;$imbox.informationPlace = attributes.informationPlace;$imbox.informationDetail = attributes.informationDetail;$imbox.message = message;}

タイムライン表示用HTMLの作成
src/main/jssp/src/app/message_type/information_timeline.html

18

intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01<div class="imbox-timeline-thread-post-right-body"><p><a href="imbox/usermessage/<imart type="string" value=$imbox.message.encodePostUserCd escapeXml="true"
escapeJs="false" />" class="imbox-timeline-thread-post-user-name"><imart type="string" value=$imbox.message.postUserName escapeXml="true" escapeJs="false" /></a><span class="imbox-timeline-thread-from-to-icon imbox-icon-common-16-arrow"></span><imart type="string" value=$imbox.message.postTypeInfo.postToName escapeXml="true" escapeJs="false" /></p><div class="imbox-timeline-thread-post-right-body"><div class="imbox-timeline-thread-message"><div class="imbox-timeline-thread-message-area"><div class="imbox-timeline-thread-message-text"><div class="cf"><div class="float-L mt-10">
タイトル ： <imart type="string" value=$imbox.informationTitle /></span><br>
日時 ： <imart type="string" value=$imbox.informationDate /></span><br>
場所 ： <imart type="string" value=$imbox.informationPlace /></span><br>
詳細 ： <imart type="string" value=$imbox.informationDetail /></span><br></div></div></div></div></div></div></div>

サンプルを実装すると以下のように利用することが出来ます。
インフォメーション投稿時

インフォメーションタイムライン表示時

19intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01

20

intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01

送信側 IM-Propagation 追加プログラム
IMBoxでは受信側の IM-Propagation を用意しています。
送信側の実装を行うことで、IM-Propagation を利用して「 受信側 IM-Propagation 一覧 」に記載している処理が実行可能となります。
IM-Propagation についての詳細は、以下のドキュメントを参照してください。
IM-Propagation 仕様書
IM-Propagation プログラミングガイド
IM-Propagation 送受信設定一覧

項目
受信側 IM-Propagation 一覧
サンプル実装送信するデータを格納するためのクラスの作成
送信側のデータ変換クラス（Encoder）の作成
マッピング設定の作成
データ送信処理を作成

受信側 IM-Propagation 一覧
IMBoxで利用可能な受信側の IM-Propagation は以下となります。
IMBox受信側 IM-Propagation 一覧表
データの操作種別

概要

WATCH

アプリケーションのウォッチを行います。

UNWATCH

アプリケーションのウォッチ解除を行います。

SEND_NOTICE_MESSAGE ApplicationBoxへ通知メッセージを投稿します。（メッセージ形式で表示）
SEND_NOTICE_THREAD

ApplicationBoxへ通知メッセージを投稿します。（スレッド形式で表示）

SEND_WATCH_MESSAGE ApplicationBoxへwatchユーザ宛てのメッセージを投稿します。（メッセージ形式で表示）
SEND_WATCH_THREAD

ApplicationBoxへwatchユーザ宛てのメッセージを投稿します。（スレッド形式で表示）

サンプル実装ここではサンプルとして、「ApplicationBoxへのwatchユーザ宛てのメッセージ投稿（メッセージ形式で表示）」の送信側の実装方法について説明します。
作成する資材は以下となります。
1. 送信するデータを格納するためのクラスの作成
2. 送信側のデータ変換クラス（Encoder）の作成
3. マッピング設定の作成
4. データ送信処理を作成

コラム
その他の「 受信側 IM-Propagation 一覧 」の送信側の実装方法も以下のサンプルと同様になります。

21

intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01
注意
本章では「 アプリケーション連携プログラム 」のサンプル実装と同様に、連携プログラムが存在する前提で記載しています。
実行される処理自体は、「 ApplicationBoxへのメッセージ投稿処理の作成 」と同様になります。

送信するデータを格納するためのクラスの作成
送信するデータを格納するためのクラス（以下、「独自モデル」）を作成します。
送信するデータを格納するためのクラス

22intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69

package jp.co.intra_mart.sample.model;
import java.io.Serializable;
import java.util.Map;/*** ApplicationBoxへのwatchユーザ宛てのメッセージ投稿（メッセージ形式で表示） 用の* 送信するデータを格納するための独自モデルクラス*/
public class SampleOriginalModel implements Serializable {/** バージョン番号（新しく採番してください） */private static final long serialVersionUID = 1234567890123456789L;/** アプリケーションCD */private String applicationCd;/** 通知元ユーザのユーザCD */private String sendUserCd;/** 通知内容 */private String messageText;/** 投稿uri */private String uri;/** 投稿uriタイトル */private String uriTitle;/** URI添付ID */private String uriAttachId;/** 投稿uri内容 */private String uriText;/** 投稿URI添付パス */private String uriAttachPath;/** メッセージ種別コード */private String messageTypeCd;/** その他の属性 */private Map<String, String> attributes;/** ウォッチ対象の識別CD（複数指定可能） */private String[] targetIds;
public String getApplicationCd() {return applicationCd;}
public Map<String, String> getAttributes() {return attributes;}
public String getMessageText() {return messageText;}
public String getMessageTypeCd() {return messageTypeCd;}
public String getSendUserCd() {return sendUserCd;}public String[] getTargetIds() {return targetIds;

23

intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135

}
public String getUri() {return uri;}public String getUriAttachId() {return uriAttachId;}
public String getUriAttachPath() {return uriAttachPath;}public String getUriText() {return uriText;}
public String getUriTitle() {return uriTitle;}
public void setApplicationCd(final String applicationCd) {this.applicationCd = applicationCd;}
public void setAttributes(final Map<String, String> attributes) {this.attributes = attributes;}
public void setMessageText(final String messageText) {this.messageText = messageText;}
public void setMessageTypeCd(final String messageTypeCd) {this.messageTypeCd = messageTypeCd;}
public void setSendUserCd(final String sendUserCd) {this.sendUserCd = sendUserCd;}public void setTargetIds(String[] targetIds) {this.targetIds = targetIds;}
public void setUri(final String uri) {this.uri = uri;}public void setUriAttachId(final String uriAttachId) {this.uriAttachId = uriAttachId;}
public void setUriAttachPath(final String uriAttachPath) {this.uriAttachPath = uriAttachPath;}public void setUriText(final String uriText) {this.uriText = uriText;}
public void setUriTitle(final String uriTitle) {this.uriTitle = uriTitle;}}

送信側のデータ変換クラス（Encoder）の作成

24intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01「独自モデル」を「送受信モデル（Generic）」に変換する機能を提供するクラス（以下、「データ変換クラス」）を作成します。
送信側のデータ変換クラス

25

intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

package jp.co.intra_mart.sample.encoder;import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import jp.co.intra_mart.foundation.propagation.exception.ConvertException;
import jp.co.intra_mart.foundation.propagation.model.generic.imbox.GenericSendWatchMessage;
import jp.co.intra_mart.foundation.propagation.sender.AbstractEncoder;import jp.co.intra_mart.sample.model.SampleOriginalModel;/*** ApplicationBoxへのwatchユーザ宛てのメッセージ投稿（メッセージ形式で表示） 用の* 送信側のデータ変換クラス（Encoder）です。
*/
public class SampleEncoder extends AbstractEncoder<SampleOriginalModel, GenericSendWatchMessage> {/*** @param model 変換前クラス* @return 変換後クラス* @throws ConvertException*/@Override
public GenericSendNoticeThread encode(final SampleOriginalModel model) throws ConvertException {final GenericSendWatchMessage generic = new GenericSendWatchMessage();generic.setApplicationCd(model.getApplicationCd());
generic.setSendUserCd(model.getSendUserCd());
generic.setMessageText(model.getMessageText());
generic.setUri(model.getUri());
generic.setUriTitle(model.getUriTitle());
generic.setUriAttachId(model.getUriAttachId());
generic.setUriText(model.getUriText());
generic.setUriAttachPath(model.getUriAttachPath());
generic.setMessageTypeCd(model.getMessageTypeCd());
generic.setTargetIds(model.getTargetIds());
if (null != model.getAttributes()) {final Map<String, String> map = new LinkedHashMap<String, String>();for (final Entry<String, String> attribute : model.getAttributes().entrySet()) {map.put(attribute.getKey(), attribute.getValue());}
generic.setAttributes(map);}
return generic;}@Override
public Class<GenericSendWatchMessage> getGenericDataClass() {return GenericSendWatchMessage.class;}}26

intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01

コラム
IMBoxの「送受信モデル（Generic）」についての詳細は、「 APIドキュメント 」 を参照してください。

マッピング設定の作成「独自モデル」「送受信モデル（Generic）」「データ変換クラス」を紐付けるためのマッピング設定を作成します。
マッピング設定は、以下の形式で記述します。
WEB-INF/conf/propagation-senders-config/{任意のファイル名}.xml
マッピング設定
1
2
3
4
5
6
7
8

<?xml version="1.0" encoding="UTF-8"?><propagation-senders-config xmlns="http://www.intra-mart.jp/propagation/senders-config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.intra-mart.jp/propagation/senders-config propagation-senders-config.xsd"><sender source="jp.co.intra_mart.sample.model.SampleOriginalModel" operationType="SEND_WATCH_MESSAGE"><encoder class="jp.co.intra_mart.sample.encoder.SampleEncoder" /></sender></propagation-senders-config><sender> タグに以下の属性の設定を行います。
属性

内容

備考

source「独自モデル」のパッケージ名を含むクラス名

送信するデータを格納するためのクラスの作成 で（完全修飾子）作成した独自モデルを設定します。

データ変換対象の「データの操作種別」

ApplicationBoxへのwatchユーザ宛てのメッセー

operationType

ジ投稿（メッセージ形式で表示）のデータの操作
種別を設定します。
<encoder> タグに以下の属性の設定を行います。
属性

内容

備考

class

「データ変換クラス」のパッケージ名を含むクラ送信側のデータ変換クラス（Encoder）の作成 でス名（完全修飾子）

作成したデータ変換クラスを設定します。

コラム
データの操作種別についての詳細は、「 IM-Propagation 送受信設定一覧 」-「 IM-Propagation 受信側一覧 」を参照してください。

データ送信処理を作成
データの送信処理を作成します。
作成したデータ送信処理（以下）を、アプリケーションから通知をしたいタイミングでコールしてください。
データ送信処理27

intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01

28

intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

package jp.co.intra_mart.sample.sender;
import jp.co.intra_mart.sample.model.SampleOriginalModel;/*** データ送信処理のサンプル実装です*/public class SampleSender {/*** データ送信処理です。
* アプリケーションから通知をしたいタイミングでコールしてください。
** @param sampleOriginalModel 独自モデル*/
public static void send(final SampleOriginalModel sampleOriginalModel) {final PropagationManager manager = PropagationManagerFactory.getInstance().getPropagationManager();try {// セッションを開始
manager.begin();// データを送信
manager.send("SEND_WATCH_MESSAGE", SampleOriginalModel.class, sampleOriginalModel,
EmptyObject.class);// セッションを確定
manager.decide();} catch (final BeginException e) {// manager.begin() に失敗した場合} catch (final SendException e) {// manager.send() に失敗した場合} catch (final DecideException e) {// manager.decide() に失敗した場合} catch (final Exception e) {// その他例外が発生した場合} finally {// セッションを中断。 manager.decide() が成功した場合は何もしない
manager.abort();
}
}
}

29

intra-mart Accel Platform — IMBox プログラミングガイド 第4版 2014-05-01

上記の処理がコールされた場合に、ウォッチを行ったユーザのApplicationBoxにwatchユーザ宛てのメッセージが表示されます。

30