オブジェクトのロードはいつ実行されるのか?

2023年2月14日

World WideのLANSA技術フォーラムに投稿されたトピックと、日本のお客様からのお問い合わせへの回答の中から、皆様にお役に立つLANSAの開発テクニックやトラブルシュートに関する情報をご紹介します。

質問

フォームやWebページにDefine_Comされたオブジェクトは、どのタイミングでローディングされますか?

回答

Define_Com Reference(*Static)が指定されているコンポーネントは、オーナーコンポーネントがロードされるタイミングでロードされます。

これは、フォームもWebアプリケーションも同じですが、Visual LANSA Webの場合、Define_Com Reference(*Static)のコンポーネントを、並列処理によりロードします。
※ 並列処理は、シングルスレッドでは無いということです。同時という意味ではありません。

オーナーコンポーネントで確実に使用されるコンポーネントの場合、Reference(*Static)を指定することで、必要なオブジェクトを事前ロードするので、効率の良いロードが行われます。

Define_Com Reference(*Deferred)が指定されているコンポーネントは、Define_Comの行で*NULLに設定された後、そのコンポーネントがロジック内で使用されたタイミングで(Set_Refを明示的に書かなくても)ロードされます。
ロードはシングルスレッドで実行されるため、ロードが完了するまで、ブラウザーはフリーズ状態となり使用できません。
オーナーコンポーネント内で、必ずしも使用されるとは限らないコンポーネントに対して、Reference(*Deferred)を指定することで、オーナーコンポーネントの初期ロード時の負荷を軽減できます。

Define_Com Reference(*Dynamic)が指定されているコンポーネントは、Define_Comの行で*NULLに設定された後、Set_Refコマンドにより、コンポーネントへの参照が行われたタイミングでロードされます。
ロードはシングルスレッドで実行されるため、ロードが完了するまで、ブラウザーはフリーズ状態となり使用できません。
これは、Reference(*Deferred)と同じ動きになります。

有償の「LANSAテクニカル・ホットライン・サービス」をご契約いただければ、データベースの検索(https://demo.lansa.jp/qadb/)」から、今回、ご紹介した以外の技術情報も探すことが出来ます。 「LANSAテクニカル・ホットライン・サービス」のご契約についてはお問い合わせフォーム(https://www.lansa.jp/inquiryform/)よりお問い合わせください。