Resources

| FileMaker事情 | Tips | 記事 | 製品レビュー | 書評 | つれづれ日記 | Download |


[Tips] 2007/04/07

FileMaker Day「なんでも質問、ご相談どんと来い!」
回答集&当選者発表!

今回は、予想以上に多くの方からご質問、ご相談ををいただきました。こちらにて可能な範囲でお答えしています。一問につき複数のメンバーから回答しているものもあります。
また、ご応募いただいた方々の中から、抽選でオリジナルグッズが当たります!

FileMakerロゴ入り、オリジナルグッズの抽選結果発表!
多くの方のご応募をいただきまして、ありがとうございました。この度厳選なる(もちろん、FileMakerでの)抽選の結果、以下ご質問の目次のタイトルに★印のある3名の方々がご当選されました。おめでとうございます!
※当選者には一両日中にメールが届く予定ですが、届かない場合は景品の発送先をご連絡ください。

質問の目次

Webからの投稿質問
Q.01:“編集、入力用のグローバルを用意した場合、明細部分の扱い方は?"
Q.02:“ポータルのレコード数に応じてレイアウト切替をしたい。"
Q.03:“ポータルを含めたレコード複製法"
Q.04:“レイアウトの最大サイズは8011pxなのでしょうか?"
Q.05:“基本ファイルの考え方のコツを知りたい"  Congratulations!
Q.06:“項目ごとにリレーションを作りたくない"
Q.07:“フィールド値の値一覧で三番目の要素をソートに指定したい"
Q.08:“フィールド内にWord, Excelなどの文書を埋め込んでその中身の検索は可能か?"
Q.09:“FMで作成したデータをWord, Excel, PDF形式で書き出すことは出来るか?"
Q.10:“指紋認証を利用してログインさせたい"
Q.11:“スクリプト自動化中の複数条件検索手法について"
Q.12:“サブウィンドウを表示している間、メインウィンドウを選択できないようにしたい"

当日の受付質問
Q.13:“印刷時にデータが抜けてしまうことがある。"
Q.14:“計算式でフィールド名を動的に取得したい"  Congratulations!
Q.15:“[フィールド設定]スクリプトステップでターゲットを動的に指定したい"
Q.16:“Table Occurrence とは一言で言えば何?"
Q.17:“FileMaker Serverを使用する利点は何?"
Q.18:“IWPで「戻る」を実行されたときの問題"
Q.19:“ラベル印刷時に、ラベル位置を指定したい"
Q.20:“レコードIDの始まりを0に、もしくは指定の値に戻す、設定するには?"
Q.21:“サイズの小さいフォントのイメージが違う"
Q.22:“データベース初心者への教育、指導方法について"
Q.23:“繰り返しフィールド、以前から変更されたことは?"
Q.24:“非保存のフィールドを使う際の注意点は?"
Q.25:“IsValid関数で意図と違う値が返る?"
Q.26:“カレンダーソリューションについて"
Q.27:“レイアウト上にURLを固定文字で記入すると、//が日付に解釈されてしまう"  Congratulations!
Q.28:“ネットワーク共有時のレコードロックについて"
Q.29:“任意のポータル行に値を設定するには?"
Q.30:“DBを複数(2人以上)で共同作業する際のポイント・注意点"
Q.31:“IWPで検索画面から入るには、どのようにすれば良いですか。"
Q.32:“IWPで、ログアウト後、再度ログインするとブラウザの横に縞々ができる"
Q.33:“データのエクスポート時にファイル名や拡張子を自由に扱いたい"
Q.34:“デベコン参加してみたいが、英語が不安なんです"

●Webからの投稿質問
Q.01:“編集、入力用のグローバルを用意した場合、明細部分の扱い方は?"

フィールドの内容が、安易に変更されない為に、保存用テーブルと入力用テーブル(同じ内容のフィールドをグローバルフィールドで作成)に分け、
 登録スクリプト→ フィールド設定[保存用;入力用]
 修正スクリプト→ フィールド設定[入力用;保存用]
で行うと上手く行きました。
使用テーブルは、
 保存用→会社 見積書
 入力用→G会社 G見積書です。
但し、見積書の明細(品名 数量 単価 金額)を「繰り返し」にしています。
そこで、質問ですが、「繰り返し」を使わずに、見積書と明細(品名 数量 単価 金額)を別のテーブルに分けた時、どの様にするべきか分かりません。リレーションをグローバル同士(G見積書 G明細)で組んでみましたが、上手く行きません。この時点でつまづいています。上記の様に登録スクリプト、修正スクリプトを組みたいです。

A: グローバルフィールドは関連元のキーとしては使えても、ポータルに表示する関連先の外部キーとしては使えないのです。
お手軽な方法ですが、もともとの明細テーブルを流用する方法をかきますね。

1.下準備
明細行テーブルに編集用のフィールドを用意します。
G見積書テーブルと明細のリレーションを作成します。
G見積書テーブルの主キーをG見積キーフィールドと仮定します。
明細側は見積書テーブルとのリレーションに使用している外部キーをそのまま使います。
編集用画面で表示するポータル行には、明細テーブルの編集用のフィールドを配置します。
2.実際の動作
編集画面に移動するまえに、その見積書と明細とのリレーションキーを、G明細テーブルのG見積キーフィールドに設定します。
関連レコードに移動して、編集用のフィールドにオリジナルのデータを転記します。
その後に、編集用の画面を表示します。
編集が終ったら、編集用のフィールドから元々のフィールドにデータを書き戻します。

編集用のG明細テーブルを使いたい場合は、Q.03の回答が参考になるとおもいます。
(今泉みゆき)


Q.02:“ポータルのレコード数に応じてレイアウト切替をしたい。"

ポータルのレコード数に応じてレイアウト切り替えは、できるのでしょうか?(例えば、2レコードは、aレイアウト、5レコードあれば、bレイアウト等)

A: 「ポータルのレコード数」というのは、言い換えれば「関連するリレーション先のレコードの数」ということになるかと思います。
1.リレーションの元テーブルで次の計算フィールドを用意する。ここでは、仮にフィールド名は「ポータル件数」とします。
 「ポータル件数」 計算式:count(リレーション先の伝票番号のような必ず値が存在するフィールド)
2.レイアウト切替のスクリプトを用意する。
 if[ポータル件数=2]
  レイアウト切替[aレイアウト]
 else if[ポータル件数=5]
  レイアウト切替[bレイアウト]
 end if
(Shin)


Q.03:“ポータルを含めたレコード複製法"

A: いろいろやり方は考えられますが、おおむね以下のような手順でしょうか。

1. 元レコードを複製
2. 複製後のレコードから、ポータルとのリレーションで使用するキーフィールドの値を取得、変数などにいれとく
3. 元レコードに戻って、[関連レコードへ移動]などでポータルの中身を対象レコードにする
4. こっちはこっちでなんとかする

要するに4の「ポータルの中身を複製する」部分が面倒なわけですが、考え方としては
A. ループで1レコードずつ複製し、変数の親キーを入れていく
B. インポートを使って一気にレコードを作り、変数の親キーを全置換で入れる
のどちらかでしょう。

Bの場合はさらに、
B-1. 対象レコードを別の一時テーブルにインポート、これをさらにもとのテーブルにインポートで戻す
B-2. 対象レコードをMerge形式のテキストファイルにエキスポート、このファイルを元のテーブルにインポートで戻す
のどちらかのやり方になるかと思います。

A、B-1、B-2のどれを使うかは好みでいいかと思います。Aは将来フィールドを追加したときなどのメンテナンスの手間が少なく、Bは処理速度が速いというのがおおまかな違いでしょうか。
(竹内康二)


Q.04:“レイアウトの最大サイズは8011pxなのでしょうか?"

A: 121inch x 121inchという数値は記憶にありますが、あらためてver.8.5で確認してみました。Winでは8,028px x 8,064pxでしたが、Macでは8,000px X 8,000px。FileMaker, OSの各バージョンによって微妙に変わってくる可能性はありそうです。(Shin)

Q.05:“基本ファイルの考え方のコツを知りたい"

Sevensdooeの皆さんは、スタータファイルをどうなさっていますか?
以前のFM-Tokyoで、スタータファイルについてのお話伺いました。
確かにカスタム関数など、使う毎に入れたんでは面倒ですので、とてもすばらしい手段だと感動いたしました。もし、その辺りのコツか何かを、ご披露下さればなーと思った次第です。

A: スタータファイルというより基本テンプレートのことですね。開発者によって好みの分かれる部分でもあり人それぞれかと思います。私の場合は、例えばカスタム関数は不要な「使わないかもしれない」ものは入れずに「必ず使う」もののみを厳選して入れておきます。その理由は膨大な数のカスタム関数に惑わされたくない、つまりメンテナンス性が落ちることを嫌ったり、わずかでもリソースを消費するようなソリューションにしたくないと言ったこだわりでしょうか。他に用意するものとしては、スクリプト定義ではログイン処理のような決まったルーチンの類いは組み込んでおいたり、コメント用スクリプトの元ネタ、テーブル定義では基本フィールド構成を持つ空テーブルなどを組み込んでいます。ポリシーとして最小限必要なもののみ派、といったところでしょうか(Shin)

Q.06:“項目ごとにリレーションを作りたくない"

IDで人物を入力する際に、
ID - 名前のリレーションが沢山出てきてしまうのは仕方が無いことなのでしょうか?
複数の項目に、人物を入力する際に、名前で無くIDを入力するようにしています。
例)
一つの台帳に、複数の担当が付くとします。
※受注担当、行程責任者、実務担当、チェック担当、納入担当、サポート・・・など。
これらの項目に一つのマスタから、選択して人物を登録する際に、名前ではなくスタッフIDを入力させるとします。

表示する際には、これらが例えば「032」とかのIDでは誰だか解りませんので「山田太郎」などと、そのスタッフの名前で表示をさせないといけないのです。そのさい、受注担当とスタッフID・行程責任者とスタッフID・・・・・と項目毎にリレーションをいちいち貼らなくてはならない物なのでしょうか?データモデリングの時点でしくじっているのかも知れないのですが、どうもこの小枝の様なリレーションが鬱陶しいのです。

A: 受注担当、行程責任者・・・、と、それぞれIDのフィールドをわけるのであれば、リレーションもそれぞれ必要となります。
データモデリング的に別のやり方をとるとすれば、中間テーブルをひとつ作るという手もあります。たとえばこんなです。

テーブル名:台帳担当
フィールド:ID     数字 シリアル自動入力
      台帳ID   数字
      スタッフID 数字
      担当種別  テキスト

台帳と台帳担当の間に
台帳::ID = 台帳担当::台帳ID
というリレーションを作り、
台帳担当と担当者マスタの間に
台帳担当::スタッフID = 担当者マスタ::ID
というリレーションを作ります。

次に、台帳のレイアウト上に台帳担当のポータルを配置し、担当種別フィールドに「受注担当」とか「行程責任者」という文字列を値一覧で入力しつつ、スタッフIDに担当者マスタのIDを入力します。ポータルで縦に並ぶのが使いにくければ、「1行目から1行分を表示」「2行目から1行分を表示」「以下同文」のように設定した1行だけのポータルを横に並べてもいいかもしれません。
こうすれば、担当の種別ごとにリレーションを作る必要はありません。ありませんが、そのかわりに「行程責任者」のみをリレーションだけで特定することは出来ません。個別にリレーションを持っていませんので、そりゃそうなんですが。ニーズにあわせて使い分けてください。
(竹内康二)

Q.07:“フィールド値の値一覧で三番目の要素をソートに指定したい"

フィールドの値を使用した値一覧を使用した際、三番目の要素でソートさせることは出来ないでしょうか?
人物入力の際に、名前を入れるのでなく、別テーブルをマスタにしてそこからの選択をさせる仕組みに変更しようとしています。そのマスタには、退職者なども入れなければならず、結果、フラグを立ててその中から選択させるようにしました。作ってメデタシメデタシかと思ったのですが、その先で詰まってしまっています。

スタッフの表示順が変更できないのです。籍はあるものの、独立した古参職員などが、上位に来てしまい、それが改善できません。頻度の高い新人や、中堅が下部に着てしまったりで、このままだと使用できません。カスタム値で行くしかないのかと頭を悩ませています。
何かえいやっ!という改善案が有る物なのでしょうか?

A: 値一覧のソートはちょっと制約があるので、あまりすっきりした解決策はないように思います。ご質問にあるように、値一覧で指定している2つのフィールド以外のフィールドをソート用に指定できればいいんですが、仕様としてそれはできないようです。あるいは、2番目の名前フィールドをソート対象に指定しておいて、ソート順に別の値一覧を指定できたりすると、なんとでもなるんですけどね。
妄想は別として、現状の結論としては以下のやり方ぐらいでしょうか。

・フィールド構成は以下の通り
 ID        数字
 名前       テキスト
 表示順      数字
 表示順_名前    計算(テキスト)
           = Right( "0" & 表示順 ; 2 ) & " " & 名前
・値一覧の2番目のフィールドには「表示順_名前」を指定する

とんでもなくショボいやり方ですが、いちおう機能はすると思います。
(竹内康二)

Q.08:“フィールド内にWord, Excelなどの文書を埋め込んでその中身の検索は可能か?"

A: 残念ながら、検索モードではオブジェクトフィールド内にカーソルが移動できません。また、スクリプトで検索モードにしてフィールド設定にしても、「このフィールドは変更できません」のようなアラートが表示されて、検索の条件は設定できません。
ということで、オブジェクトフィールドに埋め込まれたファイル内の情報を検索することはできません。(今泉みゆき)

Q.09:“FMで作成したデータをWord, Excel, PDF形式で書き出すことは出来るか?"

A: PDF形式、Excel形式はVer.8.0からは標準機能で書出しできるようになりましたね。しかし、Excel保存はレイアウト通りの書式では、書出ししてくれません。思う通りの書式でExcel保存したい、あるいは、Wordの文書として書き出したいということであれば、スタイルシートを用意して、XML形式で書き出す方法があります。英語ですが、詳しい情報がFileMaker Inc.のFileMaker XSLT Libraryにあります。
あとは、実際のExcelファイルをXMLスプレッドシート形式で保存すると、XMLのひな形になりますから、そこから微調整していくということも可能ですよ。
ただし、ExcelやWordのバージョンによっては利用できません。(以上は、Windows版のExcel/Word2003、MacOSXであれば、Excel/Word2004が必要です。また、Windowsの最新版である、Excel/Word2007ではまた事情が変わると思われます。)
(今泉みゆき)

Q.10:“指紋認証を利用してログインさせたい"

FileMakerのファイルを開く→ログインで、外付けの指紋認証機器などとの連動させることはできないのでしょうか?(例:サンワサプライのFP-RD1 指紋認証リーダー)
 a.あらかじめ、基本情報(指紋情報・ID)が登録してある人の指紋をリーダーで認証すると、その人のIDがフィールドに入力することは可能でしょうか?
 b.認証した情報によって、一般職or管理職別に再ログインすることはできるのでしょうか?
 c.a・bが可能となるような機器がありますか?

A: まずa.やb.といった動作、つまり認証の状態によってなんらかの動作をさせたいという部分は、FileMaker 7以降で強化されたアカウント管理機能でまかなえます。アカウント名をそのままIDにしても良いですし、アカウント名とIDとの対応テーブルを用意してもよいでしょう。データベース動作中にアカウントを変更したい場合は、[再ログイン]スクリプトステップを使います。
というわけで問題になるのは、いかに指紋認証を行うかという部分になるわけです。ある程度以上の規模で運用されているなら、Open Directory(MacOS X Server)やActiveDrectory(Windows2003 Server等)といった、外部認証用のサーバを連携させることになりますが、これに対応した指紋認証機器を使うことで、FileMakerでの指紋認証が可能になります。

こうした外部認証を使っていないシステムでも大丈夫。FileMakerのプラグインがあります。
- Productive Computing社の「Biometric Plug-In」
https://www.productive.cc/pci_cart/FMPro?-DB=PCSC_Products.FP5&-Format=catalog.htm&-Lay=CGI&ID_No=32&-Find

Sony製指紋認証装置+プラグインのセットで、399.95ドルです。
(茂田)

Q.11:“スクリプト自動化中の複数条件検索手法について"

今まで、「変数を設定」というスクリプトステップを知らなかったために、情報を集約しているレイアウト(a)上で検索に使用するフィールド情報を1行に集約する計算フィールド(A)を作成し、複数条件を検索をスクリプトで動作させる場合、検索フォームレイアウト(b)で入力した複数条件を検索フォームに作成した情報を1行に集約した計算フィールド(B)、スクリプトで(B)を(A)に入力して検索という行程を行っていましたが、検索項目の情報が不足(歯抜けで入力)している場合にうまく検索されないという問題がありました。
変数を設定の使用方法を覚えたので、以下のような動作を試しています。
[動作]
1.検索条件入力レイアウト上においてプラウズモードで複数フィールドに検索条件を入力する(スクリプト)
2.変数を設定(検索フィールド1の情報を変数1として格納)
 変数を設定(検索フィールド2の情報を変数2として格納)
   :
 変数を設定(検索フィールドXの情報を変数Xとして格納
3.検索モードに切り替え
4.実際に情報を入力をしているレイアウトに切り替える
5.計算結果を挿入(変数1→フィールド1)
   :
  計算結果を挿入(変数X→フィールドX)
6.検索実行
という行程で、満足できるように動くようにはなりました。しかし、変数を設定を繰り返さないでもプラウズモードの情報を検索モードに切り替えた後にインポート(1発で複数項目に入力した情報をコピー)させるということはできるのでしょうか? 検索の便利な技があれば…。

A: 「うまく検索されなかった」という状況を把握しきれませんが、検索をどうスクリプトにて作り込むか…といった問いでしょうか。
まず、お試しの方法の中でいくつか気づいた点です。
・せっかく変数を覚えられたのですが、このような検索では使わない方が簡単でしょう。
・単にフィールドに値を設定するだけであれば、[計算結果を挿入]より[フィールド設定]スクリプトステップを使うのが一般的です。レイアウト上にフィールドが配置されていなければ値を設定できませんが、[フィールド設定]スクリプトステップはその必要がありません。スクリプトを組む上では、こちらの方が楽でしょう。

ということで、検索の一般的な手法を以下に明記しますのでお試しください。

●最も基本的な検索スクリプト
1.レイアウト切り替え[検索したい情報のあるレイアウト]
2.検索モードに切り替え[一時停止]
3.検索実行[]
4.レイアウト切り替え[元のレイアウト]

2.のところでステータスエリアに[続行]ボタンが表示されます。この状態でユーザは条件を入力し、[続行]ボタンをクリックすることで検索が実行されます。
実用のためには、該当レコードが存在しなかった場合にどうしたいかを決めて、エラー処理を行います。
3.の前に
 エラー処理[オン]
のスクリプトステップを入れておき、3.の次に
 If[Get ( 最終エラー )=401]
  カスタムダイアログを表示["検索エラー";"検索条件に一致するレコードがありません"]
 End If
といったような処理を入れておくといいでしょう。(他にもエラーがあり得ますので、これだけで十分ではありませんが…) エラー番号については、一度一通り目を通しておくことをお勧めします。

●グローバルフィールドを使って検索を行う
前述の例では、ユーザにFileMaker特有のステータスエリアに表示される[続行]ボタンをクリックしてもらうことが前提となります。ユーザによってはこれが理解され難いため、もう少し独自の画面を用意したい場合があります。その他の様々な理由からも、グローバルを使って検索スクリプトを作り込むことはよくあります。グローバルフィールドは検索モードでも値を保持できるため、検索モードに切り替える前に値を変数に退避するなどの必要がありません。以下基本的な考え方を述べます。

0. 検索する可能性のあるフィールドの数分だけのグローバルフィールドを用意する。
1. 検索用レイアウトにはグローバルを並べる。
スクリプトで、
2. 1.のレイアウトに切り替える
3. ユーザにはブラウズモードのまま値を入力してもらう。
4. 検索用レイアウトで検索モードにする
5. グローバルのフィールドから適切なフィールドに値を設定する
6. 検索実行する
(Shin)

Q.12:“サブウィンドウを表示している間、メインウィンドウを選択できないようにしたい"

竹内さんより見せていただいたスクリプトステップで、メインウインドゥより上位に別の小ウインドゥを表示→スクリプトの一時停止?(記憶が曖昧です)をすることで、小ウインドゥを閉じるまで他の行動(入力、メインのウインドゥを閉じる)ができなくなるようなサンプルファイルを見せて頂いたのですが、それをもう一度説明付で拝見できませんか…?

A: サブウィンドウを開くスクリプトの中で、
・[ユーザによる強制終了を許可[オフ]]
ステップを実行し、スクリプトの最後は
・[スクリプト一時停止/続行]
で終わるようにします。

これで、サブウィンドウを開いたら、サブウィンドウを閉じることができず、他のウィンドウに切り替えることもできない状態になります。サブウィンドウ上での入力などはできます。そして、やってみるとわかりますが、[ステータスエリアの表示切り替え[隠す]]も実行しておいたほうがいいでしょう。さらに、これもやってみるとわかりますが、enterを押されたら終わりです。これに対応するには、最後の一時停止をLoopで囲んでおくという手がありますが、あまりやり過ぎると自分でデバッグしにくくなるので、ほどほどに。わたしは「『enterはきっと押さないだろう』という運用」が好きです。

さて、ユーザが勝手にウィンドウを閉じられない状況にしたので、閉じるための方策もあわせて用意する必要があります。以下のようにしてみてください。

・[ウィンドウを閉じる[現在のウィンドウ]]ステップ1行だけのスクリプトを作る
・このスクリプトを実行するボタンをサブウィンドウ上に配置する
・ボタンのオプションで[現在のスクリプト]を[終了]にする

このボタンに「閉じる」とでも書いておけば良いでしょう。
(竹内康二)


●当日の受付質問

Q.13:“印刷時にデータが抜けてしまうことがある。"

大量印刷時にデータの白抜けが起きて困っています。
画面表示はポータルで→関連レコードに移動→印刷
先日出た8.5のパッチで「改善されました」となっているのでFM社でも問題として認識している?
ただ、現在使用しているのがFM7.0 Proでパッチが無いのです。

再度そのレコードのみ印刷すると問題なく印刷されるので、スクリプトに問題は無いように思います。
こんな問題にどう対応しているか、教えてください。

A: 幸いにして?そのような症状にあたったことはないのですが、もし、そんな目にあったとしたら、以下のようなことを試してみると思います。ポイントは画面描画の負荷を極力減らすとか、メモリくいそうな処理をはしょる、とかですね。
  • スベックの高いマシンでテストしてみる。
  • 印刷のLoop処理できちんとウィンドウの固定がされているかどうか確認する。
  • 余計なところでウィンドウの再描画がないか確認する。
  • IF文が入り組まないようにスクリプトを見直す。
  • 関連レコードに移動するとき、可能ならポータルのないレイアウトを利用する。
  • 関連レコードへ移動を繰返さないで印刷されるように構造を見直す。

いよいよとなったら、PDF形式で保存する方法を選ぶ、というのもありかな思います。
(今泉みゆき)

Q.14:“計算式でフィールド名を動的に取得したい"

計算フィールド内で演算定義をする時に、フィールド名を利用したい。フィールド名を得る方法はありますか。

A: Get(アクティブフィールド名)関数というものがあり、カーソルが入っているフィールド名を計算結果として返します。ただし、再計算させるには、画面の再描画が必要になります。スクリプトと併用すれば随時フィールド名を取出すことは可能です。(今泉みゆき)


Q.15:“[フィールド設定]スクリプトステップでターゲットを動的に指定したい"

A: [フィールド設定]や、[フィールドへ移動]、[計算結果を挿入]等のスクリプトステップは、ターゲットのフィールドをプルダウンで指定するために、動的な指定ができません。やってできない事はないですが、かなりムリヤリ感の強いものにはなります。

方法1:かなりダサいやり方
ありうるパターン全ての[フィールド設定]ステップを作っておき、[If]ステップで実行し分けるというものです。ダサいです。

If [ 判定部分 = "A" ]
 フィールド設定 [ フィールドA ; 値 ]
Else If [ 判定部分 = "B" ]
 フィールド設定 [ フィールドB ; 値 ]
Else If [ 判定部分 = "C" ]
 フィールド設定 [ フィールドC ; 値 ]
End If

方法2:少しマシなやり方
[フィールド設定]ステップに、あえてターゲットフィールドを指定しないでおきます。この状態で実行すると、その時にアクティブな(カーソルが入っている)フィールドに対して[フィールド設定]が行われますので、これを利用します。
スクリプトでは、タブ順にしたがってフィールドを移動していき、目的のフィールドにカーソルが入ったら[フィールド設定]ステップを実行します。必要なフィールドを全部並べたレイアウトを別途用意しておき、そちらで実行する必要があるでしょう。目的のフィールドがないと無限ループになります。(笑)

Loop
 Exit Loop If [ 判定部分 = Get ( アクティブフィールド名 ) ]
 次のフィールドへ移動
End Loop
フィールド設定 [ 値 ]
(竹内康二)

Q.16:“Table Occurrence とは一言で言えば何?"

Table Occurrence とは一言で言えば何でしょうか。データベースにおけるViewと同じようにも思うのですが…。

A: まず、一般的なRDBMSで言うところのViewテーブルと解釈できるのではないかという点ですが、それはちょっと違うかと考えています。Viewテーブルはどちらかと言えば、レイアウトに設定されたTable Occurrence(以下TO)やその関連TOのフィールドが配置されている状態と「似ている」と言えるでしょうか。TOは、それ自体が単体で直接何かをできるものではありません。FileMakerにおいてはインタフェースを担うレイアウト、レイアウトオブジェクトやフィールド定義、スクリプトそして計算式と、ありとあらゆるところでテーブルではなくTOが指定されます。

「一言で」というのは厳しいのですが「理屈のあるテーブル」ではどうかな。理屈というのはリレーションを含めた「視点」を意味しています。他のTOとどのように繋がるかの視点をいくつでも持てるとも言えます。TOはどんどん必要に応じて増やしてください。これらをうまく使い分けるだけで、複雑な処理が魔法の様に簡単になることもあります。

すでにご存じかも知れませんが「Key Concepts in FileMaker 7」を何度も読み返してみてください。時間が経ってからとか、何度か読み返していくと違う発想に繋がったり、新たな発見があるかと思います。
>> FileMaker 7の謎を解き明かすドキュメント「Key Concepts in FileMaker 7」by Michael Harris
(Shin)

A: Table Occurrenceとは、愛です。
(竹内康二)

Q.17:“FileMaker Serverを使用する利点は何?"

FileMaker Serverをシステム開発で選択する利点は何でしょうか。他のデータベースソフトとの使い分けはどういうことを基準に行われますか。

A: FileMakerプラットフォームでの運用や開発時にFileMaker Serverを利用する利点については、以下のものがあげられます。
  • 情報の一元管理
  • データやファイル破損のリスクを低減
  • 運用を停止することなく自動バックアップが可能
  • セキュリティの向上

他のデータベースとの使い分けについては環境や要求次第ともいえますが、一般的に考えられているよりもFileMakerが活躍できるフィールドは広いと考えます。他のデータベースと比較してFileMakerがアドバンテージを持っていると思われるものは、以下の要素でしょうか。
  • (良くも悪くも)スキーマの定義がユルい
  • 開発スピードが速いため、早い段階でプロト版を提示できる
  • 帳票を作りやすい
  • 構造の変更が比較的容易
  • エンドユーザがデスクトップで使っている既存の資産をそのままWeb公開できる

特に、「帳票を作りやすい」という利点から、既存のデータベースシステムのサブシステムとしての利用価値も高いと言えます。xDBC、XMLなどで既存のデータベースシステムに接続し、「その時に欲しい情報を持つ帳票を作り散らかす」ことが比較的気軽にできます。
(竹内康二)

Q.18:“IWPで「戻る」を実行されたときの問題"
FMP8,FMPA8,FMS7(Win)

本日のプログラム(2)の入力画面の途中でブラウザの戻るポタンを押してもデータ自身に影響ない様にするには…のご紹介が無かったようです。
iwpの入力画面でフィールドを掴んだままブラウザの閉じるや戻るを使用した際、一定時間内に再度同レコードを編集することができなくなりますが、これを回避する方法はありますか?

A: 問題点としては、戻る画面を使わせないようにすることと、仮に戻ってしまってもデータ自身には影響の出ないようにすることの2点で処理しなければいけないと思っています。
まず一つ目は戻るをさせないようにすることですが、IWPの場合、どうしても戻るの制御に問題がありますので、私の場合まずは最初のログイン画面でブラウザーのツールバーを非表示にし、且つステータスエリアをロックしてこちらも非表示にさせています。ナビゲーションボタン群は出せてしまいますし、バックスペース等のキーストロークで戻られてしまいますが、まずは最初のフィルタリングでボタンを使わせないことを明示することが必要と考えています。

更に、入力については、いきなりそれぞれの入力可能なフィールドに入力をさせてしまうと「戻る」行為をされてしまった場合に一定期間の入力不可の状態になりその関係で他のデータに影響がでることになりかねません。そこで、入力画面と表示画面をまずは分離し且つ入力画面には入力可能なフィールド内容をグローバルフィールドで同じだけ準備します。そこで入力画面に入る場合(新規/修正)には、予め記載されている内容を全部グローバルフィールドに書き出し、あくまで修正はこのグローバルフィールドの内容にのみします。さらに、最終的にデータを更新する際にはこのグローバル値を全て該当する通常のフィールド値に書き戻します。
こうすることで、仮に入力(修正)画面にはいったあとに戻るボタンを押されたりしてもデータ自身には影響がありません。また、このグローバル値を消去したり保持したりすることである程度の履歴までは残した上で運用することもできます。
今回ご紹介しようとした内容は、あくまでデータを保持することをメインにして考えておりましたので必ずしも回答にはなっていないかもしれませんが、ご検討いただければと思います。
(有賀啓之)


Q.19:“ラベル印刷時に、ラベル位置を指定したい"
(Mac)

住所録ファイルからラベルレイアウト印刷する際に、一名のレコードを任意の位置に印刷する方法はありますか?

A: こちらのサンプルなんかいかがでしょう?
FileMaker Fun Night! 第19回の「[FMスーパーテクニック]〜誰でも組み込める!ラベル印刷の奥義〜」でご紹介したものです。
ドキュメントはないんですが(すみません)、中を見ていただければ雰囲気はわかっていただけるかと...。
※ログインアカウントによる切分け処理を含むため、自動ログインにはなっておりませんが、デフォルトのAdmin / パスワード無し、でフルアクセスでログインできます。
(竹内康二)


Q.20:“レコードIDの始まりを0に、もしくは指定の値に戻す、設定するには?"
FMP8,6,5.5,5 FMPA6,5.5,FMS8,7(Mac/Win)

レコードIDの始まりを0に、もしくは指定の値に戻す、設定する方法はありますか?


A: ご質問の意図はフィールド定義オプションの、[入力値の自動化]-[シリアル番号]のことをおっしゃっているのかと思われますが、スクリプトの「次のシリアル値を設定」スクリプトステップではいかがでしょうか。(Shin)


Q.21:“サイズの小さいフォントのイメージが違う"
FMP8.5(Mac)

テキスト入力時、6ポイント等小サイズの時、選択がイメージと異なってしまう状況が続いている

A: Mac OS Xの場合、OSのアンチエイリアスの設定が影響するようです。「システム環境設定」の[アピアランス]で、[滑らかな文字を使用しないフォントサイズ]を[4以下]にしておけば、5ポイント以上のフォントに関しては問題がなくなるはずです。
(竹内康二)


Q.22:“データベース初心者への教育、指導方法について"
FMP8.5,7(Mac/Win)

大田区にある自動車部品口上でFMで商品管理のDBを作りました。主に使われる社員さんは年輩の方が殆どで、パソコンも日常業務やむを得ずと言う感じでお使いになっています。あまりお詳しくはありません。ましてデータベースについては全くといっていいほどご経験も知識もありません
幸いに社長さんはたいへん興味をお持ちなので、システムを仕上げることができました。これからエンドユーザさんにご指導しなければなりません。一体どのようにご指導したら良いのか不安を抱えています。データベース初心者への教育についてアドバイスをお願いいたします。

A: 僕自身、大昔のワープロ専用機から始まって初心者への指導をしてきましたが、その中で大事だと思うこと、それは「専門用語を絶対に使わない」という点です。たとえばプロの開発者になろうと勉強する場合は、用語とその意味や概念をしっかり覚えることが大事になるわけですが、ユーザ向け講習においてはこの点を180度考え変えるべきかと。

もちろん今は、初心者の方といってもある程度のパソコン用語はご存じでしょう。しかし、それを前提としないで説明をするのです。「カタカナ用語を覚える」という部分が、こうした方には大きなストレスになっているのかな、と思うこともあります。そうやってみると、実は初心者の方というのは決して理解力が劣るのではなく、単に不慣れなだけなんだということが見えてくるかと思います。

しかし、そうやってもどうしても、人の話を聞いてくれない、一度言ったことをすぐに忘れてしまう方というのはどうしても存在します。これはもう、物事を習う姿勢という点の問題かもしれません。こうなってくると、画面をどう工夫しても、マニュアルをいくら充実させても、どうしてもうまくいかないことはあり、こればっかりは対処のしようがない、と思っちゃうことすらあります。

また、ある程度説明しても同じことの質問が繰り返し来てしまう、ということも起こりうるかと思います。この場合はリモートアクセスで外部から画面に入れるようにしておき、電話やSkypeでしゃべりながら、操作をアシストする、という形でのサポートを継続されるのはいかがでしょうか。

この場合はWindowsのリモートデスクトップでは、外からアクセスした瞬間に相手の画面がログオフ状態になってしまい役に立ちません。双方が画面を見ることができるツールはいくつかありますが、僕はCITRIX社の「GoToMyPC」というものを使っています。

- GoToMyPC
http://www.gotomypc.com/
(茂田)


Q.23:“繰り返しフィールド、以前から変更されたことは?"
FMP8,FMPA8(Mac/Win)

繰り返しフィールド(ver.3)のVer.8で変更されたことを教えてください。細かくなったと聞いております。

A: 繰り返しフィールドのVer7/8以降の変更点は
Ver7からの変更点
計算式内で繰り返しの位置を指定するときには、GetRetpetition関数を使わなくても"フィールド名[3]"のように指定できます。また、"[3]"の部分には計算式も記入できます。

Ver8からの変更点
任意の繰り返しの位置と繰り返し数をレイアウト上で指定して配置できます。
 設定の例: 表示する繰り返し 2 から 3 垂直

フィールド設定などで、設定するフィールドを指定する時に、繰り返しの位置指定に計算式を設定出来るようになりました。これにより、条件によって設定する繰り返しの位置を変更することができます。
(今泉みゆき)

Q.24:“非保存のフィールドを使う際の注意点は?"
FMP8.5,FMPA8.5,FMS8(Win)

値一覧を作る時に非保存の計算フィールドを使うと「これは索引がひけないけど大丈夫?」的メッセージが出てきます。いつもこれにひるんでしまうのですが、非保存のフィールドを使う際に注意すべき点、考慮しなければいけない点などありましたら教えてください。

A: おっしゃるように値一覧や、リレーションの先のキーフィールドなど、場面によっては「索引(index)」があるからこそできる機能とも言えます。索引については、その意味やどう便利なのか、デメリットは何かなど、把握していれば確認メッセージも怖くなくなりますよね。データベースを扱う上では理解していなければならない事項です。
書籍「ファイルメーカーPro大全」のP.109で、索引について詳細に解説されています。ぜひ一度目を通してみてください。
(Shin)


Q.25:“IsValid関数で意図と違う値が返る?"
FMP8.5,FMPA8.5,FMS8(Win)

元々8で作ったファイルのスクリプトに、
IF[IsValid(フィールドA)]
というのがあって、フィールドAに値が入っている時に動いて欲しかったのです。
それを8.5で動かしたら動かなくなり
IF[〜〜〜〜  =1]
と条件を足したら動くようになりました。
また計算結果が存在しない時(関連レコード)FM7では「0」が帰っていたのにFM8.5では「ブランク」が帰ったりしています。
FM7やFM8、FM8.5間で使用する際に注意する点、各バージョンの違いを教えてください。

A: そのような細かい違いは実はいろいろあります。方法論としてはむしろ、「バージョン間の細かい差異に左右されない方法を取る」という考え方をお勧めします。たとえば、IsValid関数は本来「フィールドタイプとデータの型があっているか」あるいは「リレーションの(データではなく)構造が失われていないか」といった判定をしますので、「値が入っているかどうか」を判定するには向きません。この場合は
Not IsEmpty ( フィールドA )
を使います。
また、関連レコードが存在するかどうかを判定するのも、
Not IsEmpty ( TO名::ID )
のように、相手の主キーのような、レコードがあれば必ず値が入っているフィールドを指定して「Not IsEmpty」の判定を行います。

0も""(ブランク)も同じように判定したい場合などは、
フィールドA > 0
のように判定すれば、どちらの場合も偽となります。
(竹内康二)

Q.26:“カレンダーソリューションについて"
FMP8.5,FMPA8.5(Mac)

蜷川晋さんのプレゼンの中で省略されたカレンダーのしくみを是非知りたいのでお願いします。(月、週など)

A: ちらっとお見せしただけでしたが、SeedCodeCalendarというカレンダーテンプレートの事ですね。製品版とフリー版で、機能の内容により様々な版があります。購入すれば完全にアクセスフリーでご自身でカスタマイズできるものです。
標準的な機能を備えたバージョンの「SeedCodeCalendar日本語版」が昨年末リリースされました。デモ版がダウンロードできます。(実は私がローカライズしたものです。手前みそですみません)
あるいは、今すぐちらっと中身をご覧になりたい場合は、英語版ではありますがフリーのバージョンがありますので、お試しになってはいかがでしょうか。機能は少なめです。こちらの「Calendar Component : Free Version」からダウンロードできます。いつか時間が取れれば、イベントでもまたご紹介させていただきますね。(Shin)


Q.27:“レイアウト上にURLを固定文字で記入すると、//が日付に解釈されてしまう"
FMP4.0(Win)

レイアウトに固定文字で「http://www.aaa.bbb/」と配置すると、IWPで見た時に「//」の部分が日付になってしまう。

A: FileMakerの最近のバージョンでは仕様が変わっているようですが、ver4あたりだとこのようになったようですね。わたしはテキストオブジェクトを「http:/」と「/www.aaa.bbb/」の2つにわけていました。しょぼいですが有効です。
(竹内康二)


Q.28:“ネットワーク共有時のレコードロックについて"
FMP8,FMPA8,FMPD7(Mac/Win)

スクリプト使用時の注意点コツなどがあれば教えてください。可能であれば処理取消し(ロールバック処理)についても。

A: [レコード/検索条件を開く]スクリプトステップでレコードのロックを行い、[レコード/検索条件復帰]スクリプトステップでロールバックを行う、というのがいちおうの回答となります。注意点としては、すでに他のユーザによってレコードがロックされていた場合は、[レコード/検索条件を開く]ステップの実行に失敗しますので、[レコード/検索条件を開く]ステップの直後でエラー値を判定し、処理を分岐する必要があります。また、レコードをロックしている間にユーザにレイアウトの何もない部分をクリックされると、レコードが確定してしまいますので、ロールバックはできなくなります。これを本気で避けようとすると、かなりムリヤリな処理や構造を作りはじめることになりますので、正直お勧めできません。(笑)

複数レコード、あるいは対象レコード全体に対するレコードロックやロールバックを行う場合は、トランザクション用のテーブルや中間テーブルを別途用意する必要があり、ちょっとここでは書ききれません。FileMaker Advisor Magazineの2006年3月号に、Todd Geistによる非常に興味深い記事がありますので、よろしければご参照ください。
(竹内康二)

Q.29:“任意のポータル行に値を設定するには?"
FMP8.5,8,FMPA8.5,FMS8,FMS7(Mac/Win)

ポータルの中の特定の行、特定のフィールドにテキストや数字をペーストする方法を教えてください。

A: ボータル行にボタンをおきます。必要なフィールドに値を設定するための、フィールド設定スクリプトステップを設定する、あるいは、複数のフィールドに設定したいなら、スクリプトを用意してそれを実行させるようにします。とくに行を指定しなくても、クリックしたボタンがある行のレコードに対して、フィールド設定は実行されます。また、フィールド設定スクリプトステップは、フィールドへ直接入力出来なくなっていても機能してくれます。
余談ですが、コピー・ペーストスクリプトステップはなるべく使用しない、というのが幸せかと。(今泉みゆき)


Q.30:“DBを複数(2人以上)で共同作業する際のポイント・注意点"

FMP8.5,8.7,FMPA8.5,8.7,FMS8,7(Mac/Win)
A: 思いつくままに挙げてみます。
  • 基本構造はみんなで一緒に作る。あるいは誰かが作ってよく説明する。
  • テーブルやフィールド、レイアウト、スクリプト等の名前付けのルール、構造の作り方などを統一する。
  • スクリプトや計算式のコメントを活用し、作成者や修正者を必ず記録しておく。
  • 他人が見てもわかるように作る。
  • 各人がばらばらのファイルを作るのではなく、サーバで共有された同じファイルをみんなで更新する。
  • インターネット越しに共有する場合は、[FileMaker Server への接続を保護する]のチェックを忘れずに。
  • レイアウト担当、スクリプト担当など、得意分野ごとに担当をわける。
  • データベース定義、レイアウト定義、スクリプト定義等、定義対象が違えば複数人が同時に編集できることをうまく利用する。

-> FileMaker Dayレポート(3)「自分流」開発手法ですいすい構築参照
(竹内康二)


Q.31:“IWPで検索画面から入るには、どのようにすれば良いですか。"
FMPA8

A: ブラウズ画面で検索する方法で解決できると思います。
検索用の画面を作り、そこに検索用のフィールドをグローバルフィールドで配置します。その上で検索ボタンを押した際には
検索モードに切替
フィールド設定[検索先フィールド][検索用グローバル]
検索実行
レイアウト切替
で実行できるのではないでしょうか?
ブラウズモードのまま検索をさせる方法ですが、IWPに限らずいろいろ使用箇所はあるとおもいますのでご検討ください。
(有賀啓之)


Q.32:“IWPで、ログアウト後、再度ログインするとブラウザの横に縞々ができる"
IWPで、ログアウト後、再度ログインするとブラウザの横に縞々ができます。これを避けるにはどうすればよいですか。

A: セブンズドアメンバーでは現象にあったことがなく、他の方々にもご意見求めたところ・・
「すいません。これ遭遇したことがないので、何とも判りません。聞いたことがあるような気もするのですが......ごめんなさい」(有賀啓之)
「うーん、その現象は僕もハッキリ言って経験無いのですが、ブラウザの横の部分はFMのバージョンによって微妙に挙動が変わります。よって、最新版のFMと対応ブラウザを使ってください、としか答えようが無いです(;;)。」(伊藤芳信)


Q.33:“データのエクスポート時にファイル名や拡張子を自由に扱いたい"
FMPA8.5(Win)

データのエクスポートの時に、「ファイル名やパスは変更可能であるが(ダイアログを出す設定)、拡張子を固定する。」ということをやりたいのですが、できますでしょうか?
ファイル名、パスを変数etc.で指定できると思うのですが、ファイル名はその都度入れたい。またパスを指定してしまうとダイアログ無しになってしまう(はず)ので、どうしたらよいか教えてください。

A: 理想としては、一旦ファイルパスを指定するダイアログがでて、というのがいいんですけど、WSHとか使う必要がありますよね。
Windowsなら、Webビューワで代用できます。(IE上では、ファイルのブラウズもできるのはご存知ですよね?)
1.保存先を指定する画面にWebビューワを配置して、デスクトップかどこかデフォルトの場所を表示するようにしておきます。
 このレイアウトにファイル名用のフィールドを配置しておくとさらにいいかと。
2.ユーザがここ、ときめた階層をひらいたら、指定ボタンクリックなどしてもらい、GetLayoutObjectAttribute関数でその階層のURLを取出します。
3.取出したURLをファイル参照用に調整して変数に設定します。
(今泉みゆき)

Q.34:“デベコン参加してみたいが、英語が不安なんです"
FMP8.5,6,FMPA8.5,FMS8,5.5

このような会を開いていただきありがとうございます!会社を休んできた甲斐があります。(いつもの土曜の夜は家庭があるためなかなか参加できません)
iwpの話はとても参考になりました。ゲスト認証の後の認証はどうなるのか(質問したものです)会社に戻っていろいろやってみます。すみません、今日は質問思い浮かびません。
強いて言えば、デベコン参加されるくらいなので、皆さん英語は堪能なのでしょうか?デベコンも行ってみたいですが、そういう意味でハードル高いです(泣)

A: FileMakerを知っていて、スキで、かつなんちゃってエーゴができれば十分楽しめます!…と思うのです
(Shin)

A: 行くことを前提にした場合のちょっとした英語慣れ方Tips

まずは、FIleMakerを英語モードで起動してメニューや各種定義画面の英語表記に慣れておきましょう
更に、Advisor.comでFileMaker Magazineを購読して、FileMakerを題材に目から入る英語を勉強しましょう(一石二鳥)
更に更に http://podcast.buddysystems.com/ でFileMakerネタのPodCastを聞いて音で聞こえるFileMakerの世界を楽しみましょう

って感じでしょうか?
ちなみに日常的にもDVD等で英語字幕付き映画を見ると驚くほど英語に自信がつきますよ。
(有賀啓之)

A: 英語がまったくわからなくても、画面の動きを追ってるだけで価値のあるセッションというのも多数存在します。逆に、ちょっとやそっとの英語力じゃわけわかんない、というのもある。これはセッションのレベルというより、スピーカーのデモ方法によるかな、と思っています。
そうした点以上に、FileMaker使いが一堂に会する熱気を現場で実際に感じることが、実はものすごく大事なんじゃないか、とも僕は思っています。FileMakerを多少なりとも使っているなら、一度は参加する価値があるし、どうせ参加するなら早いほうがいいです。
あるいは単に、日本からの参加者との人脈作りだ、と考えるだけでも価値あるかもしれません。
(茂田)

以上

Copyright © 2004-2006 sevensdoor.com. All rights reserved.