西班牙
斯潘4
翻译前后对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安全亚搏在线软件公司|合法的