span8
span4
在翻译之前和之后控制FME的愿望已经讨论了很多年。人们希望在翻译开始之前进行不同的设置,在翻译结束后对日志文件或其他翻译工件进行不同的后处理。
最后,这是可能的,通过非常强大的预处理和后处理功能,提供了在工作空间被处理之前和/或之后执行脚本的能力。脚本可以访问许多翻译工件(如计数、日志文件等)。
可能性是巨大的;一些例子应用是:
启动脚本在映射文件完全解析之后、日志文件打开之后、但是在读取器开始处理之前执行。关机脚本在写入器完成其处理并关闭日志文件之后执行(或者在发生翻译错误而终止的情况下,在进行清理并关闭日志文件之后执行)。
启动和关闭脚本可以使用Tcl或Python。
FME有一个内置的Tcl解释器,因此不需要进一步安装。
如果脚本包含过程定义,则脚本必须调用它定义的过程,否则将不会执行过程本身,也不会进行任何处理。
您可以直接在工作台中定义脚本导航窗格.Workbench甚至为编写脚本提供了一个特殊的编辑窗口。
上面:导航器窗格中的Tcl和Python脚本指令。
上面:Tcl结束脚本指令设置对话框。单击突出显示的按钮以打开脚本编辑器。
上面:脚本编辑器。
关闭python脚本可以通过使用导入fmeobjects.
对于TCL脚本,不能访问FME Objects,但可以通过“exec”命令(TCL)启动新进程,这些新进程可能涉及FME对象TCL,而不会发生任何冲突。
启动和关闭脚本是不在FDS(自定义格式)中有效。也有一些架构上的原因需要保持这种方式。
当然,它们可以在映射文件或工作区中使用,而工作区本身采用自定义格式。
可以在启动或关闭脚本中访问已发布的参数。
这个FME_宏值数组/dictionary保存这些(按宏名索引,value是实际值),因此在Tcl中,可以通过如下行获取它们:
FME_END_TCL放入[array names FME_MacroValues];
FME_BEGIN_TCL放入$FME_宏值(DestDataset);
在Python中,您可以像访问任何其他字典一样访问它,例如:
对于名称,在FME_MacroValues.iteritems()中为val:logger.log(“%s:%s”%(名称,val))
所以,就像我祖父常说的,我的许多发明“有什么用”?爷爷,这个有很多用途,这里有一些实例.
有关启动和关闭脚本中可用变量的完整列表,请参阅帮助:启动和关闭Python脚本和启动和关闭Tcl脚本.
将设置从启动传递到关闭
Tcl启动和关闭脚本共享一个Tcl解释器,这意味着启动脚本可以设置Tcl全局变量,这些变量稍后可用于关闭脚本。
但是,这个解释器与FME中使用的任何其他Tcl解释器完全不同;因此,例如,不能将设置从@TCL和@Tcl2 FME函数传递给关闭脚本。
如果[catch{set outputFile[open c:/temp/log file.log{RDWR CREAT EXCL}]{puts stderr“ERROR-cannot open the log file.”}否则{set gtransationstarttime[clock format[clock seconds]]将$outputFile“翻译开始:$gtransationstarttime close$outputFile}另一方面,为了故意停止翻译,即使脚本没有引起错误,也可以使用TCL的“error”命令强制FME停止处理,例如:
如果{[file存在$OutPuffEnEnabe] }{{输出文件已经存在——选择一个不同的目标文件名。} }Python版本是:
如果OS.PATION存在导入操作系统(OuttupFielNeNe):引发异常(“输出文件已经存在-选择一个不同的目标文件名”)。
FME_END_TCL exec FME.exe anotherTranslation.fmw 2>编号:
一组全面的Tcl示例可以是在这里找到.
©2019安全亚搏在线软件公司法律