filemaker-google-integration
2件のコメント

ModularFileMaker の #Parameters の使い方と活用方法について

こんにちは。
株式会社フルーデンスの小巻旭洋です。

FileMaker開発者がスクリプト引数を使う場合、多くの方が Goya社の SetProperty ( Name ; Value ), GetScriptProperty ( propertyName ) を使っていると思います。

https://www.goya.com.au/category/blogtags/script-parameters

今回は SetProperty ( Name ; Value ) と同じように使えるカスタム関数 #Parameters の紹介です。
多少の違いはありますが、どちらを使っても同じことが実現できますので、お好みで使って頂ければと思います。
私は #Parameters を利用しています。

#Parametersとは

ModularFileMaker にあるモジュールのひとつです。
ダウンロードは FileMakerStandards.orgGitHub からダウンロードできます。

カスタム関数の Created を確認すると Jeremy Bante さんの名前があるので、おそらく Jeremy Bante さんが最初に作られたのだと思います。


追記:2017/03/28
尊敬する Jeremy さんよりコメントを頂きました。
英語が苦手なため少し心配ですが追記致しました。

#Parameters の開発には Jeremy Bante さんは、もちろんのこと Dan Smith さん Matt Petrowsky さんも、関数の設計と実装に大きく関わっているとのことです。
尊敬する開発者の皆様に心から感謝致します。

Jeremy Bante

Dan Smith

Matt Petrowsky

Six Fried Rice
http://sixfriedrice.com/wp/

大変ありがたく使わせて頂いております。
感謝の気持ちでいっぱいです。
海外の開発者のかたは、オープンなのでいつもいつも勉強させて頂いております。

上記のURLを見て頂き、実際のファイルを確認するのが一番早いですが、英語に抵抗がある方もいると思うので、簡単に使い方を紹介できればと思い記事にしました。

ファイルのダウンロード

以下の説明動画の際に利用したファイルです。ご自由にダウンロードしてお使いくだい。

https://github.com/trhrkmk/blog-material

カスタム関数の管理

#Parametersの中の基本的な関数のみインポートしました。

filemaker-parameters-customfunction

今回は以下の関数のみの説明です。他の関数についても機会を見て記事にします。

  • # ( name ; value )
  • #Assign ( parameters )
  • #Filter ( parameters ; filterParameters )
  • ScriptRequiredParameterList ( scriptNameToParse )
  • ScriptOptionalParameterList ( scriptNameToParse )
  • VerifyVariablesNotEmpty ( nameList )

ちなみに #Assign ( # ( “name” ; “value” ) ) とすれば $name に value を設定できます。
つまり、動的に変数を設定することができます。

「こんなことしなくても “変数の設定” でいいんじゃない?」と思うかもしれませんが、活用できると大変便利ですので、ひとつひとつ動画をご確認頂ければと思います。

この部分の活用を手っ取り早く確認したい人は “4 Goto Object ( objectName { commit ; refresh } )” の動画を見てください。

スクリプトデバッガを使い説明

#Parametersの関数を説明するために、スクリプトを以下の4つに分けました。
それぞれのスクリプトをデバッガを使いながら説明します。

  • 1 # / Assign / Filter
  • 2 ScriptName ( 必須1 ; 必須2 { オプション1 ; オプション2 } )
  • 3 VerifyVariablesNotEmpty ( 必須 { オプション } )
  • 4 Goto Object ( objectName { commit ; refresh } )

1 # / Assign / Filter

スクリプト

画像はこちら

スクリプト名:1 # / Assign / Filter
#
#
#1 #(name-valu)
#カスタム関数 | # ( name ; value )
#
Set Variable [$_10param; Value:# ( "name" ; "value" )]
#
#────────────────────────────────────────────────────────────────────────────────
#
#2 Assign
#カスタム関数 | #Assign ( parameters )
#
Set Variable [$_20assign; Value:#Assign ( # ( "リンゴ" ; 200 ) & # ( "バナナ" ; 350 ) )]
#
Set Variable [$_21assign; Value:#Assign ( "てすと" )]
#
#────────────────────────────────────────────────────────────────────────────────
#
#3 Filter
#カスタム関数 | #Filter ( parameters ; filterParameters )
#
Set Variable [$_30filter; Value:#Filter ( # ( "名前" ; "田中" ) & # ( "趣味" ; "読書" ) ; "趣味" )]
#
Set Variable [$_31filter; Value:#Filter ( # ( "名前" ; "田中" ) & # ( "趣味" ; "読書" ) ; "しゅみ" )]
#
Set Variable [$_32filter; Value:#Filter ( "てすと" ; "しゅみ" )]
#
#────────────────────────────────────────────────────────────────────────────────
#
#4 Assign and Filter
#カスタム関数 | #Assign ( #Filter ( parameters ; filterParameters ) )
#
Set Variable [$!; Value:#Assign ( #Filter ( # ( "いぬ" ; 11 ) & # ( "うさぎ" ; 14 ) ; "うさぎ" ) )]
#
#────────────────────────────────────────────────────────────────────────────────
#
Pause/Resume Script [Indefinitely]
#

説明動画

説明動画を作りましたので、みてやってみください。

時間:2:03

2 ScriptName ( 必須1 ; 必須2 { オプション1 ; オプション2 } )

スクリプト

画像はこちら

スクリプト名:2 ScriptName ( 必須1 ; 必須2 { オプション1 ; オプション2 } )
#
#
#1 ScriptRequiredParameterList
#カスタム関数 | ScriptRequiredParameterList ( scriptNameToParse )
#
Set Variable [$_10required; Value:ScriptRequiredParameterList ( "" )]
#
#────────────────────────────────────────────────────────────────────────────────
#
#2 ScriptOptionalParameterList
#カスタム関数 | ScriptOptionalParameterList ( scriptNameToParse )
#
Set Variable [$_20optional; Value:ScriptOptionalParameterList ( "" )]
#
#────────────────────────────────────────────────────────────────────────────────
#
#3 Assign and Filter and ScriptRequiredParameterList
#カスタム関数 | #Assign ( #Filter ( parameters ; ScriptRequiredParameterList ( scriptNameToParse ) ) ) 
#
Set Variable [$_30assign; Value:#Assign ( #Filter ( # ( "必須1" ; 100 ) & # ( "オプション1" ; 1000 ) ; ScriptRequiredParameterList ( "" ) ) )]
#
#────────────────────────────────────────────────────────────────────────────────
#
#4 Assign and Filter and ScriptRequiredParameterList and ScriptOptionalParameterList
#カスタム関数 | #Assign ( #Filter ( parameters ; List ( ScriptRequiredParameterList ( scriptNameToParse ) ; ScriptOptionalParameterList ( scriptNameToParse ) ) ) ) 
#
Set Variable [$_40param; Value:# ( "必須2" ; 200 ) & # ( "オプション2" ; 2000 )]
#
Set Variable [$_40assign; Value:#Assign ( #Filter ( $_40param ; List ( ScriptRequiredParameterList ( "" ) ; ScriptOptionalParameterList ( "" ) ) ) )]
#
#────────────────────────────────────────────────────────────────────────────────
#
Pause/Resume Script [Indefinitely]
#

説明動画

説明動画を作りましたので、みてやってみください。

時間:1:26

3 VerifyVariablesNotEmpty ( 必須 { オプション } )

スクリプト

画像はこちら

スクリプト名:3 VerifyVariablesNotEmpty ( 必須 { オプション } )
#
#
#1 VerifyVariablesNotEmpty
#カスタム関数 | VerifyVariablesNotEmpty ( nameList )
#
Set Variable [$_10assign; Value:#Assign ( # ( "ワニ" ; 29 ) & # ( "鳥" ; 83 ) )]
#
Set Variable [$_11verify; Value:VerifyVariablesNotEmpty ( "鳥" )]
#
Set Variable [$_12verify; Value:VerifyVariablesNotEmpty ( "牛" )]
#
#────────────────────────────────────────────────────────────────────────────────
#
#2 VerifyVariablesNotEmpty and ScriptRequiredParameterList
#カスタム関数 | VerifyVariablesNotEmpty ( ScriptRequiredParameterList ( scriptNameToParse ) )
#
Set Variable [$_20verify; Value:VerifyVariablesNotEmpty ( ScriptRequiredParameterList ( "" ) )]
#
Set Variable [$必須; Value:"必須"]
Set Variable [$_21verify; Value:VerifyVariablesNotEmpty ( ScriptRequiredParameterList ( "" ) )]
#
#────────────────────────────────────────────────────────────────────────────────
#
#3 Error Handling
#
If [VerifyVariablesNotEmpty ( ScriptRequiredParameterList ( "" ) )]
	#$必須 が設定されていれば ok
Else
	#$必須 が設定されていなければ ng
	Exit Script [# ( "result" ; False ) &
# ( "scriptName" ; Get ( ScriptName ) ) &
# ( "lastError" ; Get ( LastError ) )]
End If
#
#--- okな場合に以下のステップが実行 ---
#--- step 1 ---
#--- step 2 ---
#--- step 3 ---
#
If [True]
	#--- step 4 ---
	#--- step 5 ---
End If
#
#────────────────────────────────────────────────────────────────────────────────
#
Pause/Resume Script [Indefinitely]
#

説明動画

説明動画を作りましたので、みてやってみください。

時間:2:02

4 Goto Object ( objectName { commit ; refresh } )

スクリプト

画像はこちら

スクリプト名:4 Goto Object ( objectName { commit ; refresh } )
#
#
#==================================================
#check
#==================================================
#
#
Set Variable [$!; Value:#Assign ( #Filter (
	Get ( ScriptParameter ) ;
	List (
		ScriptRequiredParameterList ( "" ) ;
		ScriptOptionalParameterList ( "" )
	)
) )]
If [VerifyVariablesNotEmpty ( ScriptRequiredParameterList ( "" ) )]
	#ok
Else
	#ng
	Exit Script [# ( "result" ; False ) &
# ( "scriptName" ; Get ( ScriptName ) ) &
# ( "lastError" ; Get ( LastError ) )]
End If
#
#
#==================================================
#run
#==================================================
#
#
Go to Object [Object Name: : $objectName]
#
If [GetAsBoolean ( Get ( LastError ) )]
	#ng
	#
Else
	#ok
	#
	If [$commit]
		Commit Records/Requests []
	End If
	#
	If [$refresh]
		Refresh Window []
	End If
End If
#
#
#==================================================
#end
#==================================================
#
#
#
#
#================== END ==================
#

説明動画

説明動画を作りましたので、みてやってみください。

時間:1:41

参考URL

@jbante
@dansmith65
@mattpetrowsky
http://sixfriedrice.com/wp/
http://www.modularfilemaker.org/module/parameters/
http://filemakerstandards.org/
https://github.com/filemakerstandards/fmpstandards
https://www.filemakermagazine.com/
https://www.geistinteractive.com/2011/07/18/passing-multiple-parameters/

おわり

遊んでいたらFileMakerからGoogleのAPIをたたけるようになりましたので、以前紹介したカレンダーも擬似的な実装ではなくGoogleカレンダーの情報をベースにできればと考えております。
GmailやGoogle Mapsにもアクセスできるので、色々とアイデアを形にして行ければと思います。

filemaker-google-integration

追記:2017/04/14
Googleカレンダーとの同期を試みたので、宜しければご覧ください。
FileMakerのカレンダーとGoogleカレンダーの同期を試みる

FileMaker や Zoho Creator に関することなら、どんなことでも大丈夫ですのでお気軽にご相談ください!
FileMaker開発者の方からの相談もお受けしております。会社の各種サービス内容もしっかりと更新していきますので、引き続きよろしくお願いいたします!

2014年からフリーランスとして活動し、2016年に株式会社フルーデンスを設立する。 最近は、GolangでCLIツールを開発したり、GAE/GoでWebアプリケーションを開発しています。

2件のコメント

  1. Thank you for sharing and explaining the functions and technique! I was heavily involved in writing the functions you’re describing in this post, and I want to share some credit where it’s due: Dan Smith and Matt Petrowsky are both heavily involved in the design and implementation of the functions. And some of the syntax and interface concepts were borrowed from a different set of functions by Six Fried Rice.

    1. Thank you for your kind comment.
      I appreciate you pointing it out.
      I made some changes.

      Thank You Again,
      Teruhiro

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください