2017年5月13日土曜日

FileMaker 16 URLから挿入|POST Message To ChatWork

FileMaker 16
スクリプト:URLから挿入 でカスタムヘッダーの指定ができるようになったので、ChatWorkへメッセージを送信してみる。

フィールドを作成
テーブル:Post_cURL
 フィールド:
 URL
 room_id
 messages
 Result
 message_id

テーブル:settings
 フィールド:api_token

テーブル:Post_cURL と テーブル:settings はデカルト積リレーションでつなぐ。


■スクリプト作成

スクリプト名:post_message
URL から挿入 [選択; ダイアログあり:オフ; $json;
/*URLを指定*/
Substitute ( Post_cURL::URL ; "{room_id}" ; Post_cURL::room_id )
;
cURL オプション:
Let([
¢option="
--request POST
--header X-ChatWorkToken:{api_token}
--data-binary body={messages}"
];
Substitute ( ¢option ;
["{api_token}" ; settings::api_token]
; ["{messages}" ; GetAsURLEncoded ( Post_cURL::messages ) ]
)
)
;URL を自動的にエンコードしない]

POSTするだけなら、スクリプト:URL から挿入  だけでOK!

POSTに成功した場合、変数:$json に {"message_id":"2001*******"}  が返ってきます。
cURLオプションの --data-binary body={messages} は、--Form だと改行が無くなります。
--data body={messages} これでもイケるみたいです。

■戻り値の解析:
JSON関連の関数が追加されたので、解析がカンタンです。
関数:JSONGetElement ( $json ; "message_id" ) とするだけ。

FileMaker 16 の スクリプト:URLから挿入 は、まんま、cURL(https://curl.haxx.se/)が組み込まれている様子。
なので、上記で設定した cURL オプションが、curl.exe でそのまま使えます。
FileMaker 15 以前のバージョンの場合は、
$URL=
$cURL_option=
としておいて
Event を送信 [「aevt」; 「odoc」;
"C:\curl\curl.exe " & $URL & " " & $cURL_option ]
としておけば、16への移行時に楽なのと、バージョンが混在していてもスクリプトの切り替えが楽です。
ただ、このままだと、戻り値の取得ができません。
戻り値の取得方法は、以下が参考になります。

FileMaker cmd.exe dirコマンドを実行して戻り値を取得。あれこれ。

2017年5月10日水曜日

FileMaker、Excelと連携。プラグイン無し!

FileMaker、Excelと連携。プラグイン無し!
プラグインは使いません。
Windows 7以降で標準搭載のPowerShellを使用します。
前準備:特に無し。

動作検証
Windows 10
FileMaker 11以降
Excel 2007, 2016

ファイル:Book1.xlsx を開き、セル:A1、A2 を書き換え、別名保存します。

スクリプト:
変数を設定 [$script; 値:
Let([
script="
$file='{filePath}';
$SavePath='{SavePath}';
$excel = New-Object -ComObject Excel.Application;
$excel.Visible =1;
$book = $excel.Workbooks.Open($file);
$sheet = $book.ActiveSheet;
$sheet.Range('A1')='{A1}';
$sheet.Range('A2')='{A2}';
$book.SaveAs($SavePath);
$book.FullName;
$excel.Quit();
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) ;
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($book) ;
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($sheet) ;
"];
Substitute ( script ;
["{filePath}" ; "C:\Users\PCUSER\Desktop\!Temp\Book1.xlsx"]
; ["{SavePath}" ; "C:\Users\PCUSER\Desktop\!Temp\Book1a.xlsx"]
; ["{A1}" ; Example::f1]
; ["{A2}" ; Example::f2]
)
)
]
Event を送信 [「aevt」; 「odoc」; "powershell -windowstyle hidden -Command " & Quote ( $script )]


「$sheet.Range('A1')='{A1}';」の部分を追加・変更すれば、他のセルへも文字列の設定ができます。

もっと複雑な操作が必要な場合は、プラグイン:ScriptMakerPSを使用する、「Operate Excel」が便利です。

2017年4月19日水曜日

BaseElements の BE_ExecuteSystemCommandは、日本語ダメ!?#FileMaker

https://baseelementsplugin.zendesk.com/hc/en-us/articles/205350557-BE-ExecuteSystemCommand
FileMakerのPlugin、BaseElements の BE_ExecuteSystemCommand ( command { ; timeout } ) で、cmd.exe の戻り値が取得できるようなので試して見ましたが、日本語があるとダメな様子。

やっぱり、cmd.exe の戻り値取得は、以下の方法で!
FileMaker cmd.exe dirコマンドを実行して戻り値を取得。あれこれ。