みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Shin 様
いつもありがとうございます。
①で実行しているスクリプトは、開発段階でそれなりに動作に時間が必要なことは確認できております。
1日中Loopさせている&プラグイン使用ため、クライアントでの実行にすることはできず、クライアントから停止することもあるためサーバーで実行させておく必要がございます。
逆に別のサーバースクリプトをローカル実行にしてみようと思います。 重めの処理は何でもかんでもサーバーにやらせているので、見直してみたいと思います。
himadanee様
いつもありがとうございます。
①も、別のサーバースクリプトもスケジュールではなく、同一スクリプトでもございません。
分かり辛く申し訳ないです。
同時最大数は記憶している限り数百だったと思います。
お世話になっております。
FileMaker Pro, Server 20.1.2
OS:Windows 10 & Windows Server 2019
サーバースクリプト※①実行中に、別のサーバースクリプトを実行した時のFileMaker Proでのパフォーマンスが良くないです。
①で実行している主なスクリプト内容は、外部API通信を利用したデータ取得、更新やファイルからのインポートととなり、1日中Loopしています。
①を実行中に、別のサーバースクリプトを実行すると通常1秒のところ7~15秒程度かかったりします。
①が動いていないときや、新たに別のサーバースクリプトを実行させていない時にはパフォーマンスに問題ありません。
スクリプト内容によると言われればそれまでなのですが、
ここの設定を見直すべき、小技などがあれば教えていただけますでしょうか。
Windows Serverのマシンスペックは低くはないと思います・・・
(Intel(R) Xeon(R) E-2334 CPU @ 3.40GHz 64.0 GB)
原因の1つと思われる箇所に、APIでデータを取得する際に、データが重すぎて数秒固まっています。
「〇〇」の処理をサーバーに行わせている時は、特に重くなる 等の情報でも構いません。
よろしくお願いいたします。
Shin 様
ありがとうございます。
いただきました情報で設定し、様子を見てみたいと思います。
himadanee 様
Shin 様
いつもありがとうございます。
まだ完全に再帰を理解できていませんが、再帰は行っていないと思います。
ユーザーがスクリプト実行 → その中で上記のLoop サーバースクリプトを実行。これが停止指示があるまでLoopしています。
他の原因を探っておりますが、Loopの中でcURLを使って外部通信を行っており
その際にインターネットが断線していることが可能性として上がってきました。
cURL転送はデフォルトのタイムアウトが設定されていない(タイムアウトしない)とのことで、ここに制限を付け様子を見てみようと思っております。
https://curl.se/libcurl/c/CURLOPT_TIMEOUT.html
タイトルと話が逸れてしまい申し訳ございません。
himadanee 様
ありがとうございます。
分かり辛く申し訳ございません。
処理内容はかなり端折っており、Exit Loop Ifにも条件があり、
この全体のLoopや、中の各Loop処理毎にログを取っています。
そのログが途中で止まっており、それ以降作成されていない(Loop内の各処理も動いていない)ので
Loopの制限に達した可能性を疑っていました。
関係ないとのことで別の線を探ります。
お世話になっております。
Window Server 2022 Standard
FileMaker Server 20.1.2.207
FileMaker Pro 20.1.2.204 です。
以下のようなスクリプトを、ユーザーがスイッチを操作するまでLoopさせています。
Loop
Exit Loop If ~~~~ユーザーがOFF指示~~~~
Loop
変数を設定 [$Run1; 値: $Run1 + 1 ]
~~~~処理10回程度~~~~~
Exit Loop If
End Loop
変数を設定 [$Run1; 値: ""]
Loop
変数を設定 [$Run2; 値: $Run2 + 1 ]
~~~~処理10回程度~~~~~
Exit Loop If
End Loop
変数を設定 [$Run2; 値: ""]
End Loop
たまに異常(スクリプトは止まっていないが動いていない)が起きており、原因を調べておりましたところ以下のような公式の技術仕様を見つけました。
総計 50,000 再帰呼び出し コールスタックにおいては、どのポイントでも 10,000 コールまで掘り下げることができます。この限界を超えると、カスタム関数は、"?" を返します。 テール再帰は、テールコールによってコールスタックのサイズが大きくならないように適切に最適化されます。
・・・書いてあることがよく分かりません。上記のようなスクリプトだと制限に引っかかり止まる可能性がありますでしょうか。
よろしくお願いいたします。
Shin 様
いつもありがとうございます。
そうですよね。認証情報はスクリプトで取ってきているので、
そこに送信も噛ますってことですね。
ありがとうございました。
またご相談させてください。
himadanee 様
早速ありがとうございます。
やはりそうですか・・・
メール送信を行っているスクリプトが結構あるので、もう少し情報を待ってみたいと思います。
お世話になっております。
Windows10
FM 18 です。
メール送信の時の、SMTPの設定ですが、企業によって
SSLだったり、TLSだったりすることがあると思います。
FileMakerでメール送信スクリプトを行うと、
接続の暗証化(SSL / TLS )と、認証方法を事前に決めておかなければならず、
両方に対応させようとすると、事前に分岐させるしかないのでしょうか。
メール送信の度に、分岐作っているのですが、スマートなやり方はあるのでしょうか。
よろしくお願いいたします。
himadanee 様
Shin 様
ご回答ありがとうございます。
Shin様からいただきました開発者ツール、まだ詳細を確認できていないのですが試してみたいと思います。
またこの件で詰まりましたら質問させていただきます。
よろしくお願いいたします。
こちら、そのような方法は無いということでしょうか。
本文が分かりにくいため再掲させていただきます。
会社Aと会社Bで同じファイルメーカーのファイルを使っております。
構造は同じファイルですが、レコード数や入力されている内容は違います。
会社Aで変更した、フィールドの情報、レイアウト、スクリプトの変更を会社Bのファイルメーカーに反映させるには
どのような方法が一番適しているでしょうか。
可能な限り、構造だけを反映させ、レコード内容は操作したくありません。
一部だけはコピー可能等でも構いません。
何卒よろしくお願いいたします。
いつもお世話になっております。
環境 FM18
FileMakerで独自システムを作成、複数社で使用する場合に、
どのように全社にアップデートを対応させていくのがスムーズなのでしょうか。
開発はその複数社のうち1社が行うものとします。
FileMaker Serverは各社にあるものとします。
ここでいうアップデートとは、バージョンアップデートではなく、開発によるアップデートです。
使用中のシステムの各テーブルデータをバックアップし、新たなシステムに入れ替え後にインポートするという方法となる場合、
気を付けねばならないことがあれば教えてください。
Get IDやシリアルの使用があり、引っかかる部分な気がしています。
よろしくお願いいたします。
Shin 様
ありがとうございます。
ご説明で少し腑に落ちた気がします。
あとは実践で身に着けていきたいと思います。
himadanee 様
置換を行うのはテーブルBです。マスタCでも置換を試しましたがうまく動きませんでした。
(共にテーブルBがフォーカスされている場合)
そうなんです。グローバルフィールドの条件は無視されていると思います。 #1で書きました。
ここが私の認識違いなのか、仕様なのか知りたいという質問でもありました。
himadanee 様
流れを書いていないため、操作に関連がなさそうに見えますね。申し訳ございません。
テーブルBに10000レコードあり、うちマスタCに存在する関連レコードが500件を全置換したい場合
テーブルB上で、500に絞ってから全置換した方が早いためです。(検証済み)
この全置換にマスタCの情報をつかう(任意のテキストを持ってくる)ということです。
Shin 様
マスタCに、
・Code AAA、ID 001(レコード1とします)
・Code BBB、ID 001(レコード2とします)
・Code AAA、ID 002(レコード3とします)
テーブルAには、Code AAA、BBBが存在。GlobalFieldは002。
テーブルBには、Code AAA、BBBが存在。テーブルBレイアウトで検索を行うと以下の結果になりました。
検索条件1 マスタC::Code * = レコード1~3がHIT
検索条件2 マスタC::ID * = レコード1~3がHIT
検索条件3 マスタC::ID 002 = レコード3のみHIT
私の認識では上記検索条件1、検索条件2でもレコード3のみHITすると思っており、嵌っておりました。
孫リレーションは、それぞれの先頭レコードのみが対象になることは認識しているのですが、リレーションの組み方が悪いのかと質問した次第です。
マスタCには過去のとある地点の情報を保持しており、
それを呼びたいシーンがあるためこのような構造となっております。
チポ様
はい・・・ 照合できると思って組んでみたらできないので、今回お聞きしてみました。
テーブルBのレイアウトに、マスタCの全フィールドを置いていろいろな動きを試したところ
Codeに「*」検索では、IDが加味されず結果が返されましたが、
適したIDで検索した結果、思うような結果が得られました。
(グローバルフィールドを使用した?)リレーションの理解が全く足りていないと痛感しました。
もっと自分で色々試してから質問すべきでした。
ありがとうございました。
チポ様、ありがとうございます。
テーブルAはユーザーが操作しており、置換等のスクリプトとの競合を避けたり、データ量が莫大であるために
テーブルBをエクスポート専用のユーザー不可視テーブルとしております。構造が回りくどく見えるかもしれませんがご承知ください。
作業用の不可視テーブルが他にも複数あり、それぞれからマスタへのリレーションを張ると、リレーションが多量で複雑になるためこのようにしております。
マスタCには
Code:AAA
ID:001
Code:AAA
ID:002
といったCodeだけでリレーションを張れない理由があります。
テーブルBで作業する際に、テーブルAのGlobal_Fieldを入れ替えることでマスタC、マスタDから任意のテキストを持ってきたいと考えております。
よろしくお願いいたします。
お世話になっております。
環境:Win10 FM18.1です。
図のようなリレーションは不可でしょうか?
https://i.imgur.com/FgHIKmt.jpg
目的:テーブルBに、マスタCのテキストと、マスタDのテキストを呼びたい。
作業テーブルAのGlobal_Fieldの値を動的にし、マスタからテキストを引っ張ってきたいです。
試したところ、マスタDからは望んだテキストが引っ張れますが、マスタCへの参照が思うようにいきません。
例えば、テーブルBのレイアウトに1000レコードあったとして、マスタCに存在するものだけを絞りたい時、マスタCのテキストを「*」検索すると
テーブルAのGlobal_FieldとマスタCのIDのリレーションが無視されます。(Global_Fieldに値は入っています。)
マスタCのCodeとIDは索引すべて としております。
よろしくお願いいたします。
確認が遅くなり申し訳ございません。
考えた結果、すべてに繋がっているメニューなるデータベースがありますので、そちらにフィールドで値を持たせておき
その値を取得するスクリプトを、各データベースから実行する形で落ち着きました。
スクリプトは1つで、値変更時にはフィールド内容の変更で良いのでユーザーが行いやすいかと思いました。
himadanee 様
Shin 様
案をいただき、ありがとうございました。
いただいた意見は、別箇所で生かせる部分があるかもしれませんのでしっかり留めておきます。
Shin 様
いつもありがとうございます。
データベースが複数あり、その中にテーブルが複数あるにもかかわらず
たった1つの情報を得るためにそれらからすべてリレーションを張っていくのはスマートなのか?と考えた次第でございます。
データベースを開いた際に、グローバル変数で取る、
Executeで適当に取ってしまう 等考えたのですが、
ユーザーが変更するには敷居が高いかと思いまして。
リレーションしかないのであれば諦めますが、もし代替案がありましたらお願いいたします。
お世話になっております。
環境:
Windows10 及び Windows Server
Filemaker ver 18.1 です。
複数のデータベースからとあるフィールドの情報を取得したいときに一番スマートなやり方はどのようなものでしょうか。
(スピードや負荷が最適な方法)
一定の権限を持たせたユーザーが変更できるよう、なるべくスクリプトではなくフィールドの値を使いたいです。
例:
複数のデータベースから取引先にメールを送る際に、差出人情報を1か所で管理したい場合。
常に更新されるとあるフィールドの情報を、複数のデータベースから見たい場合。
以上、よろしくお願いいたします。
複数指定は
Substitute ( 対象テキスト ; [ 検索テキスト01 ; 置換テキストA ] ; [ 検索テキスト02 ; 置換テキストB ] ; ; [ 検索テキスト03 ; 置換テキストC ] )
とすればいけます。
分岐条件を付ける場合は、caseやif関数を使います。
https://fmhelp.filemaker.com/help/16/fm … /case.html
Case ( テキスト = "a" ; Substitute ( テキスト ; 検索テキスト ; 置換テキスト ) ; テキスト = "b" ; Substitute ( テキスト ; 検索テキスト ; 置換テキスト ) )
himadanee様
ありがとうございます。
公式からも正しくは「設定可能な最大サイズ」であり、誤訳であったと回答をいただきました。
デフォルト近くまで落としておこうと思います。
予約してるから使ってねと設定していたつもりが
予約されているが為に(特にサーバスクリプトで)使えないというお恥ずかしい話でした。
ありがとうございました。またお願いします。
himadanee様
ありがとうございます。
私も半信半疑だったため、公式へ問い合わせてみました。
昔のversionのヘルプですと、ここまで多く割り当てろとは書いてなかったような。
回答が得られましたら共有させていただきます。
RAM16GBのサーバで512(default)で気にならないぐらいのパフォーマンスがあるということですよね。
負荷が高い処理を行う際は、予約以上にメモリを消費してくれるのであればデフォルト近くまで落とそうかと思います。
現在Web公開は行っておりません。
よろしくお願いいたします。
[ Generated in 0.007 seconds, 8 queries executed - Memory usage: 663.05 KiB (Peak: 702.45 KiB) ]