はじめに
カスタムアクションはFileMakerのファイルでスクリプトを実行するものですが、JavaScriptのカスタムアクションを実行してさまざまなWebサービスと通信することもできます。これはDayBack for FileMakerのバージョン9.53からの新機能です。
弊社はこの機能のプレビューを2015年のDevConで公開し、JavaScriptのアクションをどう使えるかのサンプルをいくつか紹介しました。この動画ではDayBack Onlineで紹介していますが、DayBack for FileMakerでも同様に使えるようになりました:
DayBack Calendar: DevCon Previews
SeedCode
チャンネル登録者数 1062人
DayBack Calendar: DevCon Previews
<div class="player-unavailable"><h1 class="message">エラーが発生しました。</h1><div class="submessage"><a href="http://www.youtube.com/watch?v=w2MSlerRrSc" target="_blank">www.youtube.com</a> での動画の視聴をお試しください。また、お使いのブラウザで JavaScript が無効になっている場合は有効にしてください。</div></div>
https://www.youtube.com/watch?v=w2MSlerRrSc
自分のファイルにJavaScriptのアクションを追加する
1 「CalendarInterface」テーブルに「CustomActions」という名前の新規フィールドを作成します。テキストフィールドで、繰り返しを「10」に設定します。各カスタムアクションの実際のテキストを、このフィールドの繰り返しに1つずつペーストします(サンプルのテキストをいくつか、こちらに掲載しています)。
2
3 「Load JavaScript Actions」という名前の新規スクリプトを作成します。このスクリプトは、使いたいアクションのテキストフィールドに名前を付けて書き出すものにします。以下は、2つのカスタムアクションを書き出すスクリプトのスクリーンショットです。
4
5
6
7
8 「Load Source Settings at Startup」スクリプトを編集します。先頭に「スクリプト実行」ステップを新たに追加して、先ほど作成した「Load JavaScript Actions」を実行させるようにします。
9
10 引き続き「Load Source Settings at Startup」スクリプトを編集します。「Custom Event Actions...」(カスタムイベントアクション……)のコメントを見つけます。ここでカスタムアクションを実行するためのボタン名とスクリプトを指定します。FileMakerのスクリプトの場合は、以下のようにしますが……
11 "Button Name, FileMaker Script Name"
12 ……JavaScriptのカスタムアクションでは、以下のようにします……
13
"Button Name, file:custom-action.txt"
14 ……「custom-action.txt」には、ステップ2のスクリプトで名前を付けて書き出したファイルの1つを指定します。
15
ソリューションの「Upon Opening」スクリプトを実行して、カスタムアクションを有効にします。
イベントのデータのトークンを使う
DayBackでは、JavaScriptのアクションが実行される時にイベントのデータに置き換えるためのデータのトークンを指定できます。したがって、JavaScriptのアクションがイベントからフィールドを受け取り、イベントのデータを他のサービスへ渡せて便利です(Slackの投稿にイベントのタイトルを含める、など)。このトークンの動作は、FileMakerのスクリプトで使用される$変数とは少し異なります。
JavaScriptのカスタムアクションで、データのトークンは、[[DataToken]]のように割り当てられているフィールドの識別子を二重かっこで囲んだものです。この識別子は、フィールド名ではありません。DayBackが内部構造で使っている、フィールド名を汎用化したものです。たとえばイベントIDのフィールドを参照したい場合、そのフィールドに「myevents::primarykey」という名前が付いているとしても、[[eventID]] となります。
データのトークンを使用するURLは、このような書式になります:
http://www.somewebsite.com?id=[[eventID]]&date=[[DateStart]]
アクセスできるトークンは、以下の通りです:
allDay
contactID
contactName
description
end(イベントの終了のタイムスタンプ)
eventID
eventSource(イベントのソース番号。「1」が「Source No 1」ではありません)
projectID
ProjectName
resource
start(イベントの開始のタイムスタンプ)
status
titleEdit(イベントのサマリ)
title(「eventsummerycalc」フィールド)
JavaScriptのコードでデータのトークンを使う場合は、トークンを引用符で囲むことを推奨します。値が空の場合に、JavaScriptのコードにエラーを返さないからです。データのトークンはすべてこのようなストリングになっていて、コーディングに一貫性があります。
たとえば、次の通りです:
var eID = [[eventID]]; alert(eID);
「allDay」などのBoolean値であっても、次の例のようなストリングを使用するとよいでしょう:
alert(eID);var isAllDay = "[[allDay]]" === "true"; //Boolean値を評価する
すぐに使い始められるカスタムアクションのスクリプト
オリジナルのアクションを作る手がかりとして、以下のサンプルを利用できます。
Slack WebHook(Slackのグループチャットにメッセージを送る)
Slackに投稿する人気のデモのコードです(動画はこちら):dayBackSlack.js
Harvest Time Tracker Widget
Harvestのアカウントからインラインの時間管理ツールを表示し、そのタスクに関するタイマーを開始するものです。2015年のDevConで弊社がデモをした時間管理のウィジェットです(動画はこちら):harvest.js
Parse And Open URL In Event
イベントのDescriptionを調べて、最初に見つかったURLを開きます:openFirstUrl.js
Track UPS Package
URLを開くのと同じように、このアクションはイベントのDescriptionを調べて、最初に見つかったUPSの荷物コードを追跡します:track-ups.js
WebDirectでスクリプトをコールする
カスタムアクションを使ってFileMaker Proのソリューション、FileMaker Go、WebDirectでスクリプトを開始できます。FileMaker ProとFileMaker Goでは、こちらで解説されているように「fmp://」のURLの書式を使用します。WebDirectでは、書式が少し異なります。FileMaker WebDirectでスクリプトを実行するURLの書式は以下の通りです:
http://<host>/fmi/webd#<database name>[?script=<script name> [¶m=<script parameter>][&<$variable name>=<value>]]
URLからWebDirectでスクリプトを実行する際には、いくつか注意点があります。FileMaker社が将来的に対応してくれることを望みますが、現時点での状況は以下の通りです……
• WebDirectでスクリプトをコールすると、データベースのセッションが新たに発生し、FileMaker Serverはこれを新規の同時接続として扱います。
• スクリプトが実行される前に、ソリューション中の「OnFirstWindowOpen」スクリプトが実行されます。
• 同じウインドウでアクションを実行しWebDirectのツールバーが表示されている場合、現在のツールバーの下にもうひとつツールバーが表示されます(これは早急に解決してもらいたいWebDirectのバグです)。
どのようなJavaScriptを利用できますか?
ほとんどすべて利用できます。Global Windowオブジェクトへのアクセスは許可していませんが、ウインドウに関するビルトインの関数はすべて直接コールできます。たとえばopen()、close()、alert()、location.hrefは、ウインドウのコンテキストでない限りはすべて利用できます。つまり、「window.location.href」ではなく、「location.href」を利用してください。
DayBackには、コーディングを容易にするためによく使われるライブラリもいくつかも含まれています。jQuery、BootStrap、moment.jsはすべて含まれています。そのため、これらのライブラリの機能をカスタムアクションで利用できます。
カスタムアクションのJavaScriptを作成する際には、コードがロードされた時に実行されることに注意してください(アクションを実行するボタンをクリックした時にロードされます)。したがって、「onload」やjQueryの「$.ready()」は必須ではありません。
原文:JavaScriptCustomActions|https://www.seedcode.com/pmwiki/index.php?n=DayBackForFileMaker.JavaScriptCustomActions
コメント
0件のコメント
サインインしてコメントを残してください。