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

4D コードについて

アプリケーションで使用される 4D コードは、 メソッド および クラス に記述されます。

4D IDE には、コードを作成・編集・エクスポート・削除するためのさまざまな機能があります。 通常は、4D の コードエディター を使用して、コードを管理します。

メソッドの作成

4D のメソッドは、/Project/Sources/ フォルダーの適切なフォルダー内の .4dm ファイルに格納されます。

いくつかの種類のメソッド を作成することができます:

  • すべてのメソッドは、エクスプローラー ウィンドウから作成または開くことができます (フォームエディター から管理されるオブジェクトメソッドを除く)。
  • プロジェクトメソッドは、ファイル メニューやツールバー (新規/メソッド... または 開く/メソッド...)、コードエディターウィンドウ のショートカットを使っても作成したり開いたりできます。
  • トリガーは、ストラクチャーエディターからも作成したり開いたりできます。
  • フォームメソッドは、フォームエディター からも作成したり開いたりできます。

クラスの作成

4D においてユーザークラスとは、/Project/Sources/Classes/ フォルダーに保存された専用のメソッドファイル (.4dm) によって定義されます。 ファイル名がクラス名になります。

クラスファイルは、ファイル メニューやツールバー (新規/クラス...)、あるいは エクスプローラー ウィンドウの メソッド ページにて作成可能です。

詳細については、クラス を参照してください。

メソッドやクラスの削除

既存のメソッドやクラスを削除するには:

  • ディスク上で "Sources" フォルダーより .4dm ファイルを削除します。
  • 4D エクスプローラーでは、メソッドやクラスを選択した状態で をクリックするか、コンテキストメニューより 移動 > ゴミ箱 を選択します。

オブジェクトメソッドを削除するには、フォームエディター で、オブジェクト メニューから オブジェクトメソッド消去 を選択します。

メソッドの書き出しと読み込み

メソッドやクラスのコードは、ファイルの形で書き出しおよび読み込みが可能です。 これをおこなうためのコマンドはコードエディターの メソッド メニューにあります。

  • メソッド書き出し... コマンドを選択すると、標準のファイル保存ダイアログが表示され、書き出しファイルの名前と場所、およびフォーマットを選択することができます (後述参照)。 印刷と同様に、コードブロックが折りたたまれているかどうかに関わらず、コード全体が書き出されます。
  • メソッド読み込み... コマンドを選択すると、標準のファイルを開くダイアログが表示され、読み込むファイルを選択することができます。 読み込みをおこなうと、メソッド中で現在選択されているテキストが置き換えられます。 読み込んだメソッドで既存メソッドの全体を書き換えるには、読み込み前に既存メソッド内を全選択します。

読み込み/書き出し機能はマルチプラットフォーム対応です。macOS で書き出したメソッドを Windows で読み込むことができ、その逆も可能です。4D は必要に応じて文字の変換をおこないます。

メソッドの読み込みと書き出しには 2つのフォーマットを使用できます:

  • 4Dメソッド (.c4d 拡張子): このフォーマットでは、メソッドはエンコードされた形で書き出されます。 メソッド中のオブジェクト (コマンドなどの要素) の名称はトークナイズされます。 このフォーマットは、異なる言語 (非英語のコマンド名) を使用する 4Dアプリケーションやプラグイン間でメソッドをやり取りする場合に特に便利です。 その代わり、テキストエディターでメソッドを表示することはできません。
  • テキスト (.txt 拡張子): このフォーマットでは、メソッドがテキスト形式で書き出されます。 書き出したファイルは、標準のテキストエディターやソースコントロールツールで開くことができます。

プロジェクトメソッドプロパティ

プロジェクトメソッドを作成した後、その名称やプロパティを変更することができます。 プロジェクトメソッドのプロパティは主に、実行アクセスやセキュリティ条件 (ユーザー、統合されたサーバーやサービスからのアクセスの可否) に加えて、実行モードに関する設定が含まれます。

他のタイプのメソッドには専用のプロパティがありません。 これらのメソッドのプロパティは、それらが関連付けられているオブジェクトに基づいて決定されます。

プロジェクトメソッドの メソッドプロパティ ダイアログボックスを表示するには、次の方法があります:

  • コードエディターにおいて、メソッド メニューから メソッドプロパティ... を選択します。
  • または、エクスプローラーの メソッド ページでプロジェクトメソッドを選択し、コンテキストメニューまたはオプションメニューから メソッドプロパティ... を選択します。

一回の処理で複数のプロジェクトメソッドの属性を設定するために、属性の一括設定を使用できます (属性の一括設定 参照)。

名称

メソッドプロパティ ウィンドウの 名称 エリア、またはエクスプローラーでプロジェクトメソッド名を変更できます。

新しい名称は 4D の命名規則に沿っていなければなりません (識別子 参照)。 同じ名称のメソッドが既に存在する場合、4D はその旨を知らせるメッセージを表示します。 名称変更後、4D メソッドリストをソートします。

警告: プロジェクトメソッドの名前を変更すると、そのメソッドを旧名称で呼び出している他のメソッドやフォーミュラなど、アプリケーションの機能が無効になるリスクがあります。 このため、この変更を手動ではなく、名称変更 で説明されているプロジェクトメソッド名の名称変更機能によりおこなうことが強く推奨されます。 この機能を使用すれば、デザイン環境における当該メソッドの呼び出し箇所がすべて自動的に更新されます (ただし EXECUTE METHOD など、文字列としてメソッド名が参照されている個所を除きます)。

4D Server の場合、名称変更は変更終了後にサーバーに反映されます。 複数のユーザーが同時に名称を変更しようとすると、最後におこなわれた名称変更が適用されます。 メソッドのオーナーを指定すれば特定のユーザー以外はメソッド名を変更できないようにできます。

データベースメソッドの名称を変更することはできません。 オブジェクトに紐付いたトリガー、フォームメソッド、オブジェクトメソッドも同様です。これらは関連先のオブジェクトにより名称を決定されます。

属性

属性を使用して、プロジェクトメソッドがどのコンテキストにおいて利用可能かを指定できます。 エクスプローラーを使用して複数のプロジェクトメソッドに対し、属性を一括して設定することもできます (後述参照)。

非表示

ユーザーに対し、実行 メニューの メソッド... から特定のメソッドを実行させたくない場合、このオプションを選択すればそのメソッドを非表示にできます。 非表示のメソッドは、メソッド実行ダイアログボックスに表示されません。

プロジェクトメソッドを非表示にしても、データベースプログラマーはそれを使用することができます。 これらは、エクスプローラーやコードエディターのメソッドリストには引き続き表示されます。

コンポーネントとホストプロジェクト間で共有

この属性は、コンポーネントのフレームワークで使用されます。 このオプションが選択されていると、アプリケーションがホストデータベースとして実行されている場合、そのメソッドがコンポーネントから実行可能になります。 また、アプリケーションがコンポーネントとして実行されている場合、そのメソッドはホストデータベースから実行可能となります。

コンポーネントについては 4Dコンポーネントの開発とインストール を参照ください。

サーバー上で実行

この属性は、クライアント/サーバーモードの 4Dアプリケーションでのみ考慮されます。 このオプションが選択されていると、そのプロジェクトメソッドは呼び出し方に関わらず常にサーバー上で実行されます。

このオプションに関する詳細は、4D Serverリファレンスマニュアルの <a href="サーバー上で実行属性 を参照ください。

実行モード

このオプションを使用すると、メソッドのプリエンプティブ実行が可能であることを宣言できます。 デフォルトでは、4D はアプリケーション内のプロジェクトメソッドをすべてコオペラティブモードで実行します。

プリエンプティブモード機能を利用したい場合、プリエンプティブモードで実行したいメソッドをすべて明示的に宣言する必要があります。 その後、コンパイラーがこれらのメソッドが実際にスレッドセーフであるかどうかをチェックします。

注: プリエンプティブモードでの実行は、コンパイルモードでのみ利用可能です。 詳細については、プリエンプティブ4Dプロセス の章を参照ください。

以下のオプションが提供されています:

  • プリエンプティブプロセスで実行可能: このオプションをチェックすると、当該メソッドはプリエンプティブプロセスでの実行が可能であり、可能な場合にはプリエンプティブモードで実行するべきと宣言します。 メソッドの "preemptive" プロパティは "capable" に設定されます。

このオプションがチェックされている場合、4Dコンパイラーはメソッドが実際にプリエンプティブモードで実行可能かどうかを検証し、そうでない場合 (たとえば、プリエンプティブモードで実行不可能なコマンドやメソッドを直接的あるいは間接的に呼び出している場合など) にはエラーを返します。なお、コールチェーンはすべて解析されますが、最初のサブレベルに対してのみエラーが報告されます。 エラーの場合には、メソッドを編集してスレッドセーフにするか、あるいは別のオプションを選択します。

メソッドのプリエンプティブ性が証明されると、内部で "thread safe" というタグ付けがされ、すべての要件が満たされればプリエンプティブモードで実行されます。 このプロパティはプリエンプティブモードの資格を定義しますが、メソッドが実際にプリエンプティブモードで実行されることを保証するものではありません。プリエンプティブ実行モードは特定のコンテキストを必要とするからです (プロセスがプリエンプティブに実行される条件とは? を参照ください)。

  • プリエンプティブプロセスでは実行不可: このオプションをチェックすると、当該メソッドはプリエンプティブモードでの実行は不可能であると宣言し、以前の 4D のバージョンと同様に常にコオペラティブモードで実行されます。 メソッドの "preemptive" プロパティは "incapable" に設定されます。

このオプションがチェックされている場合、4Dコンパイラーはメソッドがプリエンプティブ実行可能かどうかを検証しません。メソッドは内部で自動的に "thread unsafe" とタグ付けされます (たとえ、理論的にはスレッドセーフであってもです)。 ランタイムで呼び出された場合、このメソッドは同じスレッド内の他のメソッドを "汚染" し、他のメソッドがスレッドセーフであったとしても、スレッドはコオペラティブモードでの実行を強制されます。

  • 特に設定しない (デフォルト): このオプションをチェックすると、当該メソッドについてはプリエンプティブプロパティを管理しないことを宣言します。 メソッドの "preemptive" プロパティは "indifferent" に設定されます。

このオプションがチェックされているとき、4Dコンパイラーはメソッドのプリエンプティブ性を評価し、内部的に "thread safe" あるいは "thread unsafe" のタグ付けをします。 プリエンプティブ実行に関するエラーは報告されません。 メソッドがスレッドセーフと評価されていれば、ランタイムでプリエンプティブコンテキストから呼び出された場合にはプリエンプティブスレッド実行を妨げません。 逆に、メソッドがスレッドアンセーフであると評価された場合には、ランタイムで呼び出された場合に、プリエンプティブなスレッド実行を不可能にします。

このオプションを使用した場合、内部でのスレッドセーフ評価に関わらず、最初の親メソッドとしてメソッドが 4D から直接呼び出された場合 (たとえば New process コマンドから呼び出された場合など)、メソッドは常にコオペラティブモードで実行されます。 内部で "thread-safe" とタグ付けされている場合、そのタグはコールチェーン内で他のメソッドから呼び出された場合に限り考慮されます。

特殊なケース: メソッドの コンポーネントとホストプロジェクト間で共有 プロパティがチェックされている場合、特に設定しない オプションを選択するとメソッドは自動的にスレッドアンセーフであるとタグ付けされます。 共有コンポーネントメソッドをスレッドセーフにしたい場合には、プリエンプティブプロセスで実行可能 オプションを明示的に選択する必要があります。

公開オプション

公開オプション属性は、当該メソッドの呼び出しが明示的に許可された外部サービスを指定します。

Webサービス

この属性を使用して、SOAPリクエストでアクセス可能な Webサービスとして当該メソッドを公開することができます。 詳細は Web サービスの公開と使用 を参照ください。 このオプションを選択すると、WSDL を公開 オプションを選択できるようになります。

エクスプローラーでは、Webサービスとして提供されるプロジェクトメソッドには専用のアイコンが表示されます

注: メソッド名が XML の命名規則に準拠しない文字 (たとえばスペース) を含む場合、そのメソッドは Webサービスとして公開できません。 この場合、設定は保存できません。

WSDL を公開

この属性は "Webサービス" 属性が設定されている場合にのみ利用可能です。 この属性を設定すると、当該メソッドが 4Dアプリケーションの WSDLに 含まれます。 詳細については WSDL ファイルを生成する を参照ください。

エクスプローラーでは、Webサービスとして提供され、WSDLで公開されたプロジェクトメソッドには専用のアイコンが表示されます

4D タグと URL(4DACTION...)

このオプションは、4D Webサーバーのセキュリティを強化するために使用されます。このオプションが選択されていない場合、4DACTION URL を使用した HTTPリクエスト、および 4DSCRIPT、4DTEXT、4DHTML タグ から当該メソッドを直接呼び出すことができません。

エクスプローラーでは、この属性が設定されたプロジェクトメソッドには専用のアイコンが表示されます

セキュリティのため、このオプションはデフォルトで選択されていません。 Web機能から直接呼び出されるメソッドには、このオプションを明示的に選択しなければなりません。

SQL

この属性が選択されていると、当該プロジェクトメソッドは 4D の SQLエンジンから実行可能となります。 デフォルトでは選択されておらず、明示的に許可されない限り 4Dメソッドは保護されており、4D SQLエンジンから呼び出すことはできません。

このプロパティはすべての内部および外部SQLクエリ (ODBCドライバー経由、Begin SQL/End SQL タグ内の SQLコード、または QUERY BY SQL からの呼び出し) に適用されます。

注:

  • メソッドに "SQL" 属性が設定されていても、メソッドの実行時にはデータベース設定およびメソッドプロパティに設定されたアクセス権が考慮されます。
  • ODBC の SQLProcedure 関数は "SQL" 属性が設定されているプロジェクトメソッド名のみを返します。

詳細については、SQLマニュアルの 4Dと4D SQLエンジン統合の原則 を参照ください。

REST サーバー

このオプションは、従来のカレントレコードおよびカレントセレクションの概念に依存しており、廃止予定となっています。 RESTアクセスには、ORDAデータモデルクラス関数 を使用することが推奨されます。**

属性の一括設定

"メソッド属性" ダイアログボックスを使用して、一回の操作で複数のプロジェクトメソッドに対して属性 (非表示、Webサービスで公開、等) を設定することができます。 この機能は、多数のプロジェクトメソッドの属性を一括して変更する場合に便利です。 また、開発の段階で、類似のメソッド群に共通の属性を素早く適用するのに使用することもできます。

メソッド属性の一括設定をおこなうには:

  1. エクスプローラーの メソッドページ からオプションメニューを展開し、属性の一括設定... コマンドを選択します。 "メソッド属性" ダイアログボックスが表示されます:

  2. "一致するメソッド名" エリアに属性を一括設定するメソッドを指定するための名前条件を入力します。 入力した文字列を使用してメソッド名が検索されます。

"@" をワイルドカード文字として使用し、メソッドグループを選択できます:

  • 前方一致で検索するには、文字列の最後に "@" を加えます。 例: web@
  • 含む検索をするには、文字列の中に "@" を加えます。 例: web@write
  • 後方一致で検索するには、文字列の先頭に "@" を加えます。 例: @write
  • すべてのメソッドを選択するには "@" のみを入力します。

注:

  • 文字の大小は区別されません。
  • "@" は文字列内で複数回使用できます (例: dtro_@web@pro.@)
  1. "更新する属性" エリアでは、ドロップダウンリストから更新対象の属性を選択し、True または False ラジオボタンを選択します。

注: "WSDL で公開する" 属性を True に設定した場合、"Webサービスとして公開" 属性が True に設定されたメソッドにのみ適用されます。

  1. 適用 をクリックします。 検索条件に合致するプロジェクトメソッドに対し、属性の変更は即座に反映されます。