ラベル FileMaker の投稿を表示しています。 すべての投稿を表示
ラベル FileMaker の投稿を表示しています。 すべての投稿を表示

2015年11月27日金曜日

メモ:ExecuteSQLメタ関数

メモ:ExecuteSQLメタ関数

参照:
http://notonlyfilemaker.com/wp-content/uploads/2014/01/The-Missing-FM12-ExecuteSQL-Reference-ja.pdf

引用:
FILEMAKER_TABLES
1. TableName
2. TableID
3. BaseTableName
4. BaseFileName
5. ModCount

FILEMAKER_FIELDS
1. TableName
2. FieldName
3. FieldType (SQLのデータ型。FileMakerのデータ型ではない)
4. FieldID
5. FieldClass (Normal, Summary, Calculated)
6. FieldReps
7. ModCount

Let (
[ $query = " SELECT *
FROM FileMaker_Tables "
; $header = "TableName, TableID, BaseTableName, BaseFileName, ModCount¶"
; $result = $header & ExecuteSQL ( $query
; ", " ; "" )
]; $result
) //


Let (
[ $query = " SELECT *
FROM FILEMAKER_FIELDS "
; $result = ExecuteSQL ( $query
; ", " ; "" )
]; $result
) //

2015年2月5日木曜日

【メモ】FileMaker Pro Server 11,12|64 ビット版 Windows 環境での ODBC 接続について

メモ:


引用:

64 ビット版 Windows 環境での ODBC 接続について


FileMaker 製品は 32 ビットアプリケーションとして提供されていることから、64 ビット版の Windows 環境で ODBC 接続を行うにあたっては、以下についてご注意ください。

1. xDBC のホストになる場合
64 ビット版の Windows 環境で、FileMaker を xDBC のホストとして使用する場合には、FileMaker Pro をデフォルトの「Program Files (x86)」ディレクトリではないディレクトリにインストールします。(64 ビット版の Windows 環境には、2つの「Program Files」ディレクトリがありますが、「Program Files」ディレクトリにインストールすることはできませんので、別途、インストールディスクのルート上などに「FileMaker」ディレクトリを作成し、その中にインストールを行います。)

2. 外部 SQLデータソースを利用する場合
64 ビット版の Windows 環境で、FileMaker から外部 ESS データソースを使用する場合には、32 ビット版の ODBC Data Source Administrator を使用しないと設定した DSN 等を使うことができませんので、C:\Windows\SysWOW64\ 内にある odbcad32.exe を起動して DSN を設定します。

3. Oracle データソースを外部 SQLデータソースを利用する場合
64 ビット版の Windows 環境では、FileMaker Pro がデフォルトの「Program Files (x86)」フォルダにインストールされている場合、Oracle データソースに接続しようとすると、Oracle ドライバは FileMaker Pro からのログイン情報を受け付けません。Oracle ドライバが正しく動作するようにするには、FileMaker Pro を「Program Files (x86)」ディレクトリではないディレクトリにインストールします。(64 ビット版の Windows 環境には2つの「Program Files」ディレクトリがありますが、「Program Files」ディレクトリにインストールすることはできません。



参照元:
64 ビット版 Windows 環境での ODBC 接続について | FileMaker : http://filemaker-jp.custhelp.com/app/answers/detail/a_id/9974/~/64-%E3%83%93%E3%83%83%E3%83%88%E7%89%88-windows-%E7%92%B0%E5%A2%83%E3%81%A7%E3%81%AE-odbc-%E6%8E%A5%E7%B6%9A%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

2015年1月15日木曜日

FileMaker|ExecuteSQL|フィールド名やテーブル名の変更によってSQLクエリが動作しなくなるのを防ぐ方法




The Missing FileMaker 12|ExecuteSQL Reference より
http://notonlyfilemaker.com/wp-content/uploads/2014/01/The-Missing-FM12-ExecuteSQL-Reference-ja.pdf#FileMaker

フィールド名やテーブル名の変更によってSQLクエリが動作しなくなるのを防ぐ方法が参考情
報に記載されています。"Robust Coding"のブログ記事やカスタム関数は、クエリを”動的”に
書く上でのヒントになるでしょう。

FM 12 ExecuteSQL: Robust Coding, part 1 | FileMakerHacks : http://filemakerhacks.com/2012/05/13/fm-12-executesql-robust-coding-part-1/

2014年8月25日月曜日

iPhone のホーム画面にアイコン(WEBクリップ)を追加。FileMaker Go 13

2017/11/14 追記 以下のWEBサイトでよりカンタンにホーム画面アイコンが作成出来ます。
Webclip Generator|好きな写真でiPhoneのホーム画面にアイコンを追加。FileMaker Go 用 ホーム画面のショートカットも作成出来る。 : 
https://fm-aid.com/webclip-generator/


iPhone のホーム画面にアイコンを追加。FileMaker Go 13
任意のURLスキーム「fmp://$/Clients.fmp12?script=ListClients&$NumberToList=10」 などを埋め込んだアイコンが比較的カンタンに作れます。

2012/12/22|Ver.2|iOS8くらい 以降でアイコンが表示されないのを修正。日本語ファイル名に対応。

サンプルファイル:apple-touch-icon.fmp12 (440k)




(01)
Title: アイコンの下に表示されます。
URL_Schem: fmp://$/Clients.fmp12?script=ListClients&$NumberToList=10 など
icon: 好きなアイコンを設定。
base64: [base64 ->]ボタンをクリック。


URLスキーム 例:
fmp://~/Clients.fmp12?script=ListClients
fmp://$/Clients.fmp12?script=ListClients
fmp://$/Clients.fmp12?script=ListClients&$NumberToList=10

以下など参照。


アイコンは、「Makeappicon : http://makeappicon.com/」を利用すると適切なサイズのアイコンが作成できます。


(02)
準備ができたら[Copy]ボタンをタップ。
「safari」を開きます。


(03)
「safari」のアドレスにペースト。


(04)
[開く]をタップ。(safari)

(05)
[矢印]をタップ。(safari)



(06)
[ホーム画面に追加]をタップ。(safari)


(07)
完了!
ホーム画面にアイコンが追加されました。


2014年8月21日木曜日

FileMaker WEBビューア経由でJSONデータにアクセス!(3)



FileMaker WEBビューア経由でJSONデータにアクセス!(2) :
http://qbxxdp.blogspot.jp/2014/08/filemaker-webjson2.html
から改良。

修正!
・OS X , iOS でJSONのキーが日本語の場合に対応。
・値がTEXTでない場合、[object Object] を出力しないように変更。
・JSONのキーに対する変数名を取得するように変更。
・Winは、クリップボード経由を追加。


検証:
FileMaker Pro 13
FileMaker Go 13
Mac OS X 10.9
Windows 7|Windows 8

○|Mac OS X 10.9
○|FileMaker Go 13
○|Windows 7|Windows 8 (クリップボード経由)

スクリプト:JsonAnalyzer
Web ビューアの設定 [オブジェクト名: "WEB1"; 処理: リセット]
スクリプト一時停止/続行 [間隔(秒): 0]
変数を設定 [$JSON; 値:Substitute ( JSON::JSON ; ["¶" ; ""] ; [Char ( 10 ) ; ""]  ; [Char ( 13 ) ; ""]  )]
変数を設定 [$OS; 値:Get ( システムプラットフォーム )]
変数を設定 [$HTML; 値:" ....."]
Web ビューアの設定 [オブジェクト名: "WEB1"; URL: "data:text/html;charset=utf-8," & $HTML]

$HTMLの中身     

「スクリプト:fmpJsonAnalyzer」 に変更を加え、JSONのキーと値をFileMakerのそれぞれのフィールドに取得できるように変更。

スクリプト:fmpJsonAnalyzer
変数を設定 [$fmKeys; 値:Substitute ( $fmKeys ; "{RTN}" ; ¶ )]
フィールド設定 [JSON::Key; $fmKeys]
変数を設定 [$MAX; 値:ValueCount ( $fmKeys )]
変数を設定 [$n; 値:1]
Loop
Exit Loop If [$n>$MAX]
変数を設定 [$fmKey; 値:GetValue ( $fmKeys ; $n )]
変数を設定 [$Values; 値:$Values  &If ( IsEmpty ( $Values ) ; "" ; ¶ ) & Evaluate ( $fmkey )]
変数を設定 [$n; 値:$n+1]
End Loop
フィールド設定 [JSON::Value; $Values]
フィールドへ移動 []



Windows専用スクリプト
スクリプト:JsonAnalyzer_clipboard
#For Windows Only
レイアウト切り替え [「JSON」 (JSON)]
フィールド設定 [SYSTEM::gClipboard; ""]
Web ビューアの設定 [オブジェクト名: "WEB1"; 処理: リセット]
スクリプト一時停止/続行 [間隔(秒): 0]
変数を設定 [$JSON; 値:Substitute ( JSON::JSON ; ["¶" ; ""] ; [Char ( 10 ) ; ""]  ; [Char ( 13 ) ; ""]  )]
変数を設定 [$OS; 値:Get ( システムプラットフォーム )]
変数を設定 [$HTML; 値:"....."]
#"data:text/html;charset=utf-8,
Web ビューアの設定 [オブジェクト名: "WEB1"; URL: "data:text/html;charset=utf-8," & $HTML]
変数を設定 [$n; 値:0]
Loop
スクリプト一時停止/続行 [間隔(秒): .5]
貼り付け [選択; SYSTEM::gClipboard]
Exit Loop If [ not IsEmpty ( SYSTEM::gClipboard )]
Exit Loop If [$n>10]
変数を設定 [$n; 値:$n+1]
End Loop
フィールドへ移動 []
If [$n>10]
カスタムダイアログを表示 ["!"; "DATA取得失敗"]
現在のスクリプト終了 []
End If
変数を設定 [$DATA; 値:SYSTEM::gClipboard]
#
変数を設定 [$DATA; 値:Substitute ( $DATA ; "\";$" ; "\"" & ¶ & "$")]
変数を設定 [$MAX; 値:ValueCount ( $DATA )]
変数を設定 [$n; 値:1]
Loop
Exit Loop If [$n>$MAX]
変数を設定 [$er; 値:Evaluate ( "Let ([" &  GetValue ( $DATA ; $n )  & "]; 0 )" )]
変数を設定 [$n; 値:$n+1]
End Loop
#
変数を設定 [$fmKeys; 値:Evaluate ( $fmKeys )]
フィールド設定 [JSON::Key; $fmKeys]
変数を設定 [$MAX; 値:ValueCount ( $fmKeys )]
変数を設定 [$n; 値:1]
Loop
Exit Loop If [$n>$MAX]
変数を設定 [$fmKey; 値:GetValue ( $fmKeys ; $n )]
変数を設定 [$Values; 値:$Values  &If ( IsEmpty ( $Values ) ; "" ; ¶ ) & Evaluate ( $fmkey )]
変数を設定 [$n; 値:$n+1]
End Loop
フィールド設定 [JSON::Value; $Values]
フィールドへ移動 []

$HTMLの中



8万文字のJSONデータでも取得できます。
OS X、iOS に比べると処理が遅いです。




2014年8月20日水曜日

FileMaker WEBビューア経由でJSONデータにアクセス!(2)

例えば、こんなJSONデータがあって、

「"2014-08-17T01:10:00+09:00"」このデータを

フィールド設定 [JSON::Result; $start.dateTime]
こんな感じで取得できたらイイですよね!
それができるんです!
しかも! プラグインなし! FileMakerの標準機能だけで!
※標準機能だけ と言いつつ、WEBビューア+JavaScriptは、使用します。


追記:2014/08/20
修正!
・OS X , iOS でJSONのキーが日本語の場合に対応。
・値がTEXTでない場合、[object Object] を出力しないように変更。
・JSONのキーに対する変数名を取得するように変更。
・Winは、クリップボード経由を追加。
FileMaker WEBビューア経由でJSONデータにアクセス!(3) : http://qbxxdp.blogspot.jp/2014/08/filemaker-webjson3.html



検証:
FileMaker Pro 13
FileMaker Go 13
Mac OS X 10.9
Windows 7|Windows 8

○|Mac OS X 10.9
○|FileMaker Go 13
△|Windows 7|Windows 8

「OS X」と「iOS:FileMaker Go 13」は、イイ感じです。
Winは、不安定です。

レイアウトに「WEB1」と言う名前でWEBビューアを設置。


スクリプト:JsonAnalyzer
Web ビューアの設定 [オブジェクト名: "WEB1"; 処理: リセット]
スクリプト一時停止/続行 [間隔(秒): 0]
変数を設定 [$JSON; 値:Substitute ( JSON::JSON ; ["¶" ; ""] ; [Char ( 10 ) ; ""]  ; [Char ( 13 ) ; ""]  )]
変数を設定 [$OS; 値:Get ( システムプラットフォーム )]
変数を設定 [$HTML; 値:" ....."]
Web ビューアの設定 [オブジェクト名: "WEB1"; URL: "data:text/html;charset=utf-8," & $HTML]

「$HTML」の中身


JavaScriptでJSONのキーをFileMakerの変数名にして
location.href = fmp://$/..... で渡すデータを作成します。
&$start.dateTime=2014-08-17T01:10:00+09:00&$start.timeZone=Asia/Tokyo.....
入れ子になっている場合は、ドット「.」でつなぎます。


(location.href = 'fmp://$/JSON?script=fmpJsonAnalyzer'+FMDATA; で受ける側。)
スクリプト:fmpJsonAnalyzer

フィールド設定 [JSON::Result;
$kind
& & $etag
& & $id
& & $status
& & $htmlLink
& & $created
& & $updated
& & $summary
& & $description
& & $location
& & $creator
& & $creator.email
& & $creator.displayName
& & $creator.self
& & $organizer
& & $organizer.email
& & $organizer.displayName
& & $organizer.self
& & $start
& & $start.dateTime
& & $start.timeZone
& & $end
& & $end.dateTime
& & $end.timeZone
& & $iCalUID
& & $sequence
& & $reminders
& & $reminders.useDefault
]
フィールドへ移動 []
スクリプト一時停止/続行 [制限時間なし] ※テストでGoogleカレンダーのEventを取得。テストなのでひとつのフィールドへ設定。


OS Xの場合、綺麗に取得できました!※テスト時は、「"kind: "& $kind」としていたので「Result」の値が異なります。
iOS FileMaker Go 13 でもバッチリです!



Windowsは、少し残念。
"htmlLink"の値が取得出来ていません。値に「=」があるのが問題のようです。
「%3D」に置換してみたりしましたが、無理。解決策は、また今度。



Windowsの場合は、まだまだ残念な事があります。
JSONのデータが多いと動作しません。

テスト
Googleカレンダーの「日本の祝日」データを取得してみました。


(location.href = 'fmp://$/JSON?script=fmpJsonAnalyzer'+FMDATA; で受ける側。)
スクリプト:fmpJsonAnalyzer

変数を設定で「$feed.entry.1.title.$t」こんな名前($が先頭以外にある)を設定するとエラーになりますが、取得時は、エラーになりません。

フィールド設定 [JSON::Result;
$feed.entry.1.title.$t
 & ¶ & $feed.entry.2.title.$t
 & ¶ & $feed.entry.3.title.$t
 & ¶ & $feed.entry.4.title.$t
 & ¶ & $feed.entry.5.title.$t
 & ¶ & $feed.entry.6.title.$t
 & ¶ & $feed.entry.7.title.$t
 & ¶ & $feed.entry.8.title.$t
 & ¶ & $feed.entry.9.title.$t
 & ¶ & $feed.entry.10.title.$t
 & ¶ & $feed.entry.11.title.$t
 & ¶ & $feed.entry.12.title.$t
 & ¶ & $feed.entry.13.title.$t
 & ¶ & $feed.entry.14.title.$t
 & ¶ & $feed.entry.15.title.$t
 & ¶ & $feed.entry.16.title.$t
 & ¶ & $feed.entry.17.title.$t
 & ¶ & $feed.entry.18.title.$t
 & ¶ & $feed.entry.19.title.$t
]
フィールドへ移動 []
スクリプト一時停止/続行 [制限時間なし] ※テストでGoogleカレンダーのEventを取得。テストなのでひとつのフィールドへ設定。

JSONデータ



OS Xの場合、取得OK!
iOS FileMaker Go 13 OK!



Windowsは、残念動きません。
色々試してみましたが、現在は、無理。
Windows の場合は、プラグイン:ScriptMakerPS を使うとカンタンです。

2014年8月2日土曜日

FileMaker WEBビューア経由でJSONデータにアクセス!

検証:
FileMaker Go 13 OK
Win8|FMP13 OK

残念ながら、Windows|FileMakerPro 13 では、動作せず。
Windows 8|FileMaker Pro 13 で動作OK!(2014/08/06追記)
以下を追加。
<meta http-equiv=\"X-UA-Compatible\" content=\"IE=8 ; IE=9 ; IE=10\" />

JSONをFileMakerの関数だけで扱うのは、厄介です。
JavaScriptの JSON.parse を利用してWEBビューア経由だと JSON の扱いがラクになります。
FileMaker Pro 13.0v3(v2?)から「fmp://$/」が使えるのでWEBビューアからのデータの受取がよりしやすくなりました。

JSONデータ


スクリプト:
Web ビューアの設定 [オブジェクト名: "WEB1"; 処理: リセット]
スクリプト一時停止/続行 [間隔(秒): 0]
変数を設定 [$JSON; 値:Substitute ( SYSTEM::gResult_JSON ; ["¶" ; ""] ; [Char ( 10 ) ; ""] ; [Char ( 13 ) ; ""] )]
変数を設定 [$JS; 値:*****
Web ビューアの設定 [オブジェクト名: "WEB1"; URL: $JS]

値:*****


受信スクリプト
スクリプト:fmpSetToken
フィールド設定 [targetGoogleAccount::refreshToken; $refresh_token]
フィールド設定 [targetGoogleAccount::accessToken; $access_token]


データ量が多い場合、速度の心配がありますが、検証は、また後日...。

FileMaker WEBビューア経由でJSONデータにアクセス!(2) :
http://qbxxdp.blogspot.jp/2014/08/filemaker-webjson2.html

2014年7月31日木曜日

FileMakerの標準機能だけ!?で、Google Calendar と連携できるか?

FileMaker 16,17,18 「URLから挿入(cURL)」版はコチラ。2019/12/26
https://qbxxdp.blogspot.com/2019/12/filemaker-google-calendar.html


FileMakerの標準機能だけ!?で、Google Calendar と連携できるか?
Google Calendar API v3対応。

結論:
FileMaker Go 13 > OK!
Mac FileMaker Pro 13 > OK!
Win  FileMaker Pro 13 > NG! ->OK

残念ながら、Windowsでは、無理です。(2014/07/31現在)
こちらのプラグインを使う方法で解決します。

追記:2017/02/02
以下を追加でWindowsでもOK。
jQuery.support.cors = true;


「Google Calendar API v3 を利用する準備」は、以下を参照。
http://qbxxdp.blogspot.jp/2014/07/filemakergoogle-calendargoogle-calendar_30.html


「クライアントID」と「クライアントシークレット」が取得できたらFileMakerの作業に入ります。

■アプリの利用許可~承認コードの取得
使用関数:
[URL を開く]
値:
https://accounts.google.com/o/oauth2/auth
?scope=https://www.googleapis.com/auth/calendar
&redirect_uri=urn:ietf:wg:oauth:2.0:oob
&response_type=code
&client_id={クライアントID}

■アクセストークン取得・リフレッシュトークン取得
使用関数:
[URLから挿入]
値:
httpspost://accounts.google.com/o/oauth2/token
?code={取得した承認コード}
&client_id={クライアントID}
&client_secret={クライアントシークレット}
&redirect_uri=urn:ietf:wg:oauth:2.0:oob
&grant_type=authorization_code


■リフレッシュトークン で アクセストークンを再取得
※アクセストークンは、使用期限が1時間なので、再取得が必要になります。
使用関数:
[URLから挿入]
値:
httpspost://accounts.google.com/o/oauth2/token
?client_id={クライアントID}
&client_secret={クライアントシークレット}
&refresh_token={リフレッシュトークン}
&grant_type=refresh_token

■イベント追加
※ココがポイント!Googleカレンダーにイベントを追加するには、データ送信時に アクセストークンをヘッダーに設定する必要があります。
 FileMakerの[URLから挿入:httpspost:]では、ヘッダー情報の変更が無理なので使えません。
 解決策:jQueryを使用します!
使用関数:
[Web ビューアの設定 : URLへ移動...]
値:
"data:text/html;charset=utf-8," & POST_jQuery::Script

location.href = 'fmp://$/FileName.fmp12?script=script01&$id='+msg.id;
でFileMakerにGoogleカレンダーのイベントIDを取得できます。

サンプルファイル:
https://sites.google.com/site/scriptmakerms/filemaker-faq/filemaker-google-calendar-api-v3

2014年7月30日水曜日

FileMakerからGoogle Calendarへイベント追加。Google Calendar API v3 (2)

FileMakerからGoogle Calendarへイベント追加。Google Calendar API v3使用。
http://qbxxdp.blogspot.jp/2014/07/filemakergoogle-calendargoogle-calendar.html

ニューバージョン(2014.7.29現在)。上記に加え
「承認コード取得時のコピペの省略」
「編集」
「削除」
「カレンダーリストの取得」
の機能を追加。

必要なもの:
FileMaker Pro 11 or 12 or 13
ScriptMakerPS | FileMaker Plugin for Windows
(FileMakerのフィールドに記述した「PowerShell」を実行し、戻り値を取得。)
https://sites.google.com/site/scriptmakerps/


FileMakerからGoogle Calendarへイベント追加。Google Calendar API v3 (1)と同じ内容の所があります。

Google Calendar API v3 を利用する準備。
Google Developers Console にアクセスし、プロジェクトを作成します。
Google Developers Console|https://console.developers.google.com/project

英語表記になっている場合は、Account settings で LANGUAGE を日本語に変更。

プロジェクト をクリックし、新しいプロジェクトを作成します。
私のGoogleアカウントの場合、すでに API Project と言うのがありましたが、別に一つ作成します。


[プロジェクトを作成]をクリック。


ここでは、プロジェクト名を「My Project」として進めます。
※プロジェクト名は、プロジェクト -> プロジェクト名 -> 課金と設定 で変更可能です。


「My Project」をクリック。
APIと認証
└API
で必要なAPIを有効にします。今回必要なのは、Calendar API のみなので他のAPIは無効にします。



APIと認証
└認証情報
で新しいクライアントIDを作成します。

アプリケーションの種類」は、「インストールされているアプリケーション」、
インストールされているアプリケーションの種類」は、「その他」を選択します。




「クライアント ID」 と 「クライアント シークレット」 が必要になtります。





ここからFileMakerの設定。
以下より「GCalendar_v3.fp7」をダウンロード。FMP 12 または、13の場合は、変換してください。

「ScriptMakerPS」が必要です。設定してください。(2014/7/15 現在、BETA版無料)


【新機能】
「GCalendar_v3.fp7」を開き、Google Developers Console で作成したプロジェクトの「クライアントID」と「クライアント シークレット」を設定。
[承認|Code取得(自動)|Refresh Token 取得] をクリック。



ブラウザで許可リクエストのページが開きます。
[承認する]をクリック。



自動でgOauthCodeフィールドに認証コードが入り、Refresh Token と access_token が取得されます。






[InsertEvent]をクリックし、Json_Resultフィールドにイベントデータが戻ればGoogle Calendarへのイベント登録に成功しています。




Refresh Token は、承認したGoogleアカウントで「アクセス権を取り消す」を実行するまで使用できます。access_token の有効期限は、1時間でそれを過ぎるとRefresh Token を元に再取得されます。

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
追記:2015/12/18
フィールド:Json4Event の計算式でJSONの文字のエスケープが不足しています。
バックスラッシュ(円マーク)、タブ などの文字がある場合、エラーになります。

フィールド:Json4Event の計算式の修正版は、以下になります。
ここから-------------------------------------------------------------------
Let(
[
 ST=GetAsTime ( start.dateTime )
;$ST=Right ( "0" & Hour ( ST ) ; 2 ) & ":" & Right ( "0" & Minute ( ST
) ; 2 ) & ":" & Right ( "0" & Seconds ( ST ) ; 2 )
;ET=GetAsTime ( end.dateTime )
;$ET=Right ( "0" & Hour ( ET ) ; 2 ) & ":" & Right ( "0" & Minute ( ET
) ; 2 ) & ":" & Right ( "0" & Seconds ( ET ) ; 2 )
;$SD=Substitute ( GetAsDate ( start.dateTime ) ; ["/" ; "-"] ; ["." ; "-"]  )
;$ED=Substitute ( GetAsDate ( end.dateTime ) ; ["/" ; "-"] ; ["." ; "-"] )
]
;
""

)

 &


Substitute ( JsonTemplate::JSON ;
["" ; Substitute ( summary ; ["\\" ; "\\\\"] ; ["\"" ;
"\\\""]; [Char ( 9 ); "\t"];  ["¶" ; ""] ) ] ;
["" ; Substitute ( description  ; ["\\" ; "\\\\"] ; ["\""
; "\\\""]; [Char ( 9 ); "\t"];  ["¶" ; "\r\n"] ) ] ;
["" ; Substitute ( location ; ["\\" ; "\\\\"] ; ["\"" ;
"\\\""]; [Char ( 9 ); "\t"];  ["¶" ; ""] ) ] ;
["" ;  $SD & "T" & $ST & "+09:00" ] ;

["" ;  $ED & "T" & $ET & "+09:00" ]

)
ここまで-------------------------------------------------------------------