4D v16.3

SET TABLE TITLES

ホーム

 
4D v16.3
SET TABLE TITLES

SET TABLE TITLES 


 

SET TABLE TITLES ( tableTitles ; tableNumbers {; *} ) 
引数   説明
tableTitles  文字配列 in ダイアログボックスに表示されるテーブル名
tableNumbers  倍長整数配列 in 実際のテーブル番号
in フォーミュラエディタでカスタム名を使用

説明   

SET TABLE TITLESコマンドを使用すれば、アプリケーションモードにおいて、標準の4Dダイアログボックスに現れるデータベーステーブルを一部隠したり、表示名称を変更したり、並び順を変えたりできます (ただしこれらのダイアログが4Dランゲージコマンドから呼び出された場合)。例えばこのコマンドを使用すれば、アプリケーションモードでのクエリエディターのテーブル表示を変更できます。

さらにこのコマンドを使用すると、動作中にフォーム上のテーブル名のラベルを変更することが可能です。これには、ダイナミックな名前を使用します。ダイナミックなテーブル名とフィールド名の挿入についての詳細は、4Dデザインリファレンスマニュアルのスタティックテキスト中で参照を使用するを参照してください。

引数 tableTitlestableNumbers 配列は同期させる必要があります。配列 tableTitles には、表示させたいテーブルの名前を渡します。

ある特定のテーブルを表示したくない場合には、そのテーブル名または新しく付けたタイトルを、配列含めないようにします。テーブルはこの配列に指定した順序で表示されます。

配列 tableNumbers の各要素には、配列 tableTitles にある同じ要素の数値に渡したテーブル名または新しいタイトルに対応する実際のテーブル番号を渡します。

例えば、テーブルA、B、Cで構成されるデータベースがあり、テーブルはこの順序で作成されたとします。表示の際には、これらのテーブルをX、Y、Zという名前にし、さらにテーブルBは表示したくないとします。最終的に、ZとXを、この順序で表示することにします。この場合、配列 tableTitles の2つの要素としてZとXを渡し、配列 tableNumbers の2つの要素として3と1を渡します。

オプションの * 引数は、カスタマイズした名前を4Dフォーミュラで使用するかを指定します。

  • 省略した場合カスタマイズした名前は使用されず、デフォルトで実際のテーブル名が使用されます。ランゲージインタープリターはカスタム名を処理しないため、カスタム名を利用することは、テーブルの命名に多大な自由度を与えます。
  • * 引数を渡した場合は、このコマンドで指定した名前を4Dフォーミュラで使用されます。ただし、4D ランゲージインタプリタが禁止している文字(例えば、-?*!)をカスタム名に含めることはできません。例えばフォーミュラで"Rate_in_%"のような名前を使用することはできません (詳細は識別子を参照)。

Note: フォーミュラエディタレベルでは、* 引数を省略してコマンドを呼び出しても、以前に * 引数付きでコマンドを呼び出したときの設定を変更しません。言い換えれば、フォーミュラエディタは常に、最後に * 引数付きで呼び出された設定が有効となります。

SET TABLE TITLES コマンドは、データベースの実際のストラクチャを変更するわけではありません。ランゲージコマンド経由で標準の4Dダイアログボックスやダイナミックな名前を使用しているフォームを呼び出したときのみ影響します (デザインモードにおいて、エディタまたはフォームがメニューコマンドから呼び出された際、データベースの実際のストラクチャが表示されます) 。 SET TABLE TITLESコマンドの有効範囲は、そのワークセッションです。クライアント/サーバにおける利点の1つは、複数の4Dクライアントステーションがそれぞれ異なる見方でデータベースを同時に "見る" ことができる点です。SET TABLE TITLES コマンドは、何度でも呼び出せます。

SET TABLE TITLESコマンドは、以下のような場合に使用します。

  • データベースを動的にローカライズする。
  • テーブル表示を、実際のデータベース定義に関係なく、独自のものとする。
  • テーブル表示を、ユーザー固有のものや権限によるものとする。

注:

  • 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#((->[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])
             [Translations]LanguageCode:=$Language
             [Translations]TableID:=$vlTable
             [Translations]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])
                   [Translations]LanguageCode:=$Language
                   [Translations]TableID:=$vlTable
                   [Translations]FieldID:=$vlField
  `翻訳されたフィールド名を入力する必要がある
                   [Translations]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
GET TABLE TITLES
SET FIELD TITLES
Table name

 
プロパティ 

プロダクト: 4D
テーマ: ユーザーインターフェース
番号: 601

 
履歴 

変更: 4D v11 SQL

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v16)
ランゲージリファレンス ( 4D v16.1)
ランゲージリファレンス ( 4D v16.2)
ランゲージリファレンス ( 4D v16.3)