by Add Komoncharoensiri, Director of Technical Services at 4D Inc.
4D開発者として、あなたは4Dが継続的に出荷する新しい進歩についていけなければなりません。製品チームが提供するTipsやトリックの他に、Tech Tipsは4Dのコンセプトのいくつかを学ぶためのもう一つのリファレンスです。
この記事では、4つのTipsを紹介します。
- SQLのワイルドカード文字をリテラル文字列として扱う方法
- プログラムによるプロジェクト名の取得
- 同じコールチェーンにあるプリエンプティブなメソッドはプリエンプティブであるべきである
- シートを基にした新しいView Proドキュメントの作成
SQL ワイルドカード文字をリテラル文字列として扱うには?
ワイルドカード文字(”@”)が1つしかない4Dとは異なり、SQLには複数のワイルドカード文字(例:”%”、”?”、”_”、”#”、など)があります。SQLでは、文字列中の1つまたは複数の文字を置換するためにワイルドカード文字を使用します。SQLのワイルドカード文字の一覧は、こちらをご覧ください。SQL ワイルドカードは、主に LIKE 演算子や WHERE 句とともに使用され、列の中から指定されたパターンを検索するために使用されます。
4D SQLのWHERE/LIKE演算子を使用してSQLワイルドカード文字を含む文字列を検索する場合、ワイルドカード文字をリテラル文字として扱うためにエスケープする必要があります。エスケープ文字を示すために、LIKE演算子ではESCAPE句がサポートされています。
例えば、問い合わせるデータに “Customer_1”, “Customer_11”, “Employee_1”, “Employee_11″ が含まれているとします。目的は、”_1” で終わるすべての文字列を検索することです。
アンダースコア(“_”)はSQLのワイルドカード文字の一つなので、リテラル文字として扱われるようにエスケープする必要があります。これは、このように書くことができます。
ARRAY TEXT($results; 0)
Begin SQL
SELECT ID from Table_1
WHERE Field_2 LIKE '%\_1' ESCAPE '\'
INTO : $results
End SQL
アンダースコア(“_”)の前にバックスラッシュ文字(” \”)を置き、そのバックスラッシュをエスケープ文字として定義します。エスケープ文字は、SQLに次の文字をリテラル文字として扱わせます。
プログラムによるプロジェクト名の取得
プロジェクトモードで作業しているとき、プロジェクトのアプリケーションの名前が必要になることがあります。プロジェクト名をプログラムで取得するには、Folderコマンドをfkデータベースフォルダ定数とともに使用します。返されたフォルダオブジェクトのプロパティ “name “は、プロジェクトの名前です。たとえば、「example project」という名前のプロジェクトが作成されたとすると、次の行のようになります。
$projectName:=Folder(fk database folder).name
$projectName は、プロジェクト・アプリケーションの「example project」を返します。
同じコールチェーンにあるプリエンプティブメソッドもプリエンプティブであること
プリエンプティブメソッドを扱う場合は、その同じコールチェーン内のすべてのメソッドもプリエンプティブ/スレッドセーフである必要があります。これには、典型的なプロジェクトメソッドや、コレクション.ソート()のようなクラスメソッド内のメソッドが含まれ、第1引数はメソッド名となります。
さらに、スレッドセーフなメソッドには、次のような条件が含まれます。
- プリエンプティブプロセスで実行可能」または「無関心」プロパティが有効でなければならない。
- スレッドセーフでないプラグインを含めてはならない
- プロセス間変数を使用してはならない
- インターフェース関連のコマンド(例:DIALOG)を呼び出してはならない
シートを基にした新しいVPドキュメントの作成
他の 4D View Pro ドキュメントの特定のシートを元に、新しい 4D View Pro ドキュメントを作成することが可能です。
以下は、View Pro の領域名を第一引数として、希望するシートインデックス番号を受け取り、そのシートをオブジェクトとして含む新規ドキュメントのみを作成するユーティリティメソッドです。
// VP_Extract_Sheet
#DECLARE($vpAreaName_t : Text; \
$sheetIdx_l : Integer)\
->$newVP_ob : Object
var $srcVP_ob : Object
$srcVP_ob:=VP Export to object($vpAreaName_t)
$newVP_ob:=OB Copy($srcVP_ob)
$newVP_ob.spreadJS.sheets:=New object( \
VP Get sheet name($vpAreaName_t; $sheetIdx_l); \
$newVP_ob.spreadJS.sheets[VP Get sheet name($vpAreaName_t; $sheetIdx_l)])
$newVP_ob.spreadJS.activeSheetIndex:=0
$newVP_ob.spreadJS.sheetCount:=1
これにより、VP文書から特定のシートや、VP領域に取り込まれた任意の文書を、独自のVP文書として抽出することができるようになります。
まとめ
以上、4月の4つのTipsとTricksをご紹介しました。何か新しいことを学んで、日々のコーディングに活かしていただければ幸いです。
4Dナレッジベースは、4D技術に関する情報のライブラリーで、毎週技術的なヒントと毎月のテクノートが常に発行されています。4Dナレッジベースは、顧客が問題を解決するための答えを見つける手助けを何年も前からしており、今後もそうし続けるでしょう。