CSubLocalSendの使い方について


HPのTOPに戻る
NSBで使えるライブラリのTOPに戻る

ダウンロード:CSubLocalSend本体Zip形式圧縮(3KB)
ダウンロード:CSubLocalSendのソースZip形式圧縮(166KB)

CSubLocalSendには以下のような特徴があります。

CSubLocalSend の有利な点
・情報は全てテキストで扱うことが出来るので、比較的扱いやすくデバッグも
容易に行える。
・追加するアプリのクリエータIDとデータフォーマットさえわかってしまえば、
物理的なデータベースの構造(の変化)について考慮する必要が無い。
(PalmSource社がどこまで本気で言っているかはわかりませんが、将来PIM
データベースの構造を変更する可能性もあるとしている)

CSubLocalSend の不利な点
・インタフェースの調整が難しい
例えば、データ送信中のウィンドウがポップアップされてしまう等。
・大量データの書き込みには向いていない。
・そもそも書き込むことのみで、読み込んだり更新はできない。


CSubLocalSendの基本的な使い方
Dim Res As Integer

Res=AppLaunch(0,"CSubLocalSend",0,CSubLocalSendに送るテキストデータ)

見て判るようにCSubLocalSendを利用する為にAppLaunchファンクションを使います。

データベースに正常に書き込めた場合には0が、
エラーが発生した場合には0以外の数値が戻り値となります。

CSubLocalSendに送るテキストデータのフォーマットによって
予定表、アドレス帳、メモ帳へのデータの書き込みが可能です。

CSubLocalSendに送る文字列の事をこのページでは、転送データと呼ぶ事にします


■メモ帳への書き込み■

取り合えず一番簡単なメモ帳への書き出し方法です。

転送データには、初めにメモ帳への書き出しである事を示すヘッダが必要です。
そのヘッダとは"memo/"です。
後は、メモ帳に書き込みたいデータを続けて記述すればオッケーです。

つまり、メモ帳に「Hello!」と書き出したければ
転送データは"memo/Hello!"となります。

メモ内で改行したければChr(10)をつけます。
つまり「Hello!」というのを2行書きたければ、"memo/Hello!"+Chr(10)+"Hello!"となります。

メモ帳への書き込みのサンプル
Dim Msg As String
Dim Res As Integer

Msg="memo/Hello!"+Chr(10)+"Hello!"
Res=AppLauncher(0,"CSubLocalSend",0,Msg)

まずMsg変数(String)とRes変数(Integer)を定義します。

Msg変数 − CSubLocalSendへ渡す転送データを格納
Res変数 − CSubLocalSendからの戻り値を格納

そして、Msg変数に転送データを定義してAppLaunchを使ってCSubLocalSendを呼び出します。
その結果がResに格納されます。


■予定表への書き込み■

予定表への書き込みは、メモ帳への書き込みと違って細かい書式設定が必要です。

CSubLocalSendへの転送データですが、 まずはヘッダが"date/"となります。

次に予定表データに書き込む為のデータの記述になりますが、基本的にはVCALENDER形式という書式を使う事になります。

まず実際にVCALENDER形式の簡単な例を見て見ましょう。

2002年02月20日13時〜14時の予定 2002年02月20日時間指定無しの予定
BEGIN:VCALENDAR
VERSION:1.0
X-PALM:4.0
BEGIN:VEVENT
DTSTART:20020220T130000
DTEND:20020220T140000
SUMMARY:テスト
DESCRIPTION:コメント
END:VEVENT
END:VCALENDAR
BEGIN:VCALENDAR
VERSION:1.0
X-PALM:4.0
BEGIN:VEVENT
DTSTART:20020220
DTEND:20020220
SUMMARY:テスト
DESCRIPTION:コメント
END:VEVENT
END:VCALENDAR

まず気が付くのは、
先頭から4行そして後ろから2行は変わらないという事ですね。
5行目のDTSTARTは雰囲気から、予定の開始がいつなのかを示してそうですね。
という事は、DTENDは予定の終了がいつなのかを示しているというのは想像がつきます。
SUMMARYとDESCRIPTIONに付いては予定のの本文とコメントですね。

という事は、上記を雛型として5〜8行目を変更してあげればオッケーという訳です。

※OS3.5未満のデバイスでは、SUMMARYが上手く書き込めないようです。
 DESCRIPTIONの内容が予定の本文になってしまいます。
 WorkPad30Jでテストしました


上記2つの違いは時間指定があるか無いかなのですが、VCALENDERの違いは5行目と6行目ですね。

時間指定無し時間指定有り
DTSTART:20020220DTSTART:20020220T130000
DEND:20020220DEND:20020220T140000
見るとそれぞれ:の後の20020220が日付を示しているという事が判ります。
さらに時間指定のある方には、その後ろにT130000という風に続いています。これは時間を指定している事がわかります。

という事は、DTSTARTとDTENDの部分を変更する事で予定の日時が設定出来る事が判ります
2002年05月10日10時30分〜2002年05月10日13時40分の予定ならば
DTSTART:20020510T103000
DTEND:20020510T134000
とすればオッケーです

SUMMARYとDESCRIPTIONについてはそれぞれ予定の本文とコメントなので必要な文字列を書き込めば良いようです。
つまり2002年05月10日10時30分〜2002年05月10日13時40分に食事会という予定でコメントに場所を書き込むようにするならば
VCALENDERの書式
BEGIN:VCALENDAR
VERSION:1.0
X-PALM:4.0
BEGIN:VEVENT
DTSTART:20020510T103000
DTEND:20020510T134000
SUMMARY:食事会
DESCRIPTION:場所
END:VEVENT
END:VCALENDAR
という風になります。

後は実際にCsubLocalSendにこのVCALENDER形式のデータを転送すれば良い事になります。

※今関さんから頂いたサンプルでは、DESCRIPTIONの内容がエンコードされていました。
 VCALENDER形式は異なるデバイスや、アプリケーションでのデータ交換を目的としたものなので、
 本来は文字コードの指定やエンコードを行う事が必要なようです。
 しかし、今回はデバイス内だけでの使用という例外的な使い方となるのでこういった指定は無くても大丈夫なようです。

予定表への書き込みのサンプル
Dim Msg As String
Dim Res As Integer

Msg="date/"
Msg=Msg+"BEGIN:VCALENDAR"
Msg=Msg+Chr(13)+Chr(10)+"VERSION:1.0"
Msg=Msg+Chr(13)+Chr(10)+"X-PALM:4.0"
Msg=Msg+Chr(13)+Chr(10)+"BEGIN:VEVENT"
Msg=Msg+Chr(13)+Chr(10)+"DTSTART:20020510T103000"
Msg=Msg+Chr(13)+Chr(10)+"DTEND:20020510T134000"
Msg=Msg+Chr(13)+Chr(10)+"SUMMARY:食事会"
Msg=Msg+Chr(13)+Chr(10)+"DESCRIPTION:場所"
Msg=Msg+Chr(13)+Chr(10)+"END:VEVENT"
Msg=Msg+Chr(13)+Chr(10)+"END:VCALENDAR"

Res=AppLaunch(0,"CSubLocalSend", 0, Msg)

改行をChr(10)だけで無く、Chr(13)+Chr(10)としているのは
改行が厳密に判断されてChr(10)だけでは正常に書き込めない事がある為です。

※DTSTARTとDTENDで日付を変えてもDTSTARTの日付にしか入らないようです。

次に繰り返しの予定ですが、その場合にはVCALENDER形式にRRULE:の指定が必要になります。

実際に例を交えて説明していきます。

・日毎の繰り返し、終了日の指定無し
RRULE:D1 20311231
・日毎の繰り返し、終了日が2002年05月10日
RRULE:D1 20020510

まずこれを見て判るのが、D1という指定が日毎の繰り返しの指定らしいという事です。
その後ろのスペースの後に続くのは終了日の日付ですね。
※終了日の指定が無い場合には、Palmで表せる最も未来の日付である2031年12月31日が指定されるようです。

・日曜日に週毎の繰り返し、終了日無し
RRULE:W1 SU 20311231
・月曜と金曜に週毎の繰り返し、終了日無し
RRULE:W1 MO FR 20311231

今度はD1がW1に変わりました。
つまりW1が週毎の繰り返しの指定という事です。

その後ろに続く2文字の英文字は曜日を表しているようですね。
日(SU)月(MO)火(TU)水(WE)木(TH)金(FR)土(SA)
複数の曜日に発生する場合にはスペースを空けて続ける事が出来ます。

つまりこんな事も出来ます。
RRULE:W1 SU MO TU WE TH FR SA 20311231
一週間全部に予定が入ります。

・毎月10日で繰り返し、終了指定日無し
RRULE:MD1 10 20311231
・毎月第二日曜日で繰り返し、終了日指定無し
RRULE:MP1 2+ SU 20311231
・一ヶ月おきの毎月10日で繰り返し、終了日指定無し
RRULE:MD2 10 20311231
・一ヶ月おきに毎月第二日曜日で繰り返し、終了日指定無し
RRULE:MP2 2+ SU 20311231

段々ややこしくなってきましたが、今度は月単位での繰り返し予定になります。
MDと付くと月の日指定の繰り返しのようです。
MPだと曜日指定のようです。(第一週の月曜日等)
その後ろに付く数字は、何ヶ月おきに発生する予定かを表しています。
毎月なら1、一ヶ月おきならば2という具合です。

MDの場合にはスペースの後ろに2桁の数字が入りますが、これが日付の指定のようです。
MPの場合には 2+という風な表記がありますが、これが第2週という事を表しているようです。
その後ろのSUが曜日ですね。

これらを変更する事で、月単位での繰り返し予定を色々設定できそうです。

・毎年5月の指定日に繰り返し、終了日指定無し
RRULE:YM1 5 20311231

※繰越し予定についてはDTSTARTやDTENDの内容と密接に関係するので、矛盾の無いように記述しましょう。
 上手く矛盾が無いようにしないと意図しない動作をするかも知れません。

BEGIN:VCALENDAR
VERSION:1.0
X-PALM:4.0
BEGIN:VEVENT
ここまでは、必須

DTSTART:20020220T130000
DTEND:20020220T140000
予定の日付、時刻の指定
日の指定だけならDTENDが無くても正常に書き込めました。

SUMMARY:テスト
予定の内容です。

DESCRIPTION:コメント
予定のコメント部分です。

END:VEVENT
END:VCALENDAR
最後の2行も必須


■アドレス帳への書き込み■
まだ書いている途中です。
アドレス帳への書き込みも、予定表への書き込みと同様に細かい書式設定が必要です。

CSubLocalSendへの転送データですが、 まずはヘッダが"addr/"となります。

次にアドレス帳データに書き込む為のデータの記述になりますが、基本的にはVCARD形式という書式を使う事になります。

まず実際にVCARD形式の簡単な例を見て見ましょう。

VCARDの例
BEGIN:VCARD
VERSION:2.1
X-PALM:4.0

N:苗字;名前
Sound;X-TRMC-N;X-PALM:みょうじ;なまえ

TITLE:役職
ORG:会社

ADR:;;番地;市町村;都道府県;郵便番号;国
NOTE:コメント

TEL;WORK:電話 会社
TEL;HOME:電話 自宅
TEL;FAX:電話 Fax
TEL;電話 その他
TEL;CELL:電話 携帯
TEL;PREF:電話 代表
TEL;PAGER:電話 ポケベル
EMAIL:連絡 メール

上記の中から5つまでを選択

X-Palm-Custom;1:カスタム1
X-Palm-Custom;2:カスタム2
X-Palm-Custom;3:カスタム3
X-Palm-Custom;4:カスタム4

End:VCARD


アドレス帳への書き込みのサンプル
Dim Msg As String
Dim Res As Integer

Msg="addr/"
Msg=Msg+Chr(13)+chr(10)+"BEGIN:VCARD"
Msg=Msg+Chr(13)+chr(10)+"VERSION:2.1"
Msg=Msg+Chr(13)+chr(10)+"X-PALM:4.0"
Msg=Msg+Chr(13)+chr(10)+"N:苗字;名前"
Msg=Msg+chr(13)+chr(10)+"Sound;X-IRMC-N;X-PALM-N;CHARSET=Shift_JIS:みょうじ;なまえ"
Msg=Msg+Chr(13)+chr(10)+"TITLE:役職"
Msg=Msg+Chr(13)+chr(10)+"ORG:会社"
Msg=Msg+Chr(13)+chr(10)+"ADR:;;番地;市町村;都道府県;郵便番号;国"
Msg=Msg+Chr(13)+chr(10)+"NOTE:コメント"
Msg=Msg+Chr(13)+chr(10)+"TEL;WORK:連絡 会社"
Msg=Msg+Chr(13)+chr(10)+"TEL;HOME:連絡 自宅"
Msg=Msg+Chr(13)+chr(10)+"TEL;FAX:連絡 Fax"
Msg=Msg+Chr(13)+chr(10)+"TEL:連絡 その他"
Msg=Msg+Chr(13)+chr(10)+"EMAIL:連絡 メール"
Msg=Msg+Chr(13)+chr(10)+"X-Palm-Custom;1:カスタム1"
Msg=Msg+Chr(13)+chr(10)+"X-Palm-Custom;2:カスタム2"
Msg=Msg+Chr(13)+chr(10)+"X-Palm-Custom;3:カスタム3"
Msg=Msg+Chr(13)+chr(10)+"X-Palm-Custom;4:カスタム4"
Msg=Msg+Chr(13)+chr(10)+"End:VCARD"

Res=AppLaunch(0,"CSubLocalSend",0,Msg)

これらは、独自に解析した結果ですので誤りがある可能性があります。
特にVCALENDER形式、VCARD形式についてはこの件で初めてその存在を知り調べたものです。
もし情報に誤りがあった場合には、ご指摘頂けると幸いです。

- Page End -