みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつもお世話になっております。
今回はFilemaker19のアドオンのバーコードジェネレーターについてお伺いしたいことがあり
投稿させていただきます。
今まではfilemaker14で、バーコードを生成する有料のプラグインを使用していました。
Filemaker19にアップグレードするにあたり、アドオンのバーコードジェネレーターを使用して
バーコードを生成したいと考えています。
以下の記事を参考にして、
https://note.com/filemaker/n/n91ac39348709
フィールドに番号を入力したらバーコードが生成されるところまでは出来ました。
上記の記事を抜粋しますと、
アドオンを追加した後に、
「BarcodeGenerator Advanced」というスクリプトを以下のように変更し、「テキスト」フィールドのスクリプトトリガOnObjectSaveに以下のスクリプトとスクリプト引数を指定します。
【スクリプト】
エラー処理 [ オフ ]
ユーザによる強制終了を許可 [ オフ ]
レコード/検索条件確定 [ ダイアログあり: オフ ]
変数を設定 [ $json ; 値: Get ( スクリプト引数 ) ]
変数を設定 [ $AddonUUID ; 値: JSONGetElement ( $json ; "AddonUUID" ) ]
変数を設定 [ $SourceField ; 値: JSONGetElement ( $json ; "SourceField" ) ]
変数を設定 [ $LineColor ; 値: JSONGetElement ( $json ; "LineColor" ) ]
変数を設定 [ $BarcodeDisplayValue ; 値: JSONGetElement ( $json ; "BarcodeDisplayValue" ) ]
変数を設定 [ $Format ; 値: JSONGetElement ( $json ; "Format" ) ]
変数を設定 [ $FieldName ; 値: JSONGetElement ( $json ; "FieldName" ) ]
スクリプト実行 [ 指定: 一覧から ; 「BarcodeGenerator Get WebViewer Object Name」 ; 引数: $AddonUUID ]
変数を設定 [ $WebViewerName ; 値: Get ( スクリプトの結果 ) ]
変数を設定 [ $text ; 値: Evaluate ( $SourceField ) ]
変数を設定 [ $options ; 値: JSONSetElement ( "" ; [ "lineColor" ; $LineColor ; JSONString ] ; [ "format" ; $Format ; JSONString ] ; [ "displayValue" ; $BarcodeDisplayValue ; JSONString ] ; [ "fieldName" ; $FieldName ; JSONString ] ) ]
Web ビューアで JavaScript を実行 [ オブジェクト名: $WebViewerName ; 関数名: "BarcodeGenerator_Generate" ; 引数: $text, $options ]
【スクリプト引数】
JSONSetElement (
"" ; [
"AddonUUID" ;
"C3718E1A-6CE7-4D69-A9D4-22D1B57C577C" ;
JSONString
] ; [
"SourceField" ;
GetFieldName (
バーコードジェネレーター::テキスト
) ;
JSONString
] ; [
"LineColor" ;
"Black" ;
JSONString
] ; [
"BarcodeDisplayValue" ;
true ;
JSONBoolean
] ; [
"Format" ;
"CODE39" ;
JSONString
]; [
"FieldName" ;
GetFieldName ( バーコードジェネレーター::バーコード ) ;
JSONString
]
)
問題はここからなのですが、
既存のバーコードが13万件ほどあり、プラグインを使用しなくてもバーコードが表示されるように置き換える必要があります。
(プラグインがない状態だと「?」が表示されてしまいます)
そこで、新たにレイアウトを作成して、リスト表示し、
スクリプトを使ってバーコードを生成しようといろいろと試したのですが、バーコードを生成することができません。
手動でひとつひとつやるとできるのですが・・・
以下のようなスクリプトを、「OnObjectEnter」や「OnObjectModify」や「OnObjectExit」など変えたりしてみたのですが、
一向にバーコードは生成されません。
レコード/検索条件/ページへ移動[最初の]
Loop
フィールドへ移動[【テキストを入れるフィールド名】]
フィールドへ移動[] //フィールドから抜けるために設定
レコード/検索条件/ページへ移動[次の;最後まできたら終了:オン]
End Loop
新たなフィールド【A】を作成し、そこに以下のようにフィールド設定してそこにスクリプトトリガを設定してみることも試したのですが、
バーコードは生成されませんでした。
Loop
フィールド設定[【A】;【テキストを入れるフィールド名】]
オブジェクトへ移動[【「バーコード」のフィールドのオブジェクト名】] //フィールドから抜けるために設定
レコード/検索条件/ページへ移動[次の;最後まできたら終了:オン]
End Loop
多数のバーコードを置き換えることのできるスクリプトを作成することは可能でしょうか?
お教えいただけますと幸いです。
よろしくお願いいたします。
「Web ビューアで JavaScript を実行」は、JavaScriptの完了を待たないので、連続して実行する場合は、それを考慮してスクリプトを組む必要があります。
アドオンのバーコードジェネレーター内のJavaScriprtでsetTimeoutやPromiseなどの非同期使われてなければ、以下のような組み方で解決できます。(時間が無いので詳しくは書けません...)
https://twitter.com/mrwatson_de/status/ … 4714348554
カンタンは方法としては、一時停止を入れる と言う方法があります。JavaScriprtの完了を待つわけではないので確実ではありません。
Offline
アドオンのJavascriptがFMのスクリプトを実行するので、その時点でFM側のスクリプトが終了してないとだめなのでは。
qb_dp様、himadanee様
返信いただき、また教えていただきまして、ありがとうございます。
ひとまず「一時停止を入れる」方法を試してみたのですが、ダメでした。
twitterのリンクを教えて頂いた方はちょっとまだ理解ができていないので、
よく読んで試せそうだったらやってみようと思います。
スクリプトの実行や終了のタイミングが大事そうですね。
うまく出来ましたらこちらでまた報告させていただきます。
取り急ぎ、お教えいただいたことに感謝の意を申し上げます。
とりあえず、一括して生成する一番簡単な方法は多分
BarcodeGeneratorHandleImage
の最後に以下を追加(処理が終わったら次のレコードで処理するように変更する)
If[Get(レコード番号)<Get(対象レコード数)]
次のレコードへ移動
スクリプト実行「BarcodeGenerator Trigger Generate As Configured」
End If
んで、先頭のレコードで
BarcodeGenerator Trigger Generate As Configured
を実行
この改変をすると、ボタンを押したレコード以降を全部生成しなおしてしまうので注意
https://community.claris.com/ja/s/quest … ジェネレータについて
ここに対象レコードのバーコードを作るサンプルがありますよ。
himadanee様、774様
教えていただきましてありがとうございます!
無事に、やりたかったことが実現できました!!
バーコード生成のプラグインは結構高価だったので、
アドオンで実現でき、しかも過去のバーコードも置き換えることができるとなると
実用的かつ経済的で助かります。
ありがとうございました。
Pages: 1
[ Generated in 0.045 seconds, 9 queries executed - Memory usage: 538.24 KiB (Peak: 543.15 KiB) ]