SlideShare a Scribd company logo
1 of 58
Download to read offline
1-A 
Titanium Mobileによるモバイルア プリケーションとXPages連携 
ジョンソンコントロールズ(株) 
システムエンジニア 
林 哲司 
3-
今日のテーマ 
•Titanium Mobile&XPagesでどんな物が作れる? 
•モバイルアプリケーションの開発手法比較 
•Dominoでモバイル対応と言えば、UpgradePack(DojoMobile) じゃないの? 
•Titanium Mobile開発基礎 
•JSONって? 
•JSONによるTitanium MobileとXPagesアプリのデータ連係
Titanium Mobile&XPagesで どんな物が作れる?
Titanium&XPagesでどんな物が作れる? 
DEMO
システム構成、技術構成 
SQLite 
DB 
Notes 
DB 
Android 
Server 
ClientPC 
WiFi 
Titanium Mobile 
Notes Client 
Domino Server 
JSON 
JSChart 
WiFi Rooter JSChart
モバイルアプリケーションの開発手法
モバイルに向いているアプリ 
•参照もの 
•つぶやきもの 
•数値、記号入力もの 
•ゲーム(ライトな物) 
通常のNotesアプリのように文書情報をがっつり入力す るのは今のところ面倒 
※手がフリックネイティブな人除く 
※iPhone4Sユーザーの方はSiriを使えば出来る?? 
今後はゲームのようにタップやタッチを生かした業務ア プリケーションが増えていく(はず)
モバイルアプリケーション開発の方法 
•Webアプリ(HTML5&CSS3) 
•Webサーバー上にあるHTMLファイルを参照する 
•ネイティブ(Objective-C、Java) 
•Objective-CやJavaで記述され、モバイル端末にインストールするアプリ 
•ハイブリッド(JavaScript、HTML+インストール可) 
•HTMLやJavaScriptで記述されているが、モバイル端末にインストール可能なアプ リ 
TitaniumMobile 
jQueryMobile 
XCode(Objective-C) 
Java 
DojoMobile 
PhoneGap 
HTML5+CSS3 
Silverlight 
SenchaTouch
Webアプリの特徴 
•HTML5 & CSS3 
•Domino UpgradePackもこれ 
•要ネットワーク環境 
•パフォーマンス低(HTTP通信が発生) 
•iOS Android両対応可 
•ストア不可 
•PhoneGap:buildとか使うと出来そうだけど・・・詳しくはわかりません。 
•m(_ _)m 
見るだけアプリならこれでOK! 
ちょっと凝ろうとするとたちまち面倒な事態に
ネイティブの特徴 
•Java/Objective-C 
•スタンドアロン動作可 
•パフォーマンス高 
•端末の機能をフルに使える(カメラ、GPS、センサー) 
•iOS Androidは個別開発 
•ストア可 
ちょっとしたアプリでも、それなりの技術力が要 求される
ハイブリッドの特徴 
•JavaScriptのみ(Titaniumの場合) 
•スタンドアロン動作可 
•パフォーマンス中(ほぼ高) 
•端末の機能が使える 
•iOS,Android両対応可 
•ストア可 
•アプリサイズはネイティブに比べると大きくなる傾向 
スタンドアロン動作が必要な要件、ネイティブ機 能を簡単に呼び出したい場合はコレ!
比較表 
Webアプリ 
ネイティブ 
ハイブリッド 
開発言語 
HTML5/CSS3 
Objective-C 
Java 
JavaScript 
パフォーマンス 
低 
高 
中 
開発容易性 
○ 
× 
◎ 
iOS、Android 両対応 
◎ 
× 
○ 
端末固有の機 能が使えるか 
○ 
◎ 
◎ 
要ネットワーク 
要 
不要 
不要
Dominoでスマホ対応って言ったら、 UpgradePackじゃないの?
UpgradePack1によるDesignerの進化 
•ドラッグ&ドロップでコンポーネントを配置してデザインできる ようになりました 
大きな進歩です<( ̄^ ̄)> 
Mobile 
コントロール
でもね 
•アウトラインビューを使ってコンポーネントを正確に入れ子に しないといけません! 
•ちょっと複雑なことをしようとすると、プロパティではなく「ソー スを解析して、いじってください」ってなります 
•エラーになった場合には、ブラウザに何も表示されません (Domino8.5.3+UpGradePack1現在) 
コンポーネントは正確に入れ 子にしないといけません! 
(大切だから2回言いました!) 
開発者はXPagesやDojo技術を極めたいわけではなく、アプリを 作りたいのです!
で作れるアプリはと言うと 
•UpgradePackを使ったモバイルアプリって言うと・・・ 
Simple is BEST! 
スマホ対応黎明期なデザイン
ちまたのモバイル用Webサイトは? 
•こんな感じ 
ここまでとは言わずとも、もう少しCoolにならないものか?
100歩譲って「デザインはシンプルに行き ましょう!」となった場合 
•DojoMobile、UpgradePackの情報が少なすぎます 
•カメラ、GPS、バイブレーション、センサーなど端末の機能を 使いたい場合は?(PhoneGap?) 
•ローカルレプリカのような動作をさせたい場合は?(電波があ る時にローカルに一気にデータを持ってくる) 
•最新のDojo1.7も使えるが、情報が少なく、Dominoにインポー トするとサポートが受けられなくなる 
┐(‘~`;)┌
XPagesのモバイルアプリ開発に必要な物 
1.英語サイトを検索する力 (エキサイト先生可) 
2.試行錯誤する時間 
3.忍耐
Titanium Mobile 
そういう方に 
\(^-^)/ 
高パフォーマンスなアプリを作りたい方はObjective-C/Java 簡単に業務アプリを作りたい方はTitanium
Titanium Mobile開発基礎
TitaniumMobileって? 
•appcelerator(アプセラレータ)が開発したJavaScriptのみで iOS&Androidアプリが開発できる開発環境 
•フリーで使える(有償サポートあり) 
•Eclipseをベースとした統合開発環境あり 
•JavaScriptのみでGUIとロジックを記述する 
•技術習得が簡単! 
•日本語コミュニティーが充実
TitaniumMobile動作の仕組み 
•JavaScriptコンパイラからコードをコンパイルし、ネイティブ機 能を実行する(らしい)
Titaniumでどんなアプリが作れる?① 
•MogSnap-食べた物の画像とコメント をアップし、ネット上で共有、評価(食べたいな ど)を行う〈for iPhone〉 
•映画情報「myシアター」-新作 映画の紹介、予告を見たり、オンラインでチ ケットも買える〈for Android〉 
•AKB前田敦子Maeda-1グランプ リ-萌えアプリ? 〈for iPhone〉
Titaniumでどんなアプリが作れる?② 
•サイボウズLiveクライアント -スケジュール、ファイル共有、掲示板、 ToDoリストのクライアント〈for iPhone、 Android〉
開発環境の構築(Window+Android) 
1.JDK(JavaSE)をインストール 
1.JDKは1.7系ではなく、1.6系で 
2.64bit版Windows7の場合もJDKは32bit版で 
2.Windowsの環境変数でパスを通す 
3.Android SDKをインストール 
4.appceleratorからTitanium Studio(Eclipseベース)をダウンロード(要ユー ザー登録)して、インストール 
5.Android端末のドライバをインストールし、PCにUSBケーブルで接続 (Androidエミュレータはとにかく重い) 
6.Android端末の設定画面で「提供元不明のアプリ」を許可、開発オプショ ンの「USBデバッグ」をON 
Mac+iOSの方、ゴメンナサイm(_ _)m 書籍を買うか?ググってください
開発DEMO(実演) 
•プロジェクトの作成 
•入力画面の作り方 
DEMO
Titaniumの「大変良く出来ました」 
•とにかく短いコードで、パフォーマンスの高いアプリが作れる 
•画面とロジックを同じJavaScriptで書けるので容易に習得で きる 
•画面はXML、ロジックはJavaとかじゃない 
•JavaScriptなので他のJavaScriptライブラリが使える 
•ブラウザも呼べる 
•追加モジュール(有料、無料)で拡張可能(カメラでバーコード を読むライブラリとか) 
AndroidとiOSのどちらのアプリも作れる! 
\(^-^)/
Titaniumの「頑張りましょう」① 
•iOSとAndroidの両対応するには、一部ロジックを変える必要 がある(そもそもOS自体の設計思想が違う) 
•iOSだけの機能もあります 
•開発のベースがiOSを作ってからAndroidに対応させているから仕方がない 
•両対応のアプリを作るのであれば、両対応しているメソッドかを確認 
仕様を機能が少ないAndroid側に合わせるのも良い (ニーズを次第でiOS用、Android用のクラスを定義する必要があるかも・・・) iOSとAndroidの二つの開発環境を習得するのは大変!
Titaniumの「頑張りましょう」② 
•画面の縦横比率が違う場合には工夫が必要 
16:9 
1280×720 
4:3 
960×640 
15:9 
800×480 
480×320 
960×540 
854×480 
Android系 
iOS系 
ロジック用とデザイン用のコードを分離し、機種によって読込む デザインを切り替える形が妥当
Titaniumの「頑張りましょう」③ 
•書き方によって発生しないイベントなどもあるので、仕様を決 める前に単機能テストしておく必要がある(iOSでは発生する のかもしれません。)
Titaniumに関する技術情報 
•書籍「TitaniumMobileで開発するiPhone/Androidアプリ」 北尾雅人著 翔泳社 
•これ1冊でほぼカバーできる 
•APIのリファレンスにAndroidのみ、iOSのみの表記あり 
•実機で動くかどうかをテストしていくのは現実的ではない 
•グローバルナレッジチャンネル-Appcelerator Titanium Mobile ご紹介セ ミナー(USTREAM) 
•http://www.ustream.tv/recorded/16861889 
•どっといんすとーる-Titanium Mobileの基礎 (全28回) 
•http://dotinstall.com/lessons/basic_titanium 
•仕組みがわかるスライド(Appceleratorの日本人社員@masuidrive作成) 
•http://public.iwork.com/document/ja/?d=TItanium_Mobile_Workshop_2011_47_02_47_16.key&a=p278287629 
•連載 :Titanium Mobileで作る! iPhone/Androidアプリ 
•http://gihyo.jp/dev/serial/01/titanium 
オススメ❤
JSON(ジェイソン)って?
JSONとは 
• JavaScript Object Notationの略 
• XMLなどと同様のテキストベースのデータフォーマット 
• Ajax開発でデータ交換フォーマットとしてよく利用される 
• XMLと比べると簡潔で人間が理解しやすい(フィールド名、値、 
配列などが明確) 
AjaxはAsynchronous JavaScript + XMLの略 
■JSONの例 
[ 
{ 
“name”:”綾波レイ”, 
“machine”:”零号機”, 
}, 
{ 
“name”:”式波アスカラングレー”, 
“machine”:”弐号機”, 
} 
] 
■XMLの例 
<children> 
<child> 
<name>綾波レイ</name> 
<machine>零号機</machine> 
</child> 
<child> 
<name>式波アスカラングレー</name> 
<machine>弐号機</machine> 
</child> 
</children> 
フィールド名 値 フィールド名 値
JSONの記述方法 
■オブジェクト { "プロパティ1 " : 値1, "プロパティ2 " : 値2 } 
■オブジェクトと配列のネスト 
{"children":[ 
{"name":"綾波レイ","age":14}, 
{"name":"碇シンジ","age":14}, 
{"name":"式波アスカラングレー ","age":14} 
]} 
中括弧{}で全体を囲み、プロパティ名(Notesだとフィールド 名)と値をコロンで区切る 
複数値データの場合には、カンマで区切る 
■配列 
[ 
"項目1 " , 
"項目2 " 
] 
大括弧で囲い、項目と項目はカンマで区切る 
所詮ただのテキスト!怖れることはない! 
ノーツで言うとオブジェクト1つで1文書
Notesの文書だと 
•JSON形式で文書を出力するXPagesを作成します 
•呼出し方法は普通にURLでXPagesを呼び出す 
■出力結果 
{"entries":[ 
{"Field01":"零号機","Field02":"綾波レイ"}, 
{"Field01":"初号機","Field02":"碇シンジ"}, 
{"Field01":"2号機","Field02":"式波アスカラングレー "}, 
{"Field01":"6号機","Field02":"渚カヲル"} 
]} 
http://xpages/jsonhttp.nsf/download.xsp
DominoUpgradePackではJSON形式で 出力できるんじゃなかった? 
•できます(Dominoデータサービス) 
■出力結果(一部を抜粋) 
[ 
{ "@href":"http:¥/¥/xpages:80¥/jsonhttp.nsf¥/api¥/data¥/collections¥/name¥/jsontestvw¥/unid¥/5B49802D91867C00492578D60017CC58", 
"@link": 
{ 
"rel":"document", "href":"http:¥/¥/xpages:80¥/jsonhttp.nsf¥/api¥/data¥/documents¥/unid¥/5B49802D91867C00492578D60017CC58" 
}, 
"@entryid":"1-5B49802D91867C00492578D60017CC58", 
"@unid":"5B49802D91867C00492578D60017CC58", 
"@noteid":"8F6", 
"@position":"1", 
"@siblings":4, 
"@form":"TestFrm", 
"Field01":"¥u96F6¥u53F7¥u6A5F", 
"Field02":"¥u7DBE¥u6CE2¥u30EC¥u30A4" 
}, 
2バイト文字はエンコードされています ←零号機 ←綾波レイ 
個人的には自前でコードを書いた方がシンプルでわかりやすい と思います
Dominoデータサービスの使い方 
1.サーバー文書-インターネットプロトコル-DominoWebEngine-Domino アクセスサービスの「有効なサービス」に“データ | Data”と入力 
2.Webサイト文書-設定-Dominoアクセスサービスの「有効なサービス」 に“データ | Data”と入力 
3.データベースのプロパティ-詳細タブ-LotusDominoデータサービスを 許可に“ビューのみ”or”ビューと文書”のどちらかを選択 
4.ビューのプロパティ-詳細タブ-Webアクセス-LotusDominoデータサー ビスの操作を許可にチェックをつける 
5.ビューからのデータ出力の場合、下記のようなURLを指定 http://{host}/{database}/api/data/collections/name/{viewname} ※2のWebサイト文書は設定しなくても動作する 【IBMサポート技術情報】 日本語版 Lotus Domino で Domino データサービス (DDS) が利用できない http://www-01.ibm.com/support/docview.wss?uid=swg21587846
JSONってどう使えるの?何が便利? 
•XMLに比べてデータ量が少ない(サンドイッチしなくて良い) 
•JavaScriptのevalを使うと、LotusScriptのDocumentクラスの ようにデータを扱える 
•JSON.parseがある場合は、セキュリティリスク(クロスサイトスクリプティング) を考慮してJSON.parseを使って下さい 
•evalは文字列を式として評価する関数です
JSONによるTitanium MobileとXPagesアプ リのデータ連係
Dominoとのデータ交換(前準備) 
•サーバー側ロジックはXPagesで記述します 
•新規のXPagesを作成し、「すべてのプロパティ-rendered」 に”false”を設定 
•コードはサーバーサードスクリプトの「afterRenderResponse」 イベントに記述 
普通の地球人にはわかりません! 神様であるIBM佐藤さんのチームに教えていただきました
Dominoとのデータ交換(Download①) 
サーバー側コード(XPages-JavaScript) 
//レスポンスのContentType、Cache-Controlヘッダを指定 var response = facesContext.getExternalContext().getResponse(); response.setContentType("text/plain"); response.setHeader("Cache-Control","no-cache"); //ResponseWriterにデータを書きだす(書き出すデータは関数で生成) var writer= facesContext.getResponseWriter(); writer.append(listViewEntries()); writer.flush(); writer.endDocument(); //JSONデータ出力関数 function listViewEntries(){ var viewArray = new Array(); var db:NotesDatabase = session.getDatabase(@Subset(@DbName(), 1),@Subset(@DbName(), -1)); var vw:NotesView = db.getView("TestVw"); var entries:NotesViewEntryCollection = vw.getAllEntries(); var entry:NotesViewEntry = entries.getFirstEntry(); while(entry){ var doc:NotesDocument = entry.getDocument(); var array= new Array(); array.push('Field01:"' + doc.getItemValueString("Field01")+'"'); array.push('Field02:"' + doc.getItemValueString("Field02")+'"'); viewArray.push("{"+array.join(",")+"}"); 
doc.recycle(); 
entry = entries.getNextEntry(); 
} 
entries.recycle(); 
vw.recycle(); 
db.recycle(); 
return ‘{“entries”:[¥n¥t’ + viewArray.join(‘,¥n¥t’)+’¥n]}’; 
} 
後でソースは公開します
Dominoとのデータ交換(Download②) 
サーバー側コード(XPages-JavaScript) 
<呪文省略> function listViewEntries(){ var viewArray = new Array(); var db:NotesDatabase = session.getDatabase(@Subset(@DbName(), 1),@Subset(@DbName(), -1)); var vw:NotesView = db.getView("TestVw"); var entries:NotesViewEntryCollection = vw.getAllEntries(); var entry:NotesViewEntry = entries.getFirstEntry(); while(entry){ var doc:NotesDocument = entry.getDocument(); var array= new Array(); array.push(‘"Field01":"' + doc.getItemValueString("Field01")+'"'); array.push('"Field02":"' + doc.getItemValueString("Field02")+'"'); viewArray.push("{"+array.join(",")+"}"); doc.recycle(); entry = entries.getNextEntry(); } entries.recycle(); vw.recycle(); db.recycle(); return "{entries:[¥n¥t" + viewArray.join(',¥n¥t')+'¥n]}'; } 
出力されるJSON配列を作成 
データベースを開く 
ビューを開く 
ビューエントリーを取得する 
エントリーがなくなるまでLoop 
データの中身用配列を作成 
配列にフィールド名、値をPush 
出力用配列に中身用配列を Push 
JSON形式で出力 
Notesクラスを指定すると コードの補完機能が働く
Dominoとのデータ交換(Download③) 
クライアント側コード(Titanium Mobile-JavaScript) 
btnDownload.addEventListener('click', function() 
{ 
//HTTPオブジェクト作成 
var xhr = Ti.Network.createHTTPClient(); 
xhr.open('GET','http://192.168.1.1/jsonhttp.nsf/download.xsp?OpenXPage'); 
//レスポンス受取イベント定義 
xhr.onload = function(){ 
var json = JSON.parse(this.responseText); 
var pos; 
for( pos=0; pos < json.entries.length; pos++){ 
alert(json.entries[pos].Field01+'¥n'+ 
json.entries[pos].Field02); 
}; 
}; 
//リクエスト送信 
xhr.send(); 
}); 
通信オブジェクトを作成 URLを指定(GET) 受け取ったレスポンスを JSONオブジェクトに変換 ループ リクエスト送信 
NotesDocumentの 
doc.Field01に近い
Dominoとのデータ交換(Upload①) 
サーバー側コード(XPages-JavaScript) 
//POSTされたリクエストを読み込み 
var request = facesContext.getExternalContext().getRequest(); 
if("POST"==request.getMethod()){ 
try{ 
var stream = request.getInputStream(); 
var out = new java.io.ByteArrayOutputStream(); 
var buf = new byte[1024]; 
var num; 
while((num = stream.readLine(buf,0,1024))!=-1){ 
out.write(buf,0,num); 
} 
//POSTされたJSON形式文字列をJSONオブジェクトに変換 
var data = eval("(" + out.toString("UTF-8") + ")"); 
//POSTされたデータから文書を作成し、戻り値をResponseWriterに 
データ書き出し 
var writer = facesContext.getResponseWriter(); 
writer.write(createEntry(data)); 
writer.flush(); 
writer.endDocument(); 
}catch(e){ 
print(e); 
} 
} 
HTTPリクエスト受取 
<呪文> 
UTF-8でデコードして変換 
createEntry関数にデコードし たデータを引き渡し 
文書作成の本体はこ の自作関数
Dominoとのデータ交換(Upload②) 
サーバー側コード(XPages-JavaScript) 
//POSTされたデータから文書を作成 
function createEntry(data){ 
if(data){ 
var db:NotesDatabase = session.getDatabase(@Subset(@DbName(), 1),@Subset(@DbName(), -1)); 
var doc:NotesDocument = db.createDocument(); 
doc.replaceItemValue("Form","TestFrm"); 
doc.replaceItemValue("Field01",data.Field01); 
doc.replaceItemValue("Field02",data.Field02); 
doc.computeWithForm(true,false); 
doc.save(); 
//Notesオブジェクトを解放 
var documentid = doc.getUniversalID(); 
doc.recycle(); 
db.recycle(); 
//作成した文書のUniversalIDを返す 
return "{status: ¥"success¥",documentid:¥"" + documentid + "¥"}"; 
}else{ 
return "{status:¥"error¥"}"; 
} 
} 
文書作成 
フォーム指定 
フィールドに値を書込 
文書再計算 
保存 
Notesオブジェクトを解放 
文書IDを返す 
(別に返さなくてもよい)
Dominoとのデータ交換(Upload③) 
クライアント側コード(Titanium Mobile-JavaScript) 
btnUpload.addEventListener('click', function() { //HTTPオブジェクト作成 var xhr = Ti.Network.createHTTPClient(); xhr.open('POST','http://192.168.1.1/jsonhttp.nsf/upload.xsp?OpenXPage'); //レスポンス受取イベント定義 xhr.onload = function(){ alert(this.responseText); }; //送信用パラメータ(登録データ)定義 var params = '{"Field01":“6号機","Field02":"渚カヲル"}'; //リクエスト送信 xhr.setRequestHeader('Content-Type','text/xml'); xhr.send(params); }); 
通信オブジェクトを作成 
URLを指定(POST) 
受け取ったレスポンスを表 示 
送信するデータを設定 (フィールド名:値) 
リクエスト送信 
フィールド名と値を JSON形式で渡す
Dominoとのデータ交換(FileUpload①) 
サーバー側コード(XPages-JavaScript) 
var extContext = facesContext.getExternalContext(); 
var request:javax.servlet.http.HttpServletRequest = extContext.getRequest(); 
if ("POST" == request.getMethod()) { 
//JSON形式でPOSTされたファイル、パラメータを取得 
var fileData:com.ibm.xsp.http.UploadedFile 
= request.getParameterMap().get("fileobj"); 
var tmpFile:java.io.File = fileData.getServerFile(); var fileName = request.getParameter("filename"); 
var field01 = request.getParameter("field01"); 
var field02 = request.getParameter("field02"); 
//一時ファイルとしてアップロードされた画像を元のファイル名をつけ、移動 
var correctedFile = new java.io.File( tmpFile.getParentFile().getAbsolutePath() 
+ java.io.File.separator + fileName ); 
var success = tmpFile.renameTo(correctedFile); 
//パラメータで渡された点検日時、ポイントIDからデータ文書を特定 
var doc:NotesDocument = database.createDocument(); 
doc.replaceItemValue("Form", "TestFrm"); 
doc.replaceItemValue("Field01", field01); 
doc.replaceItemValue("Field02", field02); 
添付ファイル取得 
一時ファイル取得 
パラメータ(フィールド)取得 
一時ファイルに元のファイ ル名をつけ移動 
文書作成 
フィールド書込 
〃 
〃
Dominoとのデータ交換(FileUpload②) 
サーバー側コード(XPages-JavaScript) 
<続き> 
var fileRichText:NotesRichTextItem = doc.getFirstItem("ImageBody"); 
if (fileRichText == null){ 
var fileRichText:fileRichText = doc.createRichTextItem("ImageBody"); 
} 
//リッチテキストフィールドにファイルを添付 
fileRichText.embedObject(1454, "", correctedFile.getAbsolutePath(), null); // //画像ファイルを一時ファイルにリネーム(削除はOSのキャッシュ削除に任せる) correctedFile.renameTo(tmpFile); 
doc.save(); 
var documentid = doc.getUniversalID(); 
doc.recycle(); 
} 
リッチテキストアイテム取 得 
ファイル添付実行 
文書保存
Dominoとのデータ交換(FileUpload③) 
クライアント側コード(Titanium Mobile-JavaScript) 
btnFileUpload.addEventListener('click', function() 
{ 
Ti.Media.openPhotoGallery({ 
//PhotoGallery:選択時の動作 
success: function(event) { 
var image; 
image = event.media; //選択した画像を取得 
var filePath = image.nativePath; 
var fileName = filePath.substring(filePath.lastIndexOf('/')+1); 
//HTTPオブジェクト作成 
var xhr = Ti.Network.createHTTPClient(); 
xhr.open('POST','http://192.168.1.1/jsonhttp.nsf/httpfileupload.xsp?OpenXPage'); 
//HTTPリクエスト送信 
xhr.send({fileobj:image,filename:fileName,field01:‘3号機’,field02:‘鈴原トウジ'}); 
}, 
// PhotoGallery:キャンセル時の動作 
cancel: function() { 
return false; 
}, 
// PhotoGallery:選択可能なメディア種別を配列で指定 
mediaTypes:[Ti.Media.MEDIA_TYPE_PHOTO], 
}); 
} 
選択した画像を取得 
画像ファイルパス取得 
画像ファイル名取得 
HTTPオブジェクト作成 
URL指定 
画像ファイル、フィールドな どをJSON配列で送信
おまけ IBMさんへの要望
要望①:最新版での体系的な開発情報 
•Domino8.5.3+UpgradePackをベースとしたXPagesを 体系的に学べる日本語の情報を出して下さい 
•初期のXPagesとUpgradePack付きではかなり開発環境が変わっ てしまいました 
•ググると古いOneUIの作り方(複雑にコントロールを配置するか? 意味不明のソースと格闘)が出てきたり・・・ 
【@IT】XPagesでLotus Notes/Dominoアプリ開発入門(1) 
http://www.atmarkit.co.jp/fjava/rensai4/xpages01/01.html 
5/11 IBM佐藤さん連載開始 
期待してます! 
(UpgradePackのリファレンスも作って下さいね。何ができるコンポーネントか?)
要望②:リファレンスにはサンプルコードを 
•XPagesのリファレンスにサンプルコードをつけて欲しい 
•技術セミナーは動画でUstreamやニコニコ動画で配信して欲 しい 
•1000円以下なら有料でも良いです
要望③:一番欲しい物・・ 
•でもやっぱり今、一番欲しいのは・・・ 
今すぐ! 
XPagesアプリをアップできるLotusLiveを 
課金システム付きで構築して欲しい
ありがとうございました 
•本日はご清聴ありがとうございました 
ミ★(*^-゚)v Thanks!!★彡
付録:Titaniumコーディング Tips① 
•ソースコード内に配置したSQLiteDBを読み込むには下記のコードで読み 込む 
•一度読み込むと、内蔵メモリに読み込まれ、再度同じコード実行された場 合には、メモリ内DBが優先される 
•再度ソース内DBを開くには、メモリ内DBを削除するか、アプリ自体をアン インストールする必要がある 
•ソースが正しいのにDBを読み込めない場合には、メモリ内DBを削除して みる 
ソース内 DB 
メモリ内 DB 
var db= Ti.Database.install('db/database.db',‘database1'); 
インストールするとコピーされ、メモリ内DBが開かれる 
db.remove();
付録:Titaniumコーディング Tips② 
•メモリ内DBをSDカードに出力するには下記のように記述する 
//メモリ上にコピーされたデータベースファイルを取得 var dbDir= 'file:///data/data/' + Ti.App.getID() + '/databases/'; var dbFile= Ti.Filesystem.getFile( dbDir + ‘database1' ); //SDカード上のSQLiteDBを取得 var sdDir= Ti.Filesystem.getFile(Ti.Filesystem.externalStorageDirectory); var sdFile = Ti.Filesystem.getFile(sdDir.nativePath + '/', ‘database.db'); //ファイルをコピー var resources =dbFile.read(); sdFile.write(resources);
付録:Titaniumコーディング Tips③ 
•アプリをSDカードにインストール可能にするには、Titaniumプロジェクトの 設定ファイルであるtiapp.xmlのソースに下記の項目を追加する 
•SONY MobileのXperiaはカメラアプリの作り込みが特殊なので、呼出方を 工夫する必要がある 
<!--SD Cardへのインストール許可(Android2.2(API Ver8)以降)--> <android xmlns:android="http://schemas.android.com/apk/res/android"> <tool-api-level>8</tool-api-level> <manifest android:installLocation="auto"> <uses-sdk android:minSdkVersion="7"/> </manifest> </android>

More Related Content

Similar to XPagesDay2012 3-A Titanium mobileによるモバイルアプリケーションとXPages連携

福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介Mori Shingo
 
スタートアップ向け!1人日でできるサービスの高速化方法と成果
スタートアップ向け!1人日でできるサービスの高速化方法と成果スタートアップ向け!1人日でできるサービスの高速化方法と成果
スタートアップ向け!1人日でできるサービスの高速化方法と成果Koichiro Sumi
 
Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版Yoshito Tabuchi
 
.NET 6の期待の新機能とアップデート
.NET 6の期待の新機能とアップデート.NET 6の期待の新機能とアップデート
.NET 6の期待の新機能とアップデートTomomitsuKusaba
 
ここが変わったTizen sdk2.0alpha
ここが変わったTizen sdk2.0alphaここが変わったTizen sdk2.0alpha
ここが変わったTizen sdk2.0alphaHiroshi Sakate
 
Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会Dai Utsui
 
はじめてのWeb of Things
はじめてのWeb of ThingsはじめてのWeb of Things
はじめてのWeb of ThingsSaki Homma
 
クロスプラットフォーム モバイルアプリ開発ツール Xamarin 概要
クロスプラットフォーム モバイルアプリ開発ツール Xamarin 概要クロスプラットフォーム モバイルアプリ開発ツール Xamarin 概要
クロスプラットフォーム モバイルアプリ開発ツール Xamarin 概要Yoshito Tabuchi
 
Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版
Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版
Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版Yoshito Tabuchi
 
これからのNOTESモバイルアプリはこう作れ
これからのNOTESモバイルアプリはこう作れこれからのNOTESモバイルアプリはこう作れ
これからのNOTESモバイルアプリはこう作れMitsuru Katoh
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンスKaoru NAKAMURA
 
Firefox OS カスタム ROM の作成
Firefox OS カスタム ROM の作成Firefox OS カスタム ROM の作成
Firefox OS カスタム ROM の作成Honma Masashi
 
2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~
2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~
2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~Daisuke Masubuchi
 
【de:code 2020】 2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~
【de:code 2020】 2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~【de:code 2020】 2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~
【de:code 2020】 2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~日本マイクロソフト株式会社
 
おすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップおすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップKoichiro Sumi
 
SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化
SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化
SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化SORACOM,INC
 
IBM Notes/Domino and IBM Bluemix
IBM Notes/Domino and IBM BluemixIBM Notes/Domino and IBM Bluemix
IBM Notes/Domino and IBM BluemixAtsushi Sato
 
Microsoft Edge F12 開発者ツール
Microsoft Edge F12 開発者ツールMicrosoft Edge F12 開発者ツール
Microsoft Edge F12 開発者ツールYoshihisa Ozaki
 
今ここでもう一度初めての Titanium
今ここでもう一度初めての Titanium今ここでもう一度初めての Titanium
今ここでもう一度初めての TitaniumRyutaro Miyashita
 

Similar to XPagesDay2012 3-A Titanium mobileによるモバイルアプリケーションとXPages連携 (20)

福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
 
スタートアップ向け!1人日でできるサービスの高速化方法と成果
スタートアップ向け!1人日でできるサービスの高速化方法と成果スタートアップ向け!1人日でできるサービスの高速化方法と成果
スタートアップ向け!1人日でできるサービスの高速化方法と成果
 
Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版
 
.NET 6の期待の新機能とアップデート
.NET 6の期待の新機能とアップデート.NET 6の期待の新機能とアップデート
.NET 6の期待の新機能とアップデート
 
ここが変わったTizen sdk2.0alpha
ここが変わったTizen sdk2.0alphaここが変わったTizen sdk2.0alpha
ここが変わったTizen sdk2.0alpha
 
Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会
 
はじめてのWeb of Things
はじめてのWeb of ThingsはじめてのWeb of Things
はじめてのWeb of Things
 
クロスプラットフォーム モバイルアプリ開発ツール Xamarin 概要
クロスプラットフォーム モバイルアプリ開発ツール Xamarin 概要クロスプラットフォーム モバイルアプリ開発ツール Xamarin 概要
クロスプラットフォーム モバイルアプリ開発ツール Xamarin 概要
 
Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版
Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版
Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版
 
Accel series 2020_winter
Accel series 2020_winterAccel series 2020_winter
Accel series 2020_winter
 
これからのNOTESモバイルアプリはこう作れ
これからのNOTESモバイルアプリはこう作れこれからのNOTESモバイルアプリはこう作れ
これからのNOTESモバイルアプリはこう作れ
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンス
 
Firefox OS カスタム ROM の作成
Firefox OS カスタム ROM の作成Firefox OS カスタム ROM の作成
Firefox OS カスタム ROM の作成
 
2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~
2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~
2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~
 
【de:code 2020】 2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~
【de:code 2020】 2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~【de:code 2020】 2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~
【de:code 2020】 2020 年も最高のゲームをつくろう! Game Stack でゲーム開発をしよう! ~ LiveOps とデータ分析編 ~
 
おすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップおすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップ
 
SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化
SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化
SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化
 
IBM Notes/Domino and IBM Bluemix
IBM Notes/Domino and IBM BluemixIBM Notes/Domino and IBM Bluemix
IBM Notes/Domino and IBM Bluemix
 
Microsoft Edge F12 開発者ツール
Microsoft Edge F12 開発者ツールMicrosoft Edge F12 開発者ツール
Microsoft Edge F12 開発者ツール
 
今ここでもう一度初めての Titanium
今ここでもう一度初めての Titanium今ここでもう一度初めての Titanium
今ここでもう一度初めての Titanium
 

More from Tetsuji Hayashi

20170217 coolで使いやすいnotesアプリデザイン講座(公開用)
20170217 coolで使いやすいnotesアプリデザイン講座(公開用)20170217 coolで使いやすいnotesアプリデザイン講座(公開用)
20170217 coolで使いやすいnotesアプリデザイン講座(公開用)Tetsuji Hayashi
 
20151106ノーツコンソ大阪notesアプリのデザインをcoolに(公開用)
20151106ノーツコンソ大阪notesアプリのデザインをcoolに(公開用)20151106ノーツコンソ大阪notesアプリのデザインをcoolに(公開用)
20151106ノーツコンソ大阪notesアプリのデザインをcoolに(公開用)Tetsuji Hayashi
 
X pages day2015_みんな大好き@式とbootstrapで作る簡単coolなxpagesアプリ(公開用)
X pages day2015_みんな大好き@式とbootstrapで作る簡単coolなxpagesアプリ(公開用)X pages day2015_みんな大好き@式とbootstrapで作る簡単coolなxpagesアプリ(公開用)
X pages day2015_みんな大好き@式とbootstrapで作る簡単coolなxpagesアプリ(公開用)Tetsuji Hayashi
 
テクてく大阪20150522 XPagesBLAST 発表用資料
テクてく大阪20150522 XPagesBLAST 発表用資料テクてく大阪20150522 XPagesBLAST 発表用資料
テクてく大阪20150522 XPagesBLAST 発表用資料Tetsuji Hayashi
 
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイドXPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイドTetsuji Hayashi
 
あなたにも出来る!XPages & jQueryMobileで作るスマートフォン、タブレットUX開発
あなたにも出来る!XPages & jQueryMobileで作るスマートフォン、タブレットUX開発あなたにも出来る!XPages & jQueryMobileで作るスマートフォン、タブレットUX開発
あなたにも出来る!XPages & jQueryMobileで作るスマートフォン、タブレットUX開発Tetsuji Hayashi
 

More from Tetsuji Hayashi (6)

20170217 coolで使いやすいnotesアプリデザイン講座(公開用)
20170217 coolで使いやすいnotesアプリデザイン講座(公開用)20170217 coolで使いやすいnotesアプリデザイン講座(公開用)
20170217 coolで使いやすいnotesアプリデザイン講座(公開用)
 
20151106ノーツコンソ大阪notesアプリのデザインをcoolに(公開用)
20151106ノーツコンソ大阪notesアプリのデザインをcoolに(公開用)20151106ノーツコンソ大阪notesアプリのデザインをcoolに(公開用)
20151106ノーツコンソ大阪notesアプリのデザインをcoolに(公開用)
 
X pages day2015_みんな大好き@式とbootstrapで作る簡単coolなxpagesアプリ(公開用)
X pages day2015_みんな大好き@式とbootstrapで作る簡単coolなxpagesアプリ(公開用)X pages day2015_みんな大好き@式とbootstrapで作る簡単coolなxpagesアプリ(公開用)
X pages day2015_みんな大好き@式とbootstrapで作る簡単coolなxpagesアプリ(公開用)
 
テクてく大阪20150522 XPagesBLAST 発表用資料
テクてく大阪20150522 XPagesBLAST 発表用資料テクてく大阪20150522 XPagesBLAST 発表用資料
テクてく大阪20150522 XPagesBLAST 発表用資料
 
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイドXPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
 
あなたにも出来る!XPages & jQueryMobileで作るスマートフォン、タブレットUX開発
あなたにも出来る!XPages & jQueryMobileで作るスマートフォン、タブレットUX開発あなたにも出来る!XPages & jQueryMobileで作るスマートフォン、タブレットUX開発
あなたにも出来る!XPages & jQueryMobileで作るスマートフォン、タブレットUX開発
 

XPagesDay2012 3-A Titanium mobileによるモバイルアプリケーションとXPages連携