version 11 (Modified)
SET TABLE TITLES (tableTitles; tableNumbers{; *})
| 引数 | 型 | 説明 | |
| tableTitles | 文字列配列 | ダイアログボックスに表示されるテーブル名 | |
| tableNumbers | 数値配列 | 実際のテーブル番号 | |
| * | フォーミュラエディタでカスタム名を使用 |
説明
SET TABLE TITLES コマンドを使用すれば、アプリケーションモードにおいて、クエリのような標準の4 Dダイアログボックスを表示する際に、データベースのテーブルのマスク、名前の変更、並べ替えが行えます (特に4Dのランゲージコマンド経由でエディタが呼び出された際) 。
このコマンドを使用すると、動作中にフォーム上のテーブル名のラベルを変更することが可能です。これには、ダイナミックな名前を使用します。ダイナミックなテーブル名とフィールド名の挿入についての詳細は、4D Design Reference マニュアルを参照してください。
引数 tableTitles と tableNumbers 配列は同期させる必要があります。配列 tableTitles には、表示させたいテーブルの名前を渡します。
ある特定のテーブルを表示したくない場合には、そのテーブル名または新しく付けたタイトルを、配列含めないようにします。テーブルはこの配列に指定した順序で表示されます。
配列 tableNumbers の各要素には、配列 tableTitles にある同じ要素の数値に渡したテーブル名または新しいタイトルに対応する実際のテーブル番号を渡します。
例えば、テーブルA、B、Cで構成されるデータベースがあり、テーブルはこの順序で作成されたとします。表示の際には、これらのテーブルをX、Y、Zという名前にし、さらにテーブルBは表示したくないとします。最終的に、ZとXを、この順序で表示することにします。この場合、配列 tableTitles の2つの要素としてZとXを渡し、配列 tableNumbers の2つの要素として3と1を渡します。
オプションの * 引数は、カスタマイズした名前を4Dフォーミュラで使用するかを指定します。
・省略した場合は、カスタマイズした名前は使用されず、デフォルトで実際のテーブル名が使用されます。
・ * 引数を渡した場合は、このコマンドで指定した名前を4Dフォーミュラで使用できます。ただし、4D ランゲージインタプリタが禁止している文字(例えば、-?*!)をカスタム名に含めることはできません (詳細については識別子の節を参照してください) 。
Note: あなたのアプリケーションでフォーミュラエディタへのアクセスを適用している場合 (例えばクイックレポートエディタなどで)、インタフェースの統一性のためには* 引数を渡す必要があります。
SET TABLE TITLES コマンドは、データベースの実際のストラクチャを変更するわけではありません。ランゲージコマンド経由で標準の4Dダイアログボックスやダイナミックな名前を使用しているフォームを呼び出したときのみ影響します (デザインモードにおいて、エディタまたはフォームがメニューコマンドから呼び出された際、データベースの実際のストラクチャが表示されます) 。 SET TABLE TITLES コマンドの有効範囲は、そのワークセッションです。クライアント/サーバにおける利点の1つは、複数の4Dクライアントステーションがそれぞれ異なる見方でデータベースを同時に "見る" ことができる点です。SET TABLE TITLES コマンドは、何度でも呼び出せます。
SET TABLE TITLES コマンドは、以下のような場合に使用します。
・ データベースを動的にローカライズする。
・ テーブル表示を、実際のデータベース定義に関係なく、独自のものとする。
・ テーブル表示を、ユーザー固有のものや権限によるものとする。
Notes:
・SET TABLE TITLESコマンドはフィールドの非表示属性を上書きしません。データベースの設計レベルでテーブルが非表示として設定されている場合、SET TABLE TITLES コマンドへの呼び出しにそのテーブルを指定しても、アプリケーションモードにおいてテーブルは表示されません。
・プラグインは常にコマンドによって指定された仮想ストラクチャへアクセスします。
例題
・各国で販売する予定の4Dアプリケーションを構築しているとします。この場合、ローカライズの問題を慎重に考慮する必要があります。アプリケーションモードで表示される標準の4Dダイアログボックスとダイナミックな名前を用いたフォームに注意すれば、[Translations] テーブルといくつかのプロジェクトメソッドを使用して、必要なだけ各国向けにローカライズされたフィールドを作成し、使用することによって、ローカライズのニーズに対応できます。
・データベースに以下のテーブルを追加します。
・次に、以下に示した TRANSLATE TABLES AND FIELDS プロジェクトメソッドを作成します。このメソッドはデータベースの実際のストラクチャをブラウズし、引数として渡される言語に対応するローカライズ版の作成に必要なすべての [Translations] レコードを作成します。
` TRANSLATE TABLES AND FIELDS プロジェクトメソッド ` TRANSLATE TABLES AND FIELDS (Text) ` TRANSLATE TABLES AND FIELDS (LanguageCode) C_TEXT($1) `ランゲージコード C_LONGINT($vlTable;$vlField) C_TEXT($Language) $Language:=$1 For($vlTable;1;Get last table number) `各テーブルを渡す If($vlTable#(Table(->[Translations]))) `翻訳テーブルを翻訳しない `特定ランゲージ用のテーブル名の翻訳があるかどうかをチェックする QUERY([Translations];[Translations]LanguageCode=$Language;*) `目的のランゲージ QUERY([Translations]; & ;[Translations]TableID=$vlTable;*) `テーブル番号 QUERY([Translations]; & ;[Translations]FieldID=0) `フィールド番号 = 0はテーブル名 If(Is table number valid($vlTable)) `テーブルがまだ存在しいるかチェックする If(Records in selection([Translations])=0) `なければ、レコードを作成 CREATE RECORD([Translations]) [Traductions]LanguageCode:=$Language [Traductions]TableID:=$vlTable [Traductions]FieldID:=0 `翻訳されたテーブル名を入力する必要がある [Translations]Translation:=Table name($vlTable)+" in "+$Language SAVE RECORD([Translations]) End if For($vlField;1;Get last field number($vlTable)) `特定ランゲージ用のフィールド名の翻訳があるかどうかをチェックする QUERY([Translations];[Translations]LanguageCode=$Language;*) `目的のランゲージ QUERY([Translations]; & ;[Translations]TableID=$vlTable;*) `テーブル番号 QUERY([Translations]; & ;[Translations]FieldID=$vlField) `フィールド番号 If(Is field number valid($vlTable;$vlField)) If(Records in selection([Translations])=0) `なければ、レコードを作成 CREATE RECORD([Translations]) [Traductions]LanguageCode:=$Language [Traductions]TableID:=$vlTable [Traductions]FieldID:=$vlField `翻訳されたフィールド名を入力する必要がある [Traductions]Translation:=Field name($vlTable;$vlField)+" in "+$Language SAVE RECORD([Translations]) End if Else If(Records in selection([Translations])#0) `フィールドがもはや存在しない場合、翻訳を削除する DELETE RECORD([Translations]) End if End if End for Else If(Records in selection([Translations])#0) `テーブルがもはや存在しない場合、翻訳を削除する DELETE RECORD([Translations]) End if End if End if End for
・この時点で以下の行を実行すれば、テーブルタイトルとフィールドタイトルのスペイン語のローカライズ版に必要なすべてのレコードが作成されます。
TRANSLATE TABLES AND FIELDS ("Spanish")
・この呼び出しの実行後、新しく作成されたレコードのそれぞれに対して [Translations]Translated Name を入力できます。
・最後に、スペイン語のローカライズ版を使用して、データベースの標準な4Dダイアログボックスまたはダイナミックなタイトル付きのフォーム表示します。その際、LOCALIZED TABLES AND FIELDS プロジェクトメソッドを使用して、以下の行を実行します。
LOCALIZED TABLES AND FIELDS ("Spanish")
` LOCALIZED TABLES AND FIELDS global method ` LOCALIZED TABLES AND FIELDS (Text) ` LOCALIZED TABLES AND FIELDS (LanguageCode) C_TEXT($1) `ランゲージコード C_LONGINT($vlTable;$vlField) C_TEXT($Language) C_LONGINT($vlTableNum;$vlFieldNum) $Language:=$1 `テーブル名を更新する ARRAY TEXT($asNames;0) `SET TABLE TITLES と SET FIELD TITLESを初期化する ARRAY INTEGER($aiNumbers;0) QUERY([Translations];[Translations]LanguageCode=$Language;*) QUERY([Translations]; & ;[Translations]FieldID=0) `テーブル名 SELECTION TO ARRAY([Translations]Translation;$asNames;[Translations]TableID;$aiNumbers) SET TABLE TITLES($asNames;$aiNumbers) `フィールド名を更新する $vlTableNum:=Get last table number `データベース上のテーブルの数を数える For($vlTable;1;$vlTableNum) `テーブルを渡す If(Is table number valid($vlTable)) QUERY([Translations];[Translations]LanguageCode=$Language;*) QUERY([Translations]; & ;[Translations]TableID=$vlTable;*) QUERY([Translations]; & ;[Translations]FieldID#0) `テーブル名とし機能するゼロを避ける SELECTION TO ARRAY([Translations]Translation;$asNames;[Translations]FieldID;$aiNumbers) SET FIELD TITLES(Table($vlTable)->;$asNames;$aiNumbers) End if End for
・コードを修正または再編集せずに、新しいローカライズ版をデータベースに追加することができます。
参照
Get last table number, SET FIELD TITLES, Table name.