いろんな局面でシリアルコードが使われていますが
特に入力と明細など親子関係を持つ伝票NOや、病院などの外来で日によって詳細が増えるもの、弁護士さんなら案件Noなどが対象かと思うのですが、コード番号をKeyにしてデータベースを処理される事が多いかと思います。
(顧客マスタや商品マスタなど、日々増えるものでなければデフォルトのオプションで十分)
レコードを増やせば001+1(増分)
はオプションで設定できますが、翌日は001から始めたい
などの場合は自己リレーションと計算式を用いれば可能になります。
これは日付で初期化し、001から始める方法ですが、月によって001にしたり桁を増やして0001にしたりも出来ます。コード番号が整理されて帳票なんかも見やすくなります。
サンプルがダウンロードできますので見ていただければ分かるのですが、
シリアルコードを作るのに、それに関係するフィールドが増えちゃうのが難点でもありますが、覚えて損はないかと思います。デフォルト装備のオプション設定では、001に戻すために都度、管理者権限のデータベースの管理でオプションを変更する、なんて面倒な事したくないですし・・・。
日や月によって001に戻ってくれたり、レコードを全部削除しても、新規レコードで001から始まってくれるのは便利です。
<欠番>
しかし、このコード、親子関係にあればKey設定をしますので、レコードを削除した時に欠番をどうするか考えなくてはいけません。
今回は欠番が発生したらそのままにする方法と欠番以降を詰めて連番にさせてしまう方法の2種類をサンプルにしました。
いろんなサイトでシリアルについての注釈が掲載されていますが、僕的には欠番を詰めて連番にさせる方法は好ましくないと考えています。
リレーションで親子関係にあれば、欠番が詰まって連番化されたことで、子の側のデータもズレて(書き換わる)しまうからです。これでは整合性が保てません。ですので、レコードを削除して欠番が発生したときは、そのまま放置をお奨めします。
では、欠番なしとは、どういうケースで使用するか、ですが
伝票などのトランザクション(親子関係)ではなく、呼び出しだけに使用するマスタ等であれば、Noを詰めても良いと考えます。ただし、商品マスタなど後に商品別の分析をするのであれば、危険です。担当者や人事などでも定年や退職などで欠番が出ますが、欠番なしになると欠番以降の関連データが飛んでしまいます。
僕の場合は、欠番なしという手法で開発を手掛けたことはありません。
ダウンロード(FM13以上)
2015年8月11日火曜日
2015年7月10日金曜日
マウスホイールでレコードが変わる(画面が変わる)
マウスホイールでレコードが変わる(画面が変わる)
これは、
スクリプトの
ツールバーの表示切替[ロック:隠す]
で動かなくなります。
ロック解除のスクリプトと併用させると、けっこう使えます。
明細の入力時など、マウスホイールは危険ですね~
これは、
スクリプトの
ツールバーの表示切替[ロック:隠す]
で動かなくなります。
ロック解除のスクリプトと併用させると、けっこう使えます。
明細の入力時など、マウスホイールは危険ですね~
値一覧をポータルにして絞り込む (中分類、小分類)
前回のファイルを利用して
値一覧をポータルで表示させて
絞り込んでいくもの。
値一覧のドロップダウン表示がどうも好きでない方向けです。
ダウンロードできますので中身をみてください。
苦肉ですが、画面はすっきりw
中分類を選択すると小分類に
小分類を選択すると商品マスタに
商品マスタを選択すると元の中分類に
前回のファイルに中分類のTO「中分類フロントP」を追加してポータルにしました。
13ならではのオブジェクトを重ねて、スクリプトのフィールド設定で隠してます。
ダウンロード(FM13以上)
値一覧をポータルで表示させて
絞り込んでいくもの。
値一覧のドロップダウン表示がどうも好きでない方向けです。
ダウンロードできますので中身をみてください。
苦肉ですが、画面はすっきりw
中分類を選択すると小分類に
小分類を選択すると商品マスタに
前回のファイルに中分類のTO「中分類フロントP」を追加してポータルにしました。
13ならではのオブジェクトを重ねて、スクリプトのフィールド設定で隠してます。
ダウンロード(FM13以上)
FileMakerで分類 絞り込み(中分類、小分類)
ひさびさにFileMaker
あれから時は過ぎ、なんと14なんかも出ちゃったりしました。ユーザーが増えました!ということでしょうね。ユーザーが増えるという事はいいことで、バージョンが上がったり、メーカー側の対応もよくなったりします。
随分と前に弁護士向けのソフトで大分類、中分類、小分類について書きましたが
そんなに分類分けが必要でなければ中分類、小分類だけでやってみようということです。
今回はバージョン13で作ってみました。
ダウンロードもできますので試してみてください。
動的値一覧と何が違うのかというと、ちゃんとid,と名称フィールドを作り、しっかりマスタ管理して動かそうということです。
よくあるのは、名称を値一覧にすることですが、当然索引設定されますので非常に検索呼出しが早くなるのですが、名称変更があり得るのなら、しっかりidなどの番号をKeyにして管理されたほうがいいと思います。
<2つの用途をみたします>
事前登録時の分類絞り込み(マスタ側)
事前登録されたデータを分類によって絞り込み、ガイドに表示(入力画面など)
というわけなので、事前登録時の考え方、
それを呼び出す絞り込みの考え方、そしてそのリレーションの組み方は当然違います。
事前登録の画面(商品マスタ)
先に中分類マスタ、小分類マスタを設定し商品マスタ設定時には、分類を絞り込り込める設定です。(中分類マスタで小分類を設定する)
一方で、入力画面で商品を分類の絞り込みによってガイド表示させる場合は、中分類をKeyにした商品マスタのテーブルオカレンスから値一覧設定で絞り込む様にします。
中分類側の値一覧設定、中分類マスタではなく、中分類をKeyにした商品マスタから閲覧するように設定します。
小分類は、中分類をKeyにした商品マスタからidを絞り込ませます。
名称は小分類マスタのテーブルオカレンス側から拾いましょう。
メインテーブルを関連レコード表示させると、小分類をKeyにした商品マスタのポータルにデータが表示されるという仕組みです。
いろいろ使えますので改造してみてください。
ダウンロード(FM13以上)
あれから時は過ぎ、なんと14なんかも出ちゃったりしました。ユーザーが増えました!ということでしょうね。ユーザーが増えるという事はいいことで、バージョンが上がったり、メーカー側の対応もよくなったりします。
随分と前に弁護士向けのソフトで大分類、中分類、小分類について書きましたが
そんなに分類分けが必要でなければ中分類、小分類だけでやってみようということです。
今回はバージョン13で作ってみました。
ダウンロードもできますので試してみてください。
動的値一覧と何が違うのかというと、ちゃんとid,と名称フィールドを作り、しっかりマスタ管理して動かそうということです。
よくあるのは、名称を値一覧にすることですが、当然索引設定されますので非常に検索呼出しが早くなるのですが、名称変更があり得るのなら、しっかりidなどの番号をKeyにして管理されたほうがいいと思います。
<2つの用途をみたします>
事前登録時の分類絞り込み(マスタ側)
事前登録されたデータを分類によって絞り込み、ガイドに表示(入力画面など)
というわけなので、事前登録時の考え方、
それを呼び出す絞り込みの考え方、そしてそのリレーションの組み方は当然違います。
事前登録の画面(商品マスタ)
先に中分類マスタ、小分類マスタを設定し商品マスタ設定時には、分類を絞り込り込める設定です。(中分類マスタで小分類を設定する)
一方で、入力画面で商品を分類の絞り込みによってガイド表示させる場合は、中分類をKeyにした商品マスタのテーブルオカレンスから値一覧設定で絞り込む様にします。
中分類側の値一覧設定、中分類マスタではなく、中分類をKeyにした商品マスタから閲覧するように設定します。
小分類は、中分類をKeyにした商品マスタからidを絞り込ませます。
名称は小分類マスタのテーブルオカレンス側から拾いましょう。
メインテーブルを関連レコード表示させると、小分類をKeyにした商品マスタのポータルにデータが表示されるという仕組みです。
いろいろ使えますので改造してみてください。
ダウンロード(FM13以上)
2015年1月30日金曜日
Admin Console その2
Internet Explorer 11 では、FileMaker Server 12 の Admin Console を起動できない
FileMaker Server 12 の Admin Console がサポートしているのは、次の Web ブラウザだけだという点にご注意ください。
Windows:
- Internet Explorer 8, Internet Explorer 9
- Firefox 4.x
- Safari 5.x
- Safari 5.x
- Firefox 4.x
つーか、Windows8.1は、Internet Explorer11以外は使えないので、FMS12は使用出来ないということですねー。Windows7に落とせって?
説明:
FileMaker, Inc. は、上記の FileMaker 製品に関して、この問題を認識しています。
FileMaker, Inc. は、上記の FileMaker 製品に関して、この問題を認識しています。
ですって。
セミナーとかワークグループとかやるんなら、余計な経費使わせずに、ちゃんとこういう仕事しとけよ、と思うねー。サーバーマシーン新しいものに交換した人どーすんだよ。
2015年1月27日火曜日
ひさびさにAdmin Consoleと戦うことになったの巻
サーバークラッシュ、リカバリそしてFMS12のインスコ
HDも古いし、ばいおす壊れちゃ、しゃーないよね。
なんだか、いろいろいじってたのがよくなかったらしい。
中身を、ちと交換して設定しなおしだよぅ
ひさびさにAdmin Consoleと戦うことになったの巻ー!
FMS12なので、まだJavaとも戦わなくてはいけないと覚悟していたのですが、月日が経てば、Internet Explorer のバージョンも変われば、Javaも変わる。
サーバー以外には、ブラウザは普通チョロメ使うでしょ?チョロメ。
チロメともいうか・・・
さらさらのPC(ボロですが)であっても、そりゃめんどくさいわけで・・・
とりあえず、FMSインスコ前にIIS7確認
火壁でポート空き確認、なきゃ、開けまくる
とりあえず、5003、50003、16000、16001、16004、16006、開けすぎでしょ。
何も知らず、FMSインスコ。Javaの責任にするような文言がズラズラ・・・
7がダメなのでアップしろとのこと。本当なのか・・・
こういうの見てるとダイアログの文章、もうちょっと親切にしなきゃいけないと自分も反省。
なんだ、java8かと思い、中身見たら、セキュリティレベル高過ぎ。
ありえないのでアンインスコ
ついでにフォルダごとゴミ箱に入れる
Java7再び入れ、Javaキャッシュ消し消し、Internet Explorerのキャッシュも消す(これ、履歴ね)
え!
まだ、Javaどうのこうの言ってるー。
ORACLEという文字が笑ってる気がした。
なんだよ、さらのPCなのに・・・
Internet Explorerのあくてぃぶえっくす見てみる・・・とくに問題なし
あ、あ、
Internet Explorer11になってるよ。
たぶん、これは使うことないでしょ。
コントロールパネルのソフト消すところの
「ウィンドウズ機能の有効化または無効化」で11のチェック外してOK押して
「インストールされた更新プログラムを表示」を押すと
まだ11がのこってるので、アンインスコ。
これで、ロールバックになるんよ。
(最初に若いバージョン入れてなくても)
再起動したら、9になってた!
おい、10じゃないのかよ!?
ふたたびAdmin Consoleを起動
また、セキュリティがどうのこうの言ってるので
Javaのセキュリティレベルを“中”に設定。
Java8にするとさ、“中”がないのよ。
強引のようだけど、そういう意味でしょ!?
ホレ、立ち上がった。
なんともめんどくさいわけで・・・。
リカバリ後のFMS入れる前に、ウィンドズアップデートしちゃったから
まさか、Internet Explorer11が原因とは思わなかったし・・・
13からは、良くなった?
ODBCも使えちゃったりするんだよね・・・・
HDも古いし、ばいおす壊れちゃ、しゃーないよね。
なんだか、いろいろいじってたのがよくなかったらしい。
中身を、ちと交換して設定しなおしだよぅ
ひさびさにAdmin Consoleと戦うことになったの巻ー!
FMS12なので、まだJavaとも戦わなくてはいけないと覚悟していたのですが、月日が経てば、Internet Explorer のバージョンも変われば、Javaも変わる。
サーバー以外には、ブラウザは普通チョロメ使うでしょ?チョロメ。
チロメともいうか・・・
さらさらのPC(ボロですが)であっても、そりゃめんどくさいわけで・・・
とりあえず、FMSインスコ前にIIS7確認
火壁でポート空き確認、なきゃ、開けまくる
とりあえず、5003、50003、16000、16001、16004、16006、開けすぎでしょ。
何も知らず、FMSインスコ。Javaの責任にするような文言がズラズラ・・・
7がダメなのでアップしろとのこと。本当なのか・・・
こういうの見てるとダイアログの文章、もうちょっと親切にしなきゃいけないと自分も反省。
なんだ、java8かと思い、中身見たら、セキュリティレベル高過ぎ。
ありえないのでアンインスコ
ついでにフォルダごとゴミ箱に入れる
Java7再び入れ、Javaキャッシュ消し消し、Internet Explorerのキャッシュも消す(これ、履歴ね)
え!
まだ、Javaどうのこうの言ってるー。
ORACLEという文字が笑ってる気がした。
なんだよ、さらのPCなのに・・・
Internet Explorerのあくてぃぶえっくす見てみる・・・とくに問題なし
あ、あ、
Internet Explorer11になってるよ。
たぶん、これは使うことないでしょ。
コントロールパネルのソフト消すところの
「ウィンドウズ機能の有効化または無効化」で11のチェック外してOK押して
「インストールされた更新プログラムを表示」を押すと
まだ11がのこってるので、アンインスコ。
これで、ロールバックになるんよ。
(最初に若いバージョン入れてなくても)
再起動したら、9になってた!
おい、10じゃないのかよ!?
ふたたびAdmin Consoleを起動
また、セキュリティがどうのこうの言ってるので
Javaのセキュリティレベルを“中”に設定。
Java8にするとさ、“中”がないのよ。
強引のようだけど、そういう意味でしょ!?
ホレ、立ち上がった。
なんともめんどくさいわけで・・・。
リカバリ後のFMS入れる前に、ウィンドズアップデートしちゃったから
まさか、Internet Explorer11が原因とは思わなかったし・・・
13からは、良くなった?
ODBCも使えちゃったりするんだよね・・・・
2015年1月25日日曜日
FileMaker トランザクション
FileMakerはiPadやiPhoneなどの端末を利用できるGoが出来てから、今まで敬遠されてきた方も、新たに採用されたり若干戻ってきたりしているらしいです。
そうすると、口々にトランザクション制御についての質問をされているのですが、たぶん、OracleやMySQLを使用されてきた方々は、当然の疑問かと思います。
正直な話、FileMakerの性質上、トランザクション制御を求めるのは僕個人的には違うのかなという気がしています。
FileMakerの開発が早い理由のひとつとして、データの確定さえしていれば、おおよそ既に内部で一貫性にて処理されており、SQLでいう、ロストアップデートやノンリピータブルリード、ファントムリードが発生しない作りになっていることです。(ダーティリードはロールバックしても間違ったままのデータ状態で、FMの場合は別途ロールバックを仕掛けないとそもそも起こらない)
ACID特性でたとえると、Consistencyに相当するのでは・・・と思います。
<トランザクション>
トランザクションとトランザクション制御とは意味が違います。
トランザクションとは、たとえば、入庫テーブルの入庫数が更新されれば、在庫テーブルの数量が変わる。売上明細に商品と数量を追加すれば、売上の合計が変わるなど、お互いの関係・依存する一体の処理をいいます。 担当マスタや商品マスタなどとは扱いが違うものです。
始めての方は、販売管理や入庫管理などの入力される明細などの箇所、と思っていただいて良いのかと思います。FileMakerはデータが確定されれば、一貫してテーブル間でデータが連動されて更新されます。
すなわち、SQLのような隔離性水準(更新処理)を指定する下記の
SET TRANSACTION
ISOLATION LEVEL
Read Uncommitted または
Read Committed または
Repeatable Read または
Serializable
の様な設定は、まったく必要ないということです。
<トランザクション制御>
トランザクション制御とは、トランザクションデータを確定(コミット)させたり、なにか問題が発生したときは取り消す(ロールバック)処理の事をいい、排他処理ともいいます。
FileMakerの場合、デフォルトではフィールドの外をクリックしただけでデータが確定(保管)されます。(いいか悪いかは別として・・・)ロールバックはスクリプトなどを仕掛けない限り、元には戻りません。この単純明快さを開発に利用しない手はないと思うのです。
ですが、その単純明快な機能をわざわざ殺し、データを一旦グローバル変数に格納させ、更新させるまではなにもさせず、読み込んだデータが、他のトランザクションによって更新されたかをチェックさせて、ロールバック、コミットさせるSQL手法(楽観法)を用いていたのでは、いったい何のためのFileMakerなのか、そもそも何がしたいのか論に戻ってしまいます。
FileMakerで開発する場合、ユーザーの日常業務、伝票発行等単位ではなく、せいぜい、まとめて行う請求処理中に横入りしてもらいたくない程度のロックくらいか、まとめてデータの置換えが発生するときの制御であれば、ポータルを使って関連レコードをまとめてロックすればいいだけで、毎日の伝票発行毎にロールバックさせるため、わざわざグローバル変数に格納させるスクリプトを作る意味があるのか非常に疑問です。そもそも伝票毎では同レコードを開く事が出来ない作りになっていますからロックを気にすることもありませんし、確定しているんだから、ロールバックじゃなくて書き直せばいい話です。明細10行確定させず、宙に浮かせ、10行ロールバックされるほうが迷惑な話という事にもなりかねません。
出来なくはないけれど、FileMakerの性能を下げさせ、めんどくさい非効率開発だと考えます。
これを奨めないFileMakerはRDBMSじゃないとまで云う方もいますが、僕は画期的なRDBMSだと思っています。というより、SQLとは性質が違うと考えるべきかと思います。
障害が発生したときに、更新ログを使って障害発生時までロールバックさせるのではなく、バックアップなどでのロールフォワードを推奨させる考え方、という根本的な考え方の違いもあります。
なんだ、大規模向きじゃないんだ、ではなく、そもそも性質が異なります。
SQLとFileMakerを上手に連携させる事によって明るい希望を持たれるデベロッパーもいます。
いずれにしても開発者事情ばかりではなく、使用者にとって楽で安心、使いやすいものであればいいのだと思います。
そうすると、口々にトランザクション制御についての質問をされているのですが、たぶん、OracleやMySQLを使用されてきた方々は、当然の疑問かと思います。
正直な話、FileMakerの性質上、トランザクション制御を求めるのは僕個人的には違うのかなという気がしています。
FileMakerの開発が早い理由のひとつとして、データの確定さえしていれば、おおよそ既に内部で一貫性にて処理されており、SQLでいう、ロストアップデートやノンリピータブルリード、ファントムリードが発生しない作りになっていることです。(ダーティリードはロールバックしても間違ったままのデータ状態で、FMの場合は別途ロールバックを仕掛けないとそもそも起こらない)
ACID特性でたとえると、Consistencyに相当するのでは・・・と思います。
<トランザクション>
トランザクションとトランザクション制御とは意味が違います。
トランザクションとは、たとえば、入庫テーブルの入庫数が更新されれば、在庫テーブルの数量が変わる。売上明細に商品と数量を追加すれば、売上の合計が変わるなど、お互いの関係・依存する一体の処理をいいます。 担当マスタや商品マスタなどとは扱いが違うものです。
始めての方は、販売管理や入庫管理などの入力される明細などの箇所、と思っていただいて良いのかと思います。FileMakerはデータが確定されれば、一貫してテーブル間でデータが連動されて更新されます。
すなわち、SQLのような隔離性水準(更新処理)を指定する下記の
SET TRANSACTION
ISOLATION LEVEL
Read Uncommitted または
Read Committed または
Repeatable Read または
Serializable
の様な設定は、まったく必要ないということです。
<トランザクション制御>
トランザクション制御とは、トランザクションデータを確定(コミット)させたり、なにか問題が発生したときは取り消す(ロールバック)処理の事をいい、排他処理ともいいます。
FileMakerの場合、デフォルトではフィールドの外をクリックしただけでデータが確定(保管)されます。(いいか悪いかは別として・・・)ロールバックはスクリプトなどを仕掛けない限り、元には戻りません。この単純明快さを開発に利用しない手はないと思うのです。
ですが、その単純明快な機能をわざわざ殺し、データを一旦グローバル変数に格納させ、更新させるまではなにもさせず、読み込んだデータが、他のトランザクションによって更新されたかをチェックさせて、ロールバック、コミットさせるSQL手法(楽観法)を用いていたのでは、いったい何のためのFileMakerなのか、そもそも何がしたいのか論に戻ってしまいます。
FileMakerで開発する場合、ユーザーの日常業務、伝票発行等単位ではなく、せいぜい、まとめて行う請求処理中に横入りしてもらいたくない程度のロックくらいか、まとめてデータの置換えが発生するときの制御であれば、ポータルを使って関連レコードをまとめてロックすればいいだけで、毎日の伝票発行毎にロールバックさせるため、わざわざグローバル変数に格納させるスクリプトを作る意味があるのか非常に疑問です。そもそも伝票毎では同レコードを開く事が出来ない作りになっていますからロックを気にすることもありませんし、確定しているんだから、ロールバックじゃなくて書き直せばいい話です。明細10行確定させず、宙に浮かせ、10行ロールバックされるほうが迷惑な話という事にもなりかねません。
出来なくはないけれど、FileMakerの性能を下げさせ、めんどくさい非効率開発だと考えます。
これを奨めないFileMakerはRDBMSじゃないとまで云う方もいますが、僕は画期的なRDBMSだと思っています。というより、SQLとは性質が違うと考えるべきかと思います。
障害が発生したときに、更新ログを使って障害発生時までロールバックさせるのではなく、バックアップなどでのロールフォワードを推奨させる考え方、という根本的な考え方の違いもあります。
なんだ、大規模向きじゃないんだ、ではなく、そもそも性質が異なります。
SQLとFileMakerを上手に連携させる事によって明るい希望を持たれるデベロッパーもいます。
いずれにしても開発者事情ばかりではなく、使用者にとって楽で安心、使いやすいものであればいいのだと思います。
登録:
投稿 (Atom)
Associatron (アソシアトロン)連想記憶
なぜか、僕のブログの研究所側ではなく、FileMaker側にヒットするので アソシアトロン Associatron研究 リンクを貼っておきます。 研究と実験詳細 https://cside-associatron.blogspot.com/ 公開実験(JavaScriptのみ...
-
少し忙しくてPOSレジ方が遅れてます 今回は会計の画面ですね~ 入力画面も少し変更しています。自由にカスタマイズしてくださいね。 今回作ってて思ったのですが、 ●軽減税率と標準税率を分ける ●端数処理(ポータル明細内の各行と、受注側(3カ所の消費税計算) ...
-
前回の API_OpenWeatherMapをFileMakerに取り込む際、 1、改行テキストに変換 2、配列をグローバル変数に格納 3、GetValue関数を使ってLOOP処理でFMのデータ化させる という流れでした。 OpenWeatherMapは項目とデ...
-
その前に。。 シリアルNOの初期値化と欠番 のダウンロードを再開しました。 が、注意が必要です。 SerialIncrement ( "001" ; Max ( シリアル初期化_自己リレ::シリアル )) のように自己リレをして計算...