[ Before Conect ] プロパティは、実行時に接続プロパティを動的に変更するために実装されています。
この機能を使用するには、GeneXus のプロシージャーが必要です。このプロシージャーは実行時に接続プロパティを示す必要があります。また、アプリケーションが接続要求を実行してデータベースと対話する直前に実行されます。
対応しているプラットフォーム: Web (.NET、Java)
GeneXus Procedure オブジェクトは、接続確立前に呼び出される [ Before Connect ] プロパティ内で記述される必要があります。このプロシージャーは GeneXus 内でプログラムし、いくつかの要件を満たす必要があります。
このプロシージャー内で、アプリケーションが接続する Datastore のプロパティを記述/変更できます。
このプロシージャーは、データベースの要求が実行されるたびに呼び出されます。たとえば、データベースからデータをロードする Web Panel オブジェクトがある場合、このプロシージャーはリフレッシュ (F5 キーを使用) するたびに実行されます。
DBConnection タイプパラメーターが 1 つ以上必要です。
parm(INOUT: &dbconn); // &dbconn は、DBConnection タイプの変数です。
3 層モデルでは、[ Execute in new LUW ] プロパティが True に設定されている必要があります。Web 環境では、このプロパティは False に設定されている必要があります。
プロシージャーは Datastore の詳細とともに &dbconn を受け取ります。この詳細は、適用する必要のある論理に基づいて変更できます。たとえば、アプリケーションを実際に実行するユーザーに応じて Datastore を変更することができます。
データベースに接続したり、データベースに接続する関数を使ったりすることはできません。データベースにアクセスする機能 (プログラムが無限ループを引き起こしてしまうため使用できません) には、次のようなものがあります:
- For Each コマンド
- ビジネスコンポーネント
- GAMSession.Get() または内部でデータベースにアクセスするメソッド
- データベースにアクセスするプロシージャーの呼び出し
ログイン Web パネルが Web セッションにログインしたユーザーを設定するとします。
&Session.Set('UserID', str(&UserID))
また、ログインしているユーザーに応じて異なるデータベースに接続するものとします。
この目的のため、CONNECT という名前のプロシージャーを定義します。これは、 [ Before Connect ] モデルプロパティにおいて記述される必要があります。
ルール
Parm(inout: &dbconn);
ソース
&UserID = val(&Session.Get('UserID'))
Do Case
Case &UserID = 1
&DataBase = "companyone"
Case &UserID = 2
&DataBase = "companytwo"
Otherwise
&DataBase = "companyone" //既定のデータベースです
EndCase
//既定の接続詳細を変更します
&dbconn = GetDatastore("Default")
&dbconn.JDBCDriverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver"
&dbconn.JDBCDriverURL = "jdbc:microsoft:sqlserver://MyServer:1433;databaseName=" + trim(&DataBase) + ";SelectMethod=cursor"
&dbConn.UserName = 'username'
&dbConn.UserPassword = 'userpassword'
同じケースで JDBC ドライバーを使用する場合:
&dbconn.JDBCDriverName = "net.sourceforge.jtds.jdbc.Driver"
&dbconn.JDBCDriverURL = "jdbc:jtds:sqlserver://MyServer:1433/"+ &database.Trim()
ルール
Parm(inout: &dbconn);
ソース
&dbconn = GetDatastore("Default")
if &Connection = 'JNDI'
&dbconn.UseExternalDatasource = 1
&dbconn.ExternalDatasourceName = 'java:/comp/env/jdbc/myoracle'
else
&dbconn.UseExternalDatasource = 0
&dbconn.JDBCDriverName = "oracle.jdbc.driver.OracleDriver"
&dbconn.JDBCDriverURL = "jdbc:oracle:thin:@Testorcl:1521:testorcl"
&dbConn.UserName = &UserId.Trim()
&dbConn.UserPassword = &UserPwd.Trim()
endif
ルール
Parm(inout: &dbconn);
ソース
&UserID = val(&Session.Get('UserID'))
//UserID に応じてデータベースを選択します
Case &UserID = 1
&DataBase = "companyone"
Case &UserID = 2
&DataBase = "companytwo"
Otherwise
&DataBase = "companyone" //既定のデータベースです
EndCase
//接続のプロパティを変更します
&dbconn = GetDatastore("Default")
&dbconn.UserName = 'username'
&dbconn.UserPassword = 'userpassword'
&dbconn.ConnectionData = "DATABASE=" + &DataBase.Trim() //SQLServer
//&dbconn.ConnectionData = "Data Source=" + &DataBase.Trim() //MySQL
DBConnection データタイプ
[ After connect ] プロパティ
|