Gopher 自动服务程序(Automation Server)示例

本示例模拟一个智能搜索商务对象,此对象可以在一个或多个数据库中查找某个客户。实际工作时,数据环境的 BeforeOpenTables 事件代码在 gopher 类的基础上创建了一个对象,并提示用户使用什么数据库。gopher 类的代码会打开相应的数据库。这种方法可以使我们在一个三层结构模型下使用 Visual FoxPro,该模型使得用户服务不用和数据服务紧紧连在一起,就象当今许多的客户 - 服务器环境一样。

尽管本示例仅仅提供了在示例数据库 TESTDATA 和 TASTRADE 之间选择,您还是可以利用这种方法创建一个智能搜索商务对象,该对象为了寻找必要的数据库,可自动在一个企业的网络上进行搜索。

若要打开 gopher 示例的项目

若要运行 gopher 示例

  1. 打开位于 Visual Studio ...\Samples\Vfp98\Servers\Gopher 文件夹中的 Foxsrch.pjx 项目。

  2. 在项目管理器中选择“Srchdata.prg”,再选择“修改”。

  3. 改变下面的代码,这样 FOXHOME 的定义可以反映出您的 Visual FoxPro 示例文件夹:
    #DEFINE FOXHOME HOME(2)
    
  4. 保存并关闭 Srchdata.prg。

  5. 在“项目管理器”中,选择“连编”。

  6. 在“连编选项”对话框中,选择“连编可执行文件”,再选择“确定”来创建 Foxsearch.exe。当创建可执行文件时,会注册该服务程序。

  7. 在 Visual Studio ...\Samples\Vfp98\Servers\Gopher 中,运行 Wing1.scx。

在 Wing1.scx 中,数据环境的 BeforeOpenTables 事件包含下面的代码:

LOCAL oGopher,lUseRemote
THIS.AddObject('cursor1','cursor')
THIS.cursor1.Alias = 'employee'
lUseRemote=(MESSAGEBOX('Do you want to use Remote Data?',36) = 6)

oGopher=CreateObject('FoxSearch.Gopher')
oGopher.UpdateDE(THIS,m.lUseRemote)
RELEASE oGopher

下面的代码定义了 Gopher 类。UpdateDE 方法程序将对数据环境的对象引用和一个逻辑值作为参数,在这个逻辑值的基础上,UpdateDE 方法程序在数据环境中为一个临时表设置不同的 CursorSource 值。

#DEFINE FOXHOME   HOME(2)

DEFINE CLASS Gopher AS Custom OLEPUBLIC
oDERef = ''

PROCEDURE UpdateDE
   PARAMETER oNewDE,lRemote
   IF TYPE('oNewDE')#'O' OR ISNULL(m.oNewDE)
      RETURN .F.
   ENDIF
   THIS.oDERef = m.oNewDE

   IF !m.lRemote
   * Use local data
      THIS.oDERef.cursor1.database = FOXHOME + 'DATA\TESTDATA.DBC'
      THIS.oDERef.cursor1.cursorsource = 'Employee'
   ELSE
   * Use remote data (simiulated)
      THIS.oDERef.cursor1.database = FOXHOME + ;
      'Tastrade\DATA\Tastrade.DBC'
      THIS.oDERef.cursor1.cursorsource = 'Employee'
   ENDIF
   THIS.oDERef = ''
ENDPROC

ENDDEFINE