学习《Building Applications with FME Objects》 之二 使用Sessions(会话)

    使用FME Objects的起点是创建一个FME Object session(会话)对象FMEOSession,除非你的应用程序要操作有限的虚拟内存,当你的应用程序初始化市可以简单的创建FMEOSession对象,并且保持该对象到应用程序关闭,你可以创建全局的会话或者通过任何对象或方法的参数来访问。

提示:一个进程只能有一个会话可用,试图创建第二个会话会导致错误

    在VB中,用CreateObject方法创建并返回一个ActiveX对象,可以用这个方法创建FMEOSession对象。

Set m_fmeSession=CreateObject(“FMEObjects.FMEOSession”)

   

    一旦创建,FMEOSession对象必须在使用前初始化,下面为初始化代码:

Dim fmeSessionSettings as FMEOStringArray

Set fmeSessionSettings=m_fmeSession.createStringArray

Call m_fmeSession.init(fmeSessionSettings)

 

    下面的图展示的FMEOSession对象的属性和方法:

image

 

    所有的FME Object AcitveX对象都是用Session对象创建的,下面创建一个字符串数组对象并赋给一个变量

Set fmeSessionSettings=fmeSession.createStringArray

 

fmeHome,fmeVersion和fmeBuildNumber属性可以用来了解FME安装信息。

 

在本章,我们将学习到:

  • 初始化会话设置
  • 改变会话设置
  • 捕捉错误
  • 创建日志文件
  • 配置函数和处理器(factories)

 

 

会话设置

    FME对象的配置参数和FME一样,详细信息参考FME Foundation手册中的FME Configuration章节。

 

    用init方法来设置会话参数,例如,设置FME对象临时目录,你可以用下列代码:

Dim fmeSessionSettings as FMEOStringArray

Set fmeSessionSetting = m_fmeSession.createStringArray

fmeSessionSettings.append(“FME_TEMP”)

fmeSessionSettings.append(“d:\temp”)

m_fmeSession.init(fmeSessionSettings)

 

    在会话被初始化后,可以使用updateSettings方法来改变会话参数。

 

捕捉错误

    一个好的应用程序应该能捕捉运行时错误,最好是在用户不知情的情况下将错误恢复,但任何开发人员也不可能预测所有的错误,好的设计应该是当错误发生时捕捉到错误并给用户友好的提示。FME对象应用程序的错误捕捉如下:

Sub MyProcedure()

On Error Goto ERROR_HANDLER

'你的代码

'…

Exit Sub

ERROR_HANDLER:

If Err.Number<0 Then

    Err.Number=Err.Number Xor vbObjectError

End If

Err.Raise Err.Number,Err.Source,Err.Description

End Sub

 

提示:如果FME对象发生错误,FMEOSession对象变成无效并且不能在应用程序的生命周期中继续使用,为了继续使用,应用程序必须重新创建FMEOSession对象。

 

为了帮助你分析运行时错误,FMEOSession对象提供两个属性包含诊断信息:

    lastErrorNum和lastErrorStackTrace,如果你的程序有日志文件,这两个属性可以被记录便于诊断。

 

提示:为了简洁,本文中的范例程序中省略了错误捕捉,但我们强烈建议你的程序中加入。

 

日志文件对象

FMEOSession对象允许你的应用程序通过logFile属性访问会话的FMEOLogFile对象。用FMEOLogFile对象可以命名日志文件。

image

下面的代码演示用应用程序路径和标题命名日志文件,并写入日志测试信息:

Public m_fmeLogfile AS FMEOLogFile

Set m_fmeLogfile=m_fmeSession.logFile

sLogFileName=App.Path & “\" & App.Title & “.log”

Call m_fmeLogfile.setFileName(sLogFileName,False)

Call m_fmeLogfile.logMessageString(0,”FME Objects test.”)

FMEOLogFile对象可以讲每条信息写入日志文件,用于查看之前生成的信息,调用holdMessage方法,参数为True则日志被吸入内部缓冲,为False则停止缓冲。

 

Set m_fmeMessages=m_fmeSession.createStringArray

Call m_fmeLogfile.HoldMessage(True)

Call m_fmeLogfile.logMessageString(0,”First Message”)

Call m_fmeLogfile.logMessageString(0,”Second Message”)

Call m_fmeLogfile.HoldMessage(False)

Call m_fmeLogfile.logMessageString(0.”Third Message”)

Call m_fmeLogfile.getHeldMessage(m_fmeMessages)

 

函数配置

FME函数是通过FMEOPipeline和FMEOFeature对象暴露给应用程序的,函数配置的描述在FME Functions,Factories,and Transformers手册中,FMEOSession configure方法允许为函数指定配置,下面的代码展示了如何给@SQL函数配置参数。

Dim fmConfigRow as FMEOStringArray

Set fmeConfigRow=m_fmeSession.createStringArray

fmeConfigrow.append(“SQL”)

fmeConfigrow.append(“sampleConn”)

fmeConfigrow.append(“SERVER_TYPE”)

fmeConfigrow.append(“ORACLE”)

fmeConfigrow.append(“SERVER_NAME”)

fmeConfigrow.append(“sea_world”)

m_fmeSession.configure(fmeConfigRow)

销毁会话

一旦会话对象工作完毕,你可以销毁它:

Set m_fmeSession=Nothing

这将会释放会话所占用的所有资源。

 

 

参考资料:

《Building Applications with FME Objects》February 2005

转载请注明文章来源 http://www.cnblogs.com/booolee

posted @ 2009-08-16 17:06  电电儿  阅读(720)  评论(0编辑  收藏  举报