メインコンテンツまでスキップ
バージョン: 20 R9 BETA

フォーミュラの管理

概要

4D Write Pro ドキュメントには、変数、フィールド、式、プロジェクトメソッドあるいは4D コマンドなどの4D フォーミュラへの参照を含めることができます。 ページ番号などの特定の情報もフォーミュラを通して参照することができます(以下のドキュメントとページ式を挿入 を参照してください)。

4D Write Pro エリアへのフォーミュラの挿入には WP INSERT FORMULA コマンドを使用し、フォーミュラの読み出しにはWP Get formulas コマンドを使用します。 また、WP Get text コマンドを使用することでも返されます。

フォーミュラは以下のタイミングで評価されます:

  • 計算された値を表示するフォームオブジェクト内に挿入されたとき
  • 計算された値を表示するフォームオブジェクト内に4D Write Pro オブジェクトが読み込まれたとき
  • WP COMPUTE FORMULAS コマンドが呼び出された時
  • WP FREEZE FORMULAS コマンドを使用して値が"固定化"(計算)されたとき(ただしまだ計算されていない場合)
  • 印刷の前(ただしまだ計算されていない場合)
  • .docx 形式に書き出される前(ただしフォーミュラがMS Word フォーミュラにマップすることができない場合)
  • (値の)固定化、印刷、フォーミュラの計算の標準アクションが呼び出された時。 詳細は標準アクション を参照してください。

フォーミュラはドキュメントが(WP NewWP Insert document body を使用して、あるいはwpArea:=[table]field などで)読み込まれたときでも、以下の場合には評価されません:

  • ドキュメントが画面外のみにある場合
  • ドキュメントが画面上に表示されているが、フォームオブジェクトが参照しか表示しない場合

フォーミュラはWP FREEZE FORMULAS コマンドを呼び出すと、静的な値になります(ただしページ番号とページ数は除く、以下参照)。

互換性に関する注意: ST INSERT EXPRESSIONST Get expressionST COMPUTE EXPRESSIONS、および ST FREEZE EXPRESSIONS コマンドを使用して式を管理するのは、廃止予定となっていますが、互換性のために4D Write Pro では引き続きサポートされています。

例題

4D Write Pro エリアの選択範囲を、変数の中身で置き換えたい場合を考えます:

 var fullName: Text
var $sel: Object
fullName:="John Smith"
$sel:=WP Selection range(4DWPArea)
Case of
:(Form event code=On Clicked)
WP INSERT FORMULA($sel;Formula(fullName);wk replace)
End case

フォーミュラコンテキストオブジェクト

WP Insert formula コマンドを使用することで、あらゆるドキュメントエリア(本文、ヘッダー、フッター) にドキュメント属性に関連した特殊な式を挿入することができます。 フォーミュラ内ではフォーミュラコンテキストオブジェクトが自動的に公開されます。 This を通してこのオブジェクトのプロパティを使用することができます:

プロパティ説明
This.titleTextwk title 属性で定義されているタイトル
This.authorTextwk author 属性で定義されている作者
This.subjectTextwk subject 属性で定義されている主題
This.companyTextwk company 属性で定義されている会社
This.notesTextwk notes 属性で定義されている注記
This.dateCreationDatewk date creation 属性で定義されている作成日
This.dateModifiedDatewk date modified 属性で定義されている変更日
This.pageNumber (*)NumberPage number as it is defined:
  • - From the document start (default) or
  • - From the section page start if it is defined by section page start.
  • This formula is always dynamic; it is not affected by the WP FREEZE FORMULAS command.
    This.pageCount (*)NumberPage count: total count of pages.
    This formula is always dynamic; it is not affected by the WP FREEZE FORMULAS command.
    This.documentObject4D Write Pro ドキュメント
    This.dataObjectWP SET DATA CONTEXT コマンドで設定された4D Write Pro ドキュメントのデータコンテキスト
    This.sectionIndexNumber4D Write Pro ドキュメント内のセクションのインデックス(1から開始)
    This.pageIndexNumber4D Write Pro ドキュメント内の実際のページ番号(1から開始、セクションのページ番号とは無関係)
    This.sectionName文字列ユーザーが与えたセクションの名前

    表組を使用する場合には追加のコンテキストプロパティ が利用できます。 より詳細な情報については表組を管理する を参照して下さい。

    (*) 重要: This.pageNumberThis.pageIndex および This.pageCount は4D Write Pro フォーミュラの中で直接的にのみ使用することができます( formula.source 文字列の中に記入されている必要があります)。 これらはフォーミュラから呼び出されたメソッド内の4D ランゲージで使用された場合には不正確な値を返します。 ただし、フォーミュラから直接呼び出されるメソッドにこれらを引数として渡すことはできます:

    • この使い方は動作します: « formatNumber(This.pageNumber) »
    • この使い方は動作しません: « formatNumber » (formatNumber メソッド内部でThis.pageNumber を処理する)

    例えば、フッターエリアにページ番号を挿入するには:

     $footer:=WP Get footer(4DWP;1)
    WP INSERT FORMULA($footer;Formula(This.pageNumber);wk append)
    // ただしFormula(myMethod) と書いてmyMethod にThis.pageNumber を処理させようとした場合
    // これは正常には動作しません

    日付と時間フォーミュラを挿入

    日付

    Current date コマンド、日付型変数、あるいは日付を返すメソッドがフォーミュラに挿入された場合、この日付はsystem date short フォーマットを使用してテキストをへと自動的に変換されます。

    時間

    Current time コマンド、時間型変数、あるいは時間を返すメソッドがフォーミュラに挿入される場合、この時間は String コマンドでくくってあげる必要があります。JSON では時間型はサポートされていないからです。 以下のフォーミュラの例を参考にして下さい:

      // このコードがベストプラクティといえます
    $formula1:=Formula(String(Current time)) //OK

    // このコードは動作しますが一般的には推奨されません("Edit formula"の直後を除く)
    $formula2:=Formula from string("String(Current time)") //OK

    // 以下のコードは時間値が秒数(またはミリ秒数)の倍長整数として表示されるため間違ったコードです
    $formula3:=Formula from string("Current time") //NG
    $formula4:=Formula(Current time) //NG

    バーチャルストラクチャーのサポート

    4D Write Pro ドキュメントに挿入されたテーブルおよびフィールドの式はデータベースのバーチャルストラクチャー定義をサポートします。 フォーミュラに公開されるバーチャルストラクチャーはSET FIELD TITLES(...;*) および SET TABLE TITLES(...;*) コマンドを通して定義されます。

    バーチャルストラクチャーが定義されている場合:

    • 4D Write Pro ドキュメントが値ではなく参照を表示する場合、フィールドを格納する式への参照はバーチャルな名前を表示します。
    • WP Get text は、expressions 引数にwk expressions as source オプションが設定されている場合、バーチャルストラクチャー名を返します。
    • WP Insert formula コマンドはバーチャルストラクチャーを無視し、常に実際のテーブル/フィールド名を受け付けます。

    ドキュメントが"式を表示"モードで表示されているとき、バーチャルストラクチャーに属していないテーブルまたはフィールドへの参照は"?"文字付きで表示されます。例えばあるフィールドがバーチャルストラクチャー内で定義されていなければ、[VirtualTableName]? と表示されます。

    フォーミュラの表示

    ドキュメント内でフォーミュラがどのように表示されるかは以下のようにコントロールすることができます:

    • または参照 として表示
    • 参照として表示されている場合、ソーステキスト、記号、または名前を表示

    参照か値か

    デフォルトでは、4D フォーミュラは値として表示されます。 4D フォーミュラを挿入すると、4D Write Pro はカレントの値を計算して表示します。 どのフォーミュラが表示されているのか知りたい場合には、これを参照として表示する必要があります。

    フォーミュラを参照として表示するためには、以下の方法があります:

    • プロパティリスト内の参照として表示 オプションをチェックする(ビュープロパティの設定 参照)
    • visibleReferences 標準アクションを使用する(動的な式 参照)
    • WP SET VIEW PROPERTIES コマンドを、wk visible references セレクターをTrue にして使用する

    フォーミュラ参照は、以下の表示方法があります:

    • ソーステキスト(デフォルト)
    • symbols
    • names

    参照をソーステキストとして表示(デフォルト)

    フォーミュラが参照 として表示されている場合、ドキュメント内にはフォーミュラのソーステキストが表示され、デフォルトでは灰色の背景色がつけられます(これはwk formula highlight セレクターを使用することでカスタマイズ可能です)

    たとえば、フォーマットを指定したカレント日付を挿入していると、デフォルトでは次の表示になります:

    フォーミュラを参照として表示した場合、そのフォーミュラのソース が表示されます:

    参照を記号として表示

    フォーミュラのソーステキストがドキュメント内に表示されている場合、例えば表組を使用したような込み入ったテンプレートで作業していてかつフォーミュラが複雑だった場合、デザインが分かりづらくなってしまううことがあります:

    この場合、フォーミュラ参照を 記号として表示することで、ドキュメントを読みやすくすることができます:

    フォーミュラ参照を記号として表示するためには、以下の方法があります:

    • プロパティリスト内のフォーミュラのソースを記号として表示 オブションをチェックする(ビュープロパティの設定 参照)
    • displayFormulaAsSymbol 標準アクションを使用する(4D Write Pro標準アクションの使用 参照)
    • WP SET VIEW PROPERTIES コマンドを、wk display formula as symbol セレクターをTrue にして使用する

    参照を名前で表示

    フォーミュラには名前を割り当てることができ、これによって4D Write Proテンプレートドキュメントをエンドユーザーがより読みやすく理解しやすいようにすることができます。 フォーミュラが参照として表示されている場合(そして記号として表示されていない場合)で、フォーミュラに対して名前を定義している場合、フォーミュラ名が表示されます。

    例えば、以下のフォーミュラ参照はデフォルトではソーステキストとして表示されます:

    フォーミュラ名を割り当てた場合、テキストではなく名前が表示されます:

    フォーミュラに名前を割り当てるためには、 WP Insert formula コマンドにオブジェクト型の引数を渡す必要があります。 例:

      // ドキュメント内に昨日の日付を挿入する
    $o:=New object("formula";Formula(Current date-1);"name";"Yesterday")
    $range:=WP Text range(WPArea;wk start text;wk end text)
    WP INSERT FORMULA($range;$o;wk append)

    名前をつけられるのはインラインフォーミュラのみです(アンカーされた画像、ブレーク行などに対するフォーミュラ、表データソースフォーミュラには名前をつけることはできません)。

    フォーミュラのtips

    フォーミュラの表示モードに関わらず、フォーミュラ上をマウスでホバーした時に表示されるtips でフォーミュラに関する追加の情報を得ることができます。

    • フォーミュラに名前がない場合、tips はフォーミュラのソーステキストを表示します:

    • フォーミュラに名前はついているものの値または記号として表示されている場合、tips はフォーミュラ名を表示します:

    このコンテキストでは、フォーミュラ上をホバーしているときにCtrl (Windows) または Cmd (macOS) キーを押すことでフォーミュラのソーステキストを表示できます。

    • フォーミュラに名前がついていて、名前として表示されている場合、デフォルトではtips は表示されません。 フォーミュラ上をホバーしているときにCtrl (Windows) または Cmd (macOS) キーを押すことでフォーミュラのソーステキストを表示できます:

    参照

    HDI データベースをダウンロード
    スタイル付きテキストテーマのコマンドを使用