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