サブフォーム中にサブレコードを追加した時にシーケンス番号を得る方法
日付 | 2001/08/10 |
---|---|
ID | 01-682 |
バージョン | 6.5.x and 6.7.x |
プラットフォーム | Windows and Mac |
新しいレコードを作るときにフィールドのデフォルト値として「#N」と記述しておくことで、シーケンス番号を割り当てることができます。しかしサブフォーム中にサブレコードを新しく追加するときには、4Dが空白のレコードを新規に作成して保存されたものが表示されます。つまり、一旦保存された空白のレコードが新規レコードとして表現され、そのレコードに対して操作することになります。そのためすでにフィールドにはゼロが代入された状態になっているので、#Nのデフォルト値は働かず、結局0が表示されることになります。
この問題を解決するためには、サブフォーム上のフィールドオブジェクトに下記のメソッドを記述してください。
` Object Method: sequential field Self->:=Sequence Number([RelatedTable])
注意
同じリストフォームをサブフォームだけでなく通常のリストフォームとしても利用するのであれば、全てのレコードが同じシーケンス番号に表示されないようにするために、さらに次のような記述を行う必要があります。
- On Startupでブール値のフラグを初期化する
` On Startup Method C_BOOLEAN(vIsNew) vIsNew:=False
- サブフォーム上のフィールドオブジェクトにてフラグを判定するように変更
` Object Method: sequential field If (vIsNew) Self->:=Sequence Number([RelatedTable]) vIsNew:=False End if
- サブレコード追加ボタンのオブジェクトメソッドに次の記述をする
` Object Method: Add Subrecord button vIsNew:=True