コードの扱い方
The 4D code used across your application is written in methods and classes.
4D IDE には、コードを作成・編集・エクスポート・削除するためのさまざまな機能があります。通常は、4D付属 の コードエディター を使用して、コードを管理します。他にもVS Code などのエディターを使用することもでき、VS Code に対しては4D-Analyzer 拡張機能 がご利用いただけます。 4D IDE には、コードを作成・編集・エクスポート・削除するためのさまざまな機能があります。通常は、4D の コードエディター を使用して、コードを管理します。
メソッドの作成
4D のメソッドは、/Project/Sources/ フォルダーの適切なフォルダー内の .4dm ファイルに格納されます。
いくつかの種類のメソッド を作成することができます:
- すべてのメソッドは、エクスプローラー ウィンドウから作成または開くことができます (フォームエディター から管理されるオブジェクトメソッドを除く)。
- Project methods can also be created or opened from the File menu or toolbar (New/Method... or Open/Method...) or using shortcuts in the Code editor window.
- トリガーは、ストラクチャーエディターからも作成したり開いたりできます。
- フォームメソッドは、フォームエディター からも作成したり開いたりできます。
クラスの作成
4D においてユーザークラスとは、/Project/Sources/Classes/ フォルダーに保存された専用のメソッドファイル (.4dm) によって定義されます。ファイル名がクラス名になります。例えば、"Polygon" という名前のクラスは、以下のようなファイル内に保存されます: ファイル名がクラス名になります。
クラスファイルは、ファイル メニューやツールバー (新規/クラス...)、あるいは エクスプローラー ウィンドウの メソッド ページにて作成可能です。
詳細については、クラス を参照してください。
メソッドやクラスの削除
既存のメソッドやクラスを削除するには:
- ディスク上で "Sources" フォルダーより .4dm ファイルを削除します。
- 4D エクスプローラーでは、メソッドやクラスを選択した状態で
をクリックするか、コンテキストメニューより 移動 > ゴミ箱 を選択します。
オブジェクトメソッドを削除するには、フォームエディター で、オブジェクト メニューから オブジェクトメソッド消去 を選択します。
メソッドの書き出しと読み込み
メソッドやクラスのコードは、ファイルの形で書き出しおよび読み込みが可能です。メソッドやクラスのコードは、ファイルの形で書き出しおよび読み込みが可能です。 These commands are found in the Method menu of the Code editor.
- メソッド書き出し... コマンドを選択すると、標準のファイル保存ダイアログが表示され、書き出しファイルの名前と場所、およびフォーマットを選択することができます (後述参照)。印刷と同様に、コードブロックが折りたたまれているかどうかに関わらず、コード全体が書き出されます。
- メソッド読み込み... コマンドを選択すると、標準のファイルを開くダイアログが表示され、読み込むファイルを選択することができます。読み込みをおこなうと、メソッド中で現在選択されているテキストが置き換えられます。読み込んだメソッドで既存メソッドの全体を書き換えるには、読み込み前に既存メソッド内を全選択します。
macOS で書き出したメソッドを Windows で読み込むことができ、その逆も可能です。 4D は必要に応じて文字の変換をおこないます。
メソッドの読み込みと書き出しには 2つのフォーマットを使用できます:
- 4Dメソッド (.c4d 拡張子): このフォーマットでは、メソッドはエンコードされた形で書き出されます。メソッド中のオブジェクト (コマンドなどの要素) の名称はトークナイズされます。このフォーマットは、異なる言語 (非英語のコマンド名) を使用する 4Dアプリケーションやプラグイン間でメソッドをやり取りする場合に特に便利です。その代わり、テキストエディターでメソッドを表示することはできません。メソッド中のオブジェクト (コマンドなどの要素) の名称はトークナイズされます。このフォーマットは、異なる言語 (非英語のコマンド名) を使用する 4Dアプリケーションやプラグイン間でメソッドをやり取りする場合に特に便利です。その代わり、テキストエディターでメソッドを表示することはできません。
- テキスト (.txt 拡張子): このフォーマットでは、メソッドがテキスト形式で書き出されます。書き出したファイルは、標準のテキストエディターやソースコントロールツールで開くことができます。書き出したファイルは、標準のテキストエディターやソースコントロールツールで開くことができます。
プロジェクトメソッドプロパティ
プロジェクトメソッドを作成した後、その名称やプロパティを変更することができます。プロジェクトメソッドのプロパティは主に、実行アクセスやセキュリティ条件 (ユーザー、統合されたサーバーやサービスからのアクセスの可否) に加えて、実行モードに関する設定が含まれます。プロジェクトメソッドのプロパティは主に、実行アクセスやセキュリティ条件 (ユーザー、統合されたサーバーやサービスからのアクセスの可否) に加えて、実行モードに関する設定が含まれます。
他のタイプのメソッドには専用のプロパティがありません。これらのメソッドのプロパティは、それらが関連付けられているオブジェクトに基づいて決定されます。これらのメソッドのプロパティは、それらが関連付けられているオブジェクトに基づいて決定されます。
プロジェクトメソッドの メソッドプロパティ ダイアログボックスを表示するには、次の方法があります:
- コードエディターにおいて、メソッド メニューから メソッドプロパティ... を選択します。
- または、エクスプローラーの メソッド ページでプロジェクトメソッドを選択し、コンテキストメニューまたはオプションメニューから メソッドプロパティ... を選択します。
一回の処理で複数のプロジェクトメソッドの属性を設定するために、属性の一括設定を使用できます (属性の一括設定 参照)。
名称
メソッドプロパティ ウィンドウの 名称 エリア、またはエクスプローラーでプロジェクトメソッド名を変更できます。
新しい名称は 4D の命名規則に沿っていなければなりません (識別子 参照)。同じ名称のメソッドが既に存在する場合、4D はその旨を知らせるメッセージを表示します。名称変更後、4D メソッドリストをソートします。同じ名称のメソッドが既に存在する場合、4D はその旨を知らせるメッセージを表示します。名称変更後、4D メソッドリストをソートします。
プロジェクトメソッドの名前を変更すると、そのメソッドを旧名称で呼び出している他のメソッドやフォーミュラなど、アプリケーションの機能が無効になるリスクがあります。プロジェクトメソッドの名前を変更すると、そのメソッドを旧名称で呼び出している他のメソッドやフォーミュラなど、アプリケーションの機能が無効になるリスクがあります。このため、この変更を手動ではなく、名称変更 で説明されているプロジェクトメソッド名の名称変更機能によりおこなうことが強く推奨されます。この機能を使用すれば、デザイン環境における当該メソッドの呼び出し箇所がすべて自動的に更新されます (ただし EXECUTE METHOD など、文字列としてメソッド名が参照されている個所を除きます)。この機能を使用すれば、デザイン環境における当該メソッドの呼び出し箇所がすべて自動的に更新されます (ただし EXECUTE METHOD など、文字列としてメソッド名が参照されている個所を除きます)。
4D Server の場合、名称変更は変更終了後にサーバーに反映されます。複数のユーザーが同時に名称を変更しようとすると、最後におこなわれた名称変更が適用されます。メソッドのオーナーを指定すれば特定のユーザー以外はメソッド名を変更できないようにできます。複数のユーザーが同時に名称を変更しようとすると、最後におこなわれた名称変更が適用されます。メソッドのオーナーを指定すれば特定のユーザー以外はメソッド名を変更できないようにできます。
データベースメソッドの名称を変更することはできません。オブジェクトに紐付いたトリガー、フォームメソッド、オブジェクトメソッドも同様です。 これらは関連先のオブジェクトにより名称を決定されます。オブジェクトに紐付いたトリガー、フォームメソッド、オブジェクトメソッドも同様です。 これらは関連先のオブジェクトにより名称を決定されます。
属性
属性を使用して、プロジェクトメソッドがどのコンテキストにおいて利用可能かを指定できます。エクスプローラーを使用して複数のプロジェクトメソッドに対し、属性を一括して設定することもできます (後述参照)。エクスプローラーを使用して複数のプロジェクトメソッドに対し、属性を一括して設定することもできます (後述参照)。
非表示
ユーザーに対し、実行 メニューの メソッド... から特定のメソッドを実行させたくない場合、このオプションを選択すればそのメソッドを非表示にできます。非表示のメソッドは、メソッド実行ダイアログボックスに表示されません。非表示のメソッドは、メソッド実行ダイアログボックスに表示されません。
プロジェクトメソッドを非表示にしても、データベースプログラマーはそれを使用することができます。これらは、エクスプローラーやコードエディターのメソッドリストには引き続き表示されます。これらは、エクスプローラーやコードエディターのメソッドリストには引き続き表示されます。
コンポーネントとホストプロジェクト間で共有
この属性は、コンポーネントのフレームワークで使用されます。このオプションが選択されていると、アプリケーションがホストデータベースとして実行されている場合、そのメソッドがコンポーネントから実行可能になります。また、アプリケーションがコンポーネントとして実行されている場合、そのメソッドはホストデータベースから実行可能となります。
コンポーネントについては 4Dコンポーネントの開発とインストール を参照ください。
サーバー上で実行
この属性は、クライアント/サーバーモードの 4Dアプリケーションでのみ考慮されます。このオプションが選択されていると、そのプロジェクトメソッドは呼び出し方に関わらず常にサーバー上で実行されます。このオプションが選択されていると、そのプロジェクトメソッドは呼び出し方に関わらず常にサーバー上で実行されます。
このオプションに関する詳細は、4D Serverリファレンスマニュアルの サーバー上で実行属性 を参照ください。
実行モード
このオプションを使用すると、メソッドのプリエンプティブ実行が可能であることを宣言できます。これについては、プリエンプティブプロセス の章で説明されています。このオプションを使用すると、メソッドのプリエンプティブ実行が可能であることを宣言できます。デフォルトでは、4D はアプリケーション内のプロジェクトメソッドをすべてコオペラティブモードで実行します。
プリエンプティブモード機能を利用したい場合、プリエンプティブモードで実行したいメソッドをすべて明示的に宣言する必要があります。その後、コンパイラーがこれらのメソッドが実際にスレッドセーフであるかどうかをチェックします。
Note: Execution in preemptive mode is only available in compiled mode. For more information, refer to the Preemptive 4D processes section.
以下のオプションが提供されています:
- Can be run in preemptive processes: By checking this option, you declare that the method is capable of being run in a preemptive process and therefore should be run in preemptive mode whenever possible. メソッドの "preemptive" プロパティは "capable" に設定されます。
このオプションがチェックされている場合、4Dコンパイラーはメソッドが実際にプリエンプティブモードで実行可能かどうかを検証し、そうでない場合 (たとえば、プリエンプティブモードで実行不可能なコマンドやメソッドを直接的あるいは間接的に呼び出している場合など) にはエラーを返します。 なお、コールチェーンはすべて解析されますが、最初のサブレベルに対してのみエラーが報告されます。エラーの場合には、メソッドを編集してスレッドセーフにするか、あるいは別のオプションを選択します。エラーの場合には、メソッドを編集してスレッドセーフにするか、あるいは別のオプションを選択します。
メソッドのプリエンプティブ性が証明されると、内部で "thread safe" というタグ付けがされ、すべての要件が満たされればプリエンプティブモードで実行されます。メソッドのプリエンプティブ性が証明されると、内部で "thread safe" というタグ付けがされ、すべての要件が満たされればプリエンプティブモードで実行されます。 This property defines its eligibility for preemptive mode but does not guarantee that the method will actually be run in preemptive mode, since this execution mode requires a specific context (see When is a process started preemptively?).
- プリエンプティブプロセスでは実行不可: このオプションをチェックすると、当該メソッドはプリエンプティブモードでの実行は不可能であると宣言し、以前の 4D のバージョンと同様に常にコオペラティブモードで実行されます。メソッドの "preemptive" プロパティは "incapable" に設定されます。メソッドの "preemptive" プロパティは "incapable" に設定されます。
このオプションがチェックされている場合、4Dコンパイラーはメソッドがプリエンプティブ実行可能かどうかを検証しません。メソッドは内部で自動的に "thread unsafe" とタグ付けされます (たとえ、理論的にはスレッドセーフであってもです)。ランタイムで呼び出された場合、このメソッドは同じスレッド内の他のメソッドを "汚染" し、他のメソッドがスレッドセーフであったとしても、スレッドはコオペラティブモードでの実行を強制されます。ランタイムで呼び出された場合、このメソッドは同じスレッド内の他のメソッドを "汚染" し、他のメソッドがスレッドセーフであったとしても、スレッドはコオペラティブモードでの実行を強制されます。
- 特に設定しない (デフォルト): このオプションをチェックすると、当該メソッドについてはプリエンプティブプロパティを管理しないことを宣言します。メソッドの "preemptive" プロパティは "indifferent" に設定されます。メソッドの "preemptive" プロパティは "indifferent" に設定されます。
このオプションを使用した場合、内部でのスレッドセーフ評価に関わらず、最初の親メソッドとしてメソッドが 4D から直接呼び出された場合 (たとえば New process コマンドから呼び出された場合など)、メソッドは常にコオペラティブモードで実行されます。内部で "thread-safe" とタグ付けされている場合、そのタグはコールチェーン内で他のメソッドから呼び出された場合に限り考慮されます。プリエンプティブ実行に関するエラーは報告されません。メソッドがスレッドセーフと評価されていれば、ランタイムでプリエンプティブコンテキストから呼び出された場合にはプリエンプティブスレッド実行を妨げません。逆に、メソッドがスレッドアンセーフであると評価された場合には、ランタイムで呼び出された場合に、プリエンプティブなスレッド実行を不可能にします。
Note that with this option, whatever the internal thread safety evaluation, the method will always be executed in cooperative mode when called directly by 4D as the first parent method (for example through the New process command). 内部で "thread-safe" とタグ付けされている場合、そのタグはコールチェーン内で他のメソッドから呼び出された場合に限り考慮されます。
Particular case: If the method has also the Shared by components and host database property, setting the Indifferent option will automatically tag the method as thread-unsafe. 共有コンポーネントメソッドをスレッドセーフにしたい場合には、プリエンプティブプロセスで実行可能 オプションを明示的に選択する必要があります。
公開オプション
公開オプション属性は、当該メソッドの呼び出しが明示的に許可された外部サービスを指定します。
Webサービス
この属性を使用して、SOAPリクエストでアクセス可能な Webサービスとして当該メソッドを公開することができます。詳細は Web サービスの公開と使用 を参照ください。このオプションを選択すると、WSDL を公開 オプションを選択できるようになります。詳細は Web サービスの公開と使用 を参照ください。このオプションを選択すると、WSDL を公開 オプションを選択できるようになります。
エクスプローラーでは、Webサービスとして提供されるプロジェクトメソッドには専用のアイコンが表示されます
。
注: メソッド名が XML の命名規則に準拠しない文字 (たとえばスペース) を含む場合、そのメソッドは Webサービスとして公開できません。この場合、設定は保存できません。この場合、設定は保存できません。
WSDL を公開
この属性は "Webサービス" 属性が設定されている場合にのみ利用可能です。この属性を設定すると、当該メソッドが 4Dアプリケーションの WSDLに 含まれます。この属性は "Webサービス" 属性が設定されている場合にのみ利用可能です。この属性を設定すると、当該メソッドが 4Dアプリケーションの WSDLに 含まれます。詳細については WSDL ファイルを生成する を参照ください。
エクスプローラーでは、Webサービスとして提供され、WSDLで公開されたプロジェクトメソッドには専用のアイコンが表示されます
。
4D タグと URL(4DACTION...)
このオプションは、4D Webサーバーのセキュリティを強化するために使用されます。このオプションが選択されていない場合、4DACTION URL を使用した HTTPリクエスト、および 4DSCRIPT、4DTEXT、4DHTML タグ から当該メソッドを直接呼び出すことができません。
エクスプローラーでは、この属性が設定されたプロジェクトメソッドには専用のアイコンが表示されます
。
セキュリティのため、このオプションはデフォルトで選択されていません。 Web機能から直接呼び出されるメソッドには、このオプションを明示的に選択しなければなりません。
SQL
この属性が選択されていると、当該プロジェクトメソッドは 4D の 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サービスで公開、等)を設定することができます。この機能は、多数のプロジェクトメソッドの属性を一括して変更する場合に便利です。また、開発の段階で、類似のメソッド群に共通の属性を素早く適用するのに使用することもできます。
メソッド属性の一括設定をおこなうには:
-
エクスプローラーの メソッドページ からオプションメニューを展開し、属性の一括設定... コマンドを選択します。"メソッド属性" ダイアログボックスが表示されます: "メソッド属性" ダイアログボックスが表示されます:
-
"一致するメソッド名" エリアに属性を一括設定するメソッドを指定するための名前条件を入力します。入力した文字列を使用してメソッド名が検索されます。入力した文字列を使用してメソッド名が検索されます。
"@" をワイルドカード文字として使用し、メソッドグループを選択できます:
- 前方一致で検索するには、文字列の最後に "@" を加えます。例:
web@ - 含む検索をするには、文字列の中に "@" を加えます。例:
web@write - 後方一致で検索するには、文字列の先頭に "@" を加えます。例:
web@write - すべてのメソッドを選択するには "@" のみを入力します。
注:
- 文字の大小は区別されません。
- "@" は文字列内で複数回使用できます (例:
dtro_@web@pro.@)
- "更新する属性" エリアでは、ドロップダウンリストから更新対象の属性を選択し、True または False ラジオボタンを選択します。
注: "WSDL で公開する" 属性を True に設定した場合、"Webサービスとして公開" 属性が True に設定されたメソッドにのみ適用されます。
- 適用 をクリックします。検索条件に合致するプロジェクトメソッドに対し、属性の変更は即座に反映されます。