# !# !bla

" legal_terms_conditions="" ignore_reader_failure="No" destination_routing_file="" log_file="" source="NONE" requirements="" attr_type_encoding="SDF" max_log_features="200" fme_reprojection_engine="FME" last_save_build="FME(R) 2015.0 (20150113 - Build 15244 - macosx)"> # ! # !# ! # !# ! # !# ! # !# ! # !# ! # !# ! # !# !# !

send_test_email.fmw
2015, Safe Software

Sends a simple test email from FME Server
using the FMEServerNotifier.

" POSITION="62 -1012" TOP_LEFT="62 -1012" BOTTOM_RIGHT="62 -1012" BOUNDING_RECT="62 -1012 0 -0" ORDER="7" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.784314,0.192157" SIZE_POLICY="10" COMMENT_TYPE="REGULAR" ANCHORED_NODE="0">
# !
# ! # !# ! # !# ! # ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# ! # !# ! # !# ! # !This transformer provides an easy method for creating an email message to be sent by the FME Server Notification Service.

" legal_terms_conditions="

Copyright (c) 2012 Safe Software Inc.


Permission is granted to anyone, free of charge, to use, modify and distribute the object code form of this template for any purpose, subject to the following restrictions:


1) The origin of this template and associated FME(R) software must not be misrepresented.

2) This template may only be used in conjunction with a validly licensed copy of FME software.


THIS SOFTWARE IS PROVIDED BY SAFE SOFTWARE INC. "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SAFE SOFTWARE INC. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


" fme_process_group_by="" guid="411718c1-7b1a-4e88-8025-b4ff8df36d1a" fme_process_count="NO_PARALLELISM" zoom_scale="100" fme_document_priorguid="" fme_process_groups_ordered="No" view_position="0 0" doc_dynamic_input_attrs="1" requirements="

FME Server 2013

" usage="

1. Create Topic and Email Subscriber


In the FME Server Web Interface, create a topic for notifications to be sent to and also create a email subscriber that subscribes to this topic.


2. Create a Workspace


Once you file out the the email fields in the transformer you can send the email message in two different ways:


A. Send an email when the workspace completes

  • add a text file writer to the workspace
  • connect this transformer to the text file writer's feature type
  • publish the workspace
  • register it with the Job Submitter, Data Download and/or Notification Service
  • for each service, click the edit button
  • for Topics to Publish (Success), select the topic you created earlier
  • for Notification Writer, select the text file writer you added eariler
  • finish publishing the workspace
  • now the workspace will send an email whenever it is run through the FME Server Service you registered it with.


B. Send an email using a transformer

  • add a FMEServerNotifier transformer to your workflow
  • configure it to publish to the topic that you created earlier
  • for Content, select the text_line_data attribute
  • now the workspace will send an email whenever it is run.
" title="FMEServerEmailGenerator" doc_extents="3985 1128" suppress_upgrade="false" xform_deprecated="No" requirements_keyword="none" doc_top_left="38 -1194" fme_document_guid="411718c1-7b1a-4e88-8025-b4ff8df36d1a" is_visible="false" history="21-03-2013,AaronKoning,Created" category="FME Server"> # ! # !# !# !# !# !# !# !# !# ! # !# ! # !# ! # !# !# ! # ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # ! # !# ! # !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# ! # !# !
# !
# ! # !# !
# !# !START_HEADER # !START_WB_HEADER READER_TYPE NULL READER_KEYWORD NULL_SOURCE NULL_SOURCE_DATASET NULL WRITER_TYPE NULL WRITER_KEYWORD NULL_DEST NULL_DEST_DATASET NULL #!END_WB_HEADER # !END_HEADER LOG_FILENAME " $ (FME_MF_DIR) send_email_attachment.log“LOG_APPEND没有LOG_MAX_FEATURES 200 LOG_MAX_RECORDED_FEATURES 200 LOG_MAX_PRECISION是的FME_REPROJECTION_ENGINE FME FME_IMPLICIT_CSMAP_REPROJECTION_MODE汽车FME_GEOMETRY_HANDLING增强FME_STROKE_MAX_DEVIATION 0 FME_DEBUG MAPPING_FILE BADNEWS FME_STACK_TRACE未归类不相关的DUMP_SCHEMA XSD_VERBOSE LOG_FILTER_MASK 1 # ------------------------------------------------------------------------- MULTI_READER_CONTINUE_ON_READER_FAILURE没有 # ------------------------------------------------------------------------- 宏WORKSPACE_NAME send_email_attachment宏观FME_VIEWER_APP fmedatainspector #------------------------------------------------------------------------- 包括(如果{[信息存在env (FME_TEMP) & &(文件isdirectory $ env (FME_TEMP)]}{设置gVisualizerTemp $ env (FME_TEMP)} elseif{[信息存在env(临时)& &(文件isdirectory $ env(临时)]}{设置gVisualizerTemp $ env(临时)}elseif {$ tcl_platform(平台)= =“unix”}{集gVisualizerTemp "/tmp"} else{设置gVisualizerTemp c:};regsub - {[ ,&]} {$( } {_} wsname WORKSPACE_NAME); set gVisualizerTemp $gVisualizerTemp/${wsname}_[clock format [clock seconds] -format %H%M%S]; puts "MACRO WORKSPACE_TEMP_DIR $gVisualizerTemp"; MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/inspector.ffs MACRO VISUALIZER_SCHEMA_FILE $(WORKSPACE_TEMP_DIR)/inspector.fsc MACRO VISUALIZER_CREATE_SPATIAL_INDEX YES DEFAULT_MACRO WB_CURRENT_CONTEXT # ------------------------------------------------------------------------- Tcl2 proc Creator_CoordSysRemover {} { global FME_CoordSys; set FME_CoordSys {}; } MACRO Creator_XML NOT_ACTIVATED MACRO Creator_CLASSIC NOT_ACTIVATED MACRO Creator_2D3D 2D_GEOMETRY MACRO Creator_COORDS INCLUDE [if {{Geometry Object} == {Geometry Object}} {puts {MACRO Creator_XML *}}] {if {{Geometry Object} == {2D Coordinate List}} {puts {MACRO Creator_2D3D 2D_GEOMETRY};[if {{Geometry Object} == {3D坐标列表}}{puts {MACRO Creator_2D3D 3D_GEOMETRY};{{Geometry Object} == {2D Min/Max Box}} {set comment{我们需要将坐标minX minY maxX maxY转换为一个完整的多边形坐标列表};set splitCoords [split [string trim]{/ /设置字符串长度 }]];如果{[llength $splitCoords] > 4} {set trimmedCoords {};foreach item $splitCoords {if {$item != {}} {lappend trimmedCoords $item}};设置splitCoords trimmedCoords美元;};如果{[llength $splitCoords] != 4} {error {Creator:坐标列表应该是一个以空格分隔的列表,包含4个数字,如'minx miny maxx max ' - ' 的是无效的};};设置minX [lindex $splitCoords 0];set minY [lindex $splitCoords 1]; / /设置lindex $splitCoords 1set maxX [lindex $splitCoords 2]; / /设置索引set maxY [lindex $splitCoords 3]; / /设置maxY"MACRO creatator_coords $minX $minY $minX $max $maxX $max $maxX $minY $minX $minY";{MACRO Creator_2D3D 2D_GEOMETRY};{MACRO Creator_CLASSIC *}}] FACTORY_DEF $(Creator_XML) CreationFactory FACTORY_NAME Creator_XML_Creator CREATE_AT_END no OUTPUT FEATURE_TYPE _____CREATED______ @Geometry(FROM_ENCODED_STRING, xml ? version = 1.0 编码= US_ASCII 独立的= 没有 几何 尺寸= 2 几何 ) FACTORY_DEF $(Creator_CLASSIC) CreationFactory FACTORY_NAME Creator_CLASSIC_Creator $(Creator_2D3D) $(Creator_COORDS) CREATE_AT_END no OUTPUT FEATURE_TYPE _____CREATED______ FACTORY_DEF * TeeFactory FACTORY_NAME creator_clone INPUT FEATURE_TYPE _____CREATED______ NUMBER_OF_COPIES 1 COPY_NUMBER_ATTRIBUTE "_creation_instance" OUTPUT FEATURE_TYPEcreate_created @Tcl2(create_coordsysremover) @CoordSys() fme_feature_type Creator # ------------------------------------------------------------------------- FACTORY_DEF * AttrSetFactory FACTORY_NAME AttributeCreator ATTRSET_CREATE_DIRECTIVES _PROPAGATE_MISSING_FDIV INPUT FEATURE_TYPE Creator_CREATED ATTR attachment1 MyPath ParksData 公园.zip OUTPUT OUTPUT FEATURE_TYPE AttributeCreator_OUTPUT # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "FMEServerEmailGenerator INPUT INPUT Collector" INPUT FEATURE_TYPE AttributeCreator_OUTPUT OUTPUT FEATURE_TYPE FMEServerEmailGenerator_INPUT MACROFMEServerEmailGenerator_WORKSPACE_NAME FMEServerEmailGenerator宏(FMEServerEmailGenerator_WORKSPACE_NAME)美元_XFORMER_NAME FMEServerEmailGenerator宏(FMEServerEmailGenerator_WORKSPACE_NAME) _TRANSFORMER_GROUP宏(FMEServerEmailGenerator_WORKSPACE_NAME)美元___COMPOUND_PARAMETERS宏(FMEServerEmailGenerator_WORKSPACE_NAME) _SUB_DOC_NAME美元FMEServerEmailGenerator MACRO $(FMEServerEmailGenerator_WORKSPACE_NAME)_email_to foo . FMEServerEmailGenerator宏 bar.com宏$(FMEServerEmailGenerator_WORKSPACE_NAME)_email_cc宏$(FMEServerEmailGenerator_WORKSPACE_NAME)_email_from foo@baz.com宏$(FMEServerEmailGenerator_WORKSPACE_NAME)_email_replyto宏$(FMEServerEmailGenerator_WORKSPACE_NAME)_email_subject测试 Email MACRO $(FMEServerEmailGenerator_WORKSPACE_NAME)_email_subscriber_content嗨 你的 FME 服务器宏(FMEServerEmailGenerator_WORKSPACE_NAME) _email_attachment_paths美元 价值 attachment1 DEFAULT_MACRO FMEServerEmailGenerator_WORKSPACE_NAME "" INCLUDE [puts {MACRO WB_OLD_CONTEXT_$(FMEServerEmailGenerator_WORKSPACE_NAME) $(WB_CURRENT_CONTEXT)};{MACRO WB_CURRENT_CONTEXT $(FMEServerEmailGenerator_WORKSPACE_NAME)}] FACTORY_DEF * TeeFactory FACTORY_NAME "$(FMEServerEmailGenerator_WORKSPACE_NAME)_INPUT1422657529 Input Splitter" Input FEATURE_TYPE "$(FMEServerEmailGenerator_WORKSPACE_NAME)_INPUT" # (FMEServerEmailGenerator_WORKSPACE_NAME)_INPUT" # .------------------------------------------------------------------------- Tcl2 proc $ (FMEServerEmailGenerator_WORKSPACE_NAME) _Counter_78f186dc_a8d0_11e4_ba28_60030894943e1_createDomain {in_domainName}{设置域名in_domainName美元;if {{Local} == {Local}} {set xFormName [FME_EncodeText {$(FMEServerEmailGenerator_WORKSPACE_NAME)_Counter_}]; / /设置xFormName设置域名xFormName美元域名;};返回$域名;} FACTORY_DEF * tefactory FACTORY_NAME $(FMEServerEmailGenerator_WORKSPACE_NAME)_Counter INPUT FEATURE_TYPE "$(FMEServerEmailGenerator_WORKSPACE_NAME)_INPUT" OUTPUT FEATURE_TYPE "$(FMEServerEmailGenerator_WORKSPACE_NAME)_Counter_OUTPUT" "_email_feature_id"@Count (fme_encoded @Tcl2(“$ (FMEServerEmailGenerator_WORKSPACE_NAME) _Counter_78f186dc_a8d0_11e4_ba28_60030894943e1_createDomain{柜台}”),“0 ") # ------------------------------------------------------------------------- Tcl2 proc $ (FMEServerEmailGenerator_WORKSPACE_NAME) _ParameterFetcher_doFetch {} {foreach{名字val}{“_email_from {$ ((FMEServerEmailGenerator_WORKSPACE_NAME) _email_from编码)美元}_email_replyto {$ ((FMEServerEmailGenerator_WORKSPACE_NAME) _email_replyto美元)} _email_attachment_paths {$($(FMEServerEmailGenerator_WORKSPACE_NAME)_email_attachment_paths)} _email_cc {$($(FMEServerEmailGenerator_WORKSPACE_NAME)_email_cc)}"} { if { [string match {* *} $val] == 1} {set val [FME_Execute EvaluateExpression {STRING} $val {$(FMEServerEmailGenerator_WORKSPACE_NAME)_ParameterFetcher}];} else {[string match {*FME_CONDITIONAL*} $val] == 1} {set val [FME_Execute EvaluateExpression {string} $val {$(FMEServerEmailGenerator_WORKSPACE_NAME)_ParameterFetcher}];} else {set val [fme_decodet勒索attr $val];};FME_SetAttribute [FME_DecodeText $name] $val}} FACTORY_DEF * TeeFactory FACTORY_NAME $(FMEServerEmailGenerator_WORKSPACE_NAME)_ParameterFetcher INPUT FEATURE_TYPE "$(FMEServerEmailGenerator_WORKSPACE_NAME)_Counter_OUTPUT" OUTPUT FEATURE_TYPE "$(FMEServerEmailGenerator_WORKSPACE_NAME)_ParameterFetcher_OUTPUT"@Tcl2 ($ (FMEServerEmailGenerator_WORKSPACE_NAME) _ParameterFetcher_doFetch ) # ------------------------------------------------------------------------- FACTORY_DEF * AttrSetFactory FACTORY_NAME $ (FMEServerEmailGenerator_WORKSPACE_NAME) _AttributeCreator输入FEATURE_TYPE " $ (FMEServerEmailGenerator_WORKSPACE_NAME) _ParameterFetcher_OUTPUT“ATTR_email_to $(美元(FMEServerEmailGenerator_WORKSPACE_NAME) _email_to) ATTR _email_subject美元($ (FMEServerEmailGenerator_WORKSPACE_NAME) _email_subject) ATTR _email_subscriber_content美元($ (FMEServerEmailGenerator_WORKSPACE_NAME) _email_subscriber_content)输出输出FEATURE_TYPE # " $ (FMEServerEmailGenerator_WORKSPACE_NAME) _AttributeCreator_OUTPUT”------------------------------------------------------------------------- FACTORY_DEF * XMLTemplaterFactory FACTORY_NAME $ (FMEServerEmailGenerator_WORKSPACE_NAME) _JSONTemplater输入CONTROL_FEATURE FEATURE_TYPE " $ (FMEServerEmailGenerator_WORKSPACE_NAME) _AttributeCreator_OUTPUT“输入DATA_FEATURE FEATURE_TYPE$(FMEServerEmailGenerator_WORKSPACE_NAME)_JSONTemplater_DataFeatures RESULT_ATTR text_line_data OUTPUT_XML_HEADER NO CONSECUTIVE_GROUPS NO BUCKET_ATTR_NAME __xml_templater_bucket__ CONTROL_TEMPLATE_EXPR . $(fmeserveremail_generator_workspace_name)_JSONTemplater_DataFeatures RESULT_ATTR text_line_data OUTPUT_XML_HEADER NO CONSECUTIVE_GROUPS email_to fme: get-attribute _email_to email_cc fme: get-attribute _email_cc email_from fme: get-attribute _email_from email_replyto fme: get-attribute _email_replyto email_subject fme: get-attribute _email_subject subscriber_content fme: get-attribute _email_subscriber_content 输出XML_DOCUMENT FEATURE_TYPE”(FMEServerEmailGenerator_WORKSPACE_NAME) _JSONTemplater_OUTPUT美元 " # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME $ (FMEServerEmailGenerator_WORKSPACE_NAME) _Tester输入FEATURE_TYPE " $ (FMEServerEmailGenerator_WORKSPACE_NAME) _JSONTemplater_OUTPUT”测试_email_attachment_paths ATTRIBUTE_IS_EMPTY 编码BOOLEAN_OPERATOR或输出通过FEATURE_TYPE " $ (FMEServerEmailGenerator_WORKSPACE_NAME) _Tester_PASSED“输出FEATURE_TYPE失败”(FMEServerEmailGenerator_WORKSPACE_NAME) _Tester_FAILED美元 " # ------------------------------------------------------------------------- Tcl2集$ (FMEServerEmailGenerator_WORKSPACE_NAME) _AttributeSplitter_78f1a162_a8d0_11e4_ba28_60030894943e1_splitDelim [FME_DecodeText { });如果{[regexp {^ ([1 - 9] [0 - 9] * s) + $}[设置(FMEServerEmailGenerator_WORKSPACE_NAME) _AttributeSplitter_78f1a162_a8d0_11e4_ba28_60030894943e1_splitDelim美元]]}{设置$ (FMEServerEmailGenerator_WORKSPACE_NAME) _AttributeSplitter_78f1a162_a8d0_11e4_ba28_60030894943e1_splitWidths[分裂[regsub -{新元}{ } {}] s];proc $(FMEServerEmailGenerator_WORKSPACE_NAME)_AttributeSplitter_doSplit {} {global $(FMEServerEmailGenerator_WORKSPACE_NAME)_AttributeSplitter_78f1a162_a8d0_11e4_ba28_60030894943e1_splitWidths;set source [FME_GetAttribute {"_email_attachment_paths"}];设置attrNum 0;设置listName {_email_attachment_path_list};设置attrPos 0;foreach width [set $(FMEServerEmailGenerator_WORKSPACE_NAME)_AttributeSplitter_78f1a162_a8d0_11e4_ba28_60030894943e1_splitWidths]{设置endPos [expr $attrPos + $width - 1];设置位[字符串范围$source $attrPos $endPos];FME_SetAttribute "$listName{$attrNum}"[字符串修剪$位];增加美元attrPos宽度; incr attrNum; }; }; } else { proc $(FMEServerEmailGenerator_WORKSPACE_NAME)_AttributeSplitter_doSplit {} { global $(FMEServerEmailGenerator_WORKSPACE_NAME)_AttributeSplitter_78f1a162_a8d0_11e4_ba28_60030894943e1_splitDelim; set delim [set $(FMEServerEmailGenerator_WORKSPACE_NAME)_AttributeSplitter_78f1a162_a8d0_11e4_ba28_60030894943e1_splitDelim]; set delimLength [string length $delim]; set source [FME_GetAttribute {"_email_attachment_paths"}]; set keepEmptyParts [string equal {No} {No}]; set bits {}; set startIndex 0; set nextIndex [string first $delim $source $startIndex]; while {$nextIndex >= 0} { set part [string range $source $startIndex [expr $nextIndex-1]]; if { $keepEmptyParts || $part != \"\" } { lappend bits $part; }; set startIndex [expr $nextIndex + $delimLength]; set nextIndex [string first $delim $source $startIndex]; }; set lastPart [string range $source $startIndex end]; if { $keepEmptyParts || $lastPart != \"\" } { lappend bits $lastPart }; set listName {_email_attachment_path_list}; set attrNum 0; foreach bit $bits { FME_SetAttribute "$listName{$attrNum}" [string trim $bit]; incr attrNum; } } } FACTORY_DEF * TeeFactory FACTORY_NAME $(FMEServerEmailGenerator_WORKSPACE_NAME)_AttributeSplitter INPUT FEATURE_TYPE "$(FMEServerEmailGenerator_WORKSPACE_NAME)_Tester_FAILED" OUTPUT FEATURE_TYPE "$(FMEServerEmailGenerator_WORKSPACE_NAME)_AttributeSplitter_OUTPUT" @Tcl2($(FMEServerEmailGenerator_WORKSPACE_NAME)_AttributeSplitter_doSplit) # ------------------------------------------------------------------------- FACTORY_DEF * ElementFactory FACTORY_NAME $(FMEServerEmailGenerator_WORKSPACE_NAME)_ListExploder INPUT FEATURE_TYPE "$(FMEServerEmailGenerator_WORKSPACE_NAME)_AttributeSplitter_OUTPUT" LIST_NAME "_email_attachment_path_list{}" ELEMENT_NUMBER_FIELD "_element_index" CLONE_GEOMETRY MODE LEAN OUTPUT ELEMENT FEATURE_TYPE "$(FMEServerEmailGenerator_WORKSPACE_NAME)_ListExploder_LIST_FOUND" @RemoveAttributes(ElementFactory.baseCloned) # ------------------------------------------------------------------------- Tcl2 proc $(FMEServerEmailGenerator_WORKSPACE_NAME)_StringConcatenator_78f1b0a8_a8d0_11e4_ba28_60030894943e1_doSetAttr {attrText} { FME_SetAttribute [FME_DecodeText {_email_attachment_json}] [FME_DecodeText $attrText] } FACTORY_DEF * TeeFactory FACTORY_NAME $(FMEServerEmailGenerator_WORKSPACE_NAME)_StringConcatenator INPUT FEATURE_TYPE "$(FMEServerEmailGenerator_WORKSPACE_NAME)_ListExploder_LIST_FOUND" OUTPUT FEATURE_TYPE "$(FMEServerEmailGenerator_WORKSPACE_NAME)_StringConcatenator_OUTPUT" @Tcl2("$(FMEServerEmailGenerator_WORKSPACE_NAME)_StringConcatenator_78f1b0a8_a8d0_11e4_ba28_60030894943e1_doSetAttr {@EvaluateExpression(STRING_ENCODED, email_attachment 价值 _element_index 价值 _email_attachment_path_list , (FMEServerEmailGenerator_WORKSPACE_NAME) _StringConcatenator美元 )} ") # ------------------------------------------------------------------------- DEFAULT_MACRO $ (FMEServerEmailGenerator_WORKSPACE_NAME) _Aggregator_BREAK_ATTR包括[如果{“不”= =“是”}{{宏(FMEServerEmailGenerator_WORKSPACE_NAME) _Aggregator_BREAK_ATTR美元BREAK_BEFORE_FIELD_CHANGE _email_feature_id}}] FACTORY_DEF * AggregateFactory FACTORY_NAME美元(FMEServerEmailGenerator_WORKSPACE_NAME) _Aggregator输入FEATURE_TYPE " $ (FMEServerEmailGenerator_WORKSPACE_NAME) _StringConcatenator_OUTPUT”模式ONE_LEVEL GROUP_BY _email_feature_id美元($ (FMEServerEmailGenerator_WORKSPACE_NAME) _Aggregator_BREAK_ATTR)ACCUMULATE_ATTRIBUTES是CONCATENATE_FIELDS _email_attachment_json分隔符 PRODUCE_MULTIS YES OUTPUT AGGREGATE FEATURE_TYPE "$(FMEServerEmailGenerator_WORKSPACE_NAME)_Aggregator_AGGREGATE" @Geometry(SET_TO_CONTAIN_INDIVIDUAL_GEOMS,没有 ) # ------------------------------------------------------------------------- 宏casemac包括(如果{{没有}= ={没有}}{把{宏casemac查看nocase}}] Tcl2 proc美元(FMEServerEmailGenerator_WORKSPACE_NAME) _StringReplacer_2_78f1c052_a8d0_11e4_ba28_60030894943e1_replacer {findText replaceText invalidValue} {attrs[分裂{}] \“_email_attachment_json \”;设置findValue [FME_DecodeText $findText];set replacetvalue [FME_DecodeText $replaceText]; / /设置FME_DecodeTextforeach attr $attrs {set attrVal [FME_GetAttribute $attr]; / /设置属性设置noMatch真;if {{NO} == {YES}} {set newAttrVal [regsub $(casemac) -all——$findValue $attrVal $replaceValue]; / /设置新值} else {set newAttrVal [string map $(casemac) [list $findValue $replaceValue] $attrVal]; / /设置新值}; if { $newAttrVal ne $attrVal } { set noMatch false; FME_SetAttribute $attr $newAttrVal; }; if {$noMatch} { if { $invalidValue == {FME_NULL_VALUE} } { FME_SetAttributeNull $attr; } elseif { $invalidValue != {_FME_NO_OP_} } { FME_SetAttribute $attr [FME_DecodeText $invalidValue]; }; }; }; } FACTORY_DEF * TeeFactory FACTORY_NAME $(FMEServerEmailGenerator_WORKSPACE_NAME)_StringReplacer_2 INPUT FEATURE_TYPE "$(FMEServerEmailGenerator_WORKSPACE_NAME)_Aggregator_AGGREGATE" OUTPUT FEATURE_TYPE "$(FMEServerEmailGenerator_WORKSPACE_NAME)_StringReplacer_2_OUTPUT" @Tcl2("$(FMEServerEmailGenerator_WORKSPACE_NAME)_StringReplacer_2_78f1c052_a8d0_11e4_ba28_60030894943e1_replacer { } { } {_FME_NO_OP _}") # ------------------------------------------------------------------------- 宏casemac包括(如果{{没有}= ={没有}}{把{宏casemac查看nocase}}] Tcl2 proc美元(FMEServerEmailGenerator_WORKSPACE_NAME) _StringReplacer_78f1c8a4_a8d0_11e4_ba28_60030894943e1_replacer {findText replaceText invalidValue} {attrs[分裂{}] \“text_line_data \”;设置findValue [FME_DecodeText $findText];set replacetvalue [FME_DecodeText $replaceText]; / /设置FME_DecodeTextforeach attr $attrs {set attrVal [FME_GetAttribute $attr]; / /设置属性设置noMatch真;if {{NO} == {YES}} {set newAttrVal [regsub $(casemac) -all——$findValue $attrVal $replaceValue]; / /设置新值} else {set newAttrVal [string map $(casemac) [list $findValue $replaceValue] $attrVal]; / /设置新值};如果{$newAttrVal ne $attrVal} {set noMatch false; FME_SetAttribute $attr $newAttrVal; }; if {$noMatch} { if { $invalidValue == {FME_NULL_VALUE} } { FME_SetAttributeNull $attr; } elseif { $invalidValue != {_FME_NO_OP_} } { FME_SetAttribute $attr [FME_DecodeText $invalidValue]; }; }; }; } FACTORY_DEF * TeeFactory FACTORY_NAME $(FMEServerEmailGenerator_WORKSPACE_NAME)_StringReplacer INPUT FEATURE_TYPE "$(FMEServerEmailGenerator_WORKSPACE_NAME)_StringReplacer_2_OUTPUT" OUTPUT FEATURE_TYPE "$(FMEServerEmailGenerator_WORKSPACE_NAME)_StringReplacer_OUTPUT" @Tcl2("$(FMEServerEmailGenerator_WORKSPACE_NAME)_StringReplacer_78f1c8a4_a8d0_11e4_ba28_60030894943e1_replacer { } {@EvaluateExpression (STRING_ENCODED 价值 _email_attachment_json ,$(FMEServerEmailGenerator_WORKSPACE_NAME)_StringReplacer)} {_FME_NO_OP_}") FACTORY_DEF * TeeFactory FACTORY_NAME "$(FMEServerEmailGenerator_WORKSPACE_NAME)_OUTPUT1422657529 Output Collector" INPUT FEATURE_TYPE "$(FMEServerEmailGenerator_WORKSPACE_NAME)_StringReplacer_OUTPUT" INPUT FEATURE_TYPE .$(FMEServerEmailGenerator_WORKSPACE_NAME)_Tester_PASSED" OUTPUT FEATURE_TYPE "$(FMEServerEmailGenerator_WORKSPACE_NAME)_OUTPUT" INCLUDE [puts {MACRO WB_CURRENT_CONTEXT $(WB_OLD_CONTEXT_$(FMEServerEmailGenerator_WORKSPACE_NAME)}] FACTORY_DEF * tefactory FACTORY_NAME "FMEServerEmailGenerator OUTPUT OUTPUT Renamer/Nuker" INPUT FEATURE_TYPE .FMEServerEmailGenerator_OUTPUT OUTPUT FEATURE_TYPE FMEServerEmailGenerator_OUTPUT # ------------------------------------------------------------------------- FACTORY_DEF * ServerFactory FACTORY_NAME FMEServerNotifier_2 INPUT FEATURE_TYPE FMEServerEmailGenerator_OUTPUT ACTION PUBLISH_TO_TOPIC HOST "bp-fmeserver15" USERNAME "admin" PASSWORD“fme_decrypt (MDowfCN8I3xcG3GQ / TeRRUJUZ5LDPtdvpscbh7Nj9gG / INBkAGA + fkaDrNbhZtfa3rmkUUrCxKWaAFwiYsKgWJNl / 0 mrpxuup + IT2c + Qhh26JEZtUWAmpuoaQCdQ3ykKWm2zaoAM5MBCGaGEuYe + 6 as07 / nLNRJwqp1jdwP1FgVCbXRvZtWfKjEZlNJYQ + EicVc6cv2DxCYJyTljvXwF8mKxenML6FKJiHARQCO8OMJidKKZQJP1SeYIhqB0YrtGw4cGV2ZquQKifvRjB2Tl6wBAWDmeCg + R1jvft1tR17SISyTDv77K + mV80w2aaUSgybbF7coM0BrQPcpehfjlW + YxV73 + 9 mpmfxkqeznz22t8mjor57o44p8u2nqcw35hifbs0ovp9vkky0d / WzGRevseyX1pIEWJSQSFwkJVhiyXavMDz5E5SEYgTZHfVeGBXCDuIEEbfRRkPU5yD2nw2ZAVimDRD7UQhEEY6PosGqU17He4y35WEfAggQ40 + EKuupOQSZRsKotTTqlYGHJtX49ymuKqfyZzOAUSUzDMcj8gfDgzOCcuhw2sK3fJaMszSDXOfIgSmUXD6rTaCoxHY + h / hboC7Z + 0 / hhMGeYkOvjypKZmolT3z71kj8jIen91FFqS / c5 + h2rOHLGISeYzIrUXaqLLq49a82UQ9mlvVe0NbiL机汇/ + PfDUDOtw5h2Bkb2Zs1/7O2YwFOgjGuo5Zsau3pt + EAThx7xmF9ICm9WAX5 / pZ0MRCzng5QDHAjMMg8qPJdaoLSBGD0cdhbrFnrCE6CJCaup04dUSLsqsCJL19wI + yDbTady42NWGaqAnDcuaI9s4ShAGG2reBYlhS5QwTwVhQVhP + lSVN1c5axSiwfrBTRCiGGDQC + RPK3CKiRAYTm83mDjAP8M23 + kObtbDlRuqct7Gg)”TOPIC "SEND_EMAIL" BODY "@EvaluateExpression(FDIV,STRING_ENCODED, 价值 text_line_data FMEServerNotifier_2)”FEATURE_TYPE FMEServerNotifier_2_OUTPUT OUTPUT REJECTED FEATURE_TYPE FMEServerNotifier_2_ FACTORY_DEF * tefactory FACTORY_NAME "FMEServerNotifier_2 . 输出Nuker" INPUT FEATURE_TYPE FMEServerNotifier_2_ # ------------------------------------------------------------------------- # 设置指令所有通过meta属性添加到功能。#我们这样做是为了让用户看到所有可能的信息在查看#功能。READER_META_ATTRIBUTES fme_feature_type fme_dataset fme_basename #假设已经设置并创建了工作区临时目录。ControlDefs::writeVisualizerTempDir DEFAULT_MACRO WORKSPACE_TEMP_DIR INCLUDE [if{[字符串长度{}]> 0}{set catter "";设置逗号“”;foreach attr {} {set catter "$catter$comma@Value(\"$attr\")";设置逗号“,_,”;};"MACRO CATMAC _@Concatenate($catter)" ; } else { puts "MACRO CATMAC " ; }; set safeName "[regsub -all {[^a-zA-Z0-9]} {FMEServerNotifier_2_Output} _]_[expr round(rand() * 1000000)]_[clock clicks -milliseconds]"; puts "MACRO SAFE_FFS_NAME $safeName"; ] # Make the temporary directory that the FFS files will live in. FACTORY_DEF * CreationFactory FACTORY_NAME FMEServerNotifier_2_Output_DirCreator OUTPUT FEATURE_TYPE __nukeme__ @Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}") FACTORY_DEF * TeeFactory FACTORY_NAME FMEServerNotifier_2_Output_DirCreatorCleanerUpper INPUT FEATURE_TYPE __nukeme__ # Send raster, point cloud and vector features down different paths to prepare # them for viewing FACTORY_DEF * TestFactory FACTORY_NAME FMEServerNotifier_2_Output_FeatureDirector INPUT FEATURE_TYPE FMEServerNotifier_2_OUTPUT TEST &fme_type == "fme_raster" OUTPUT FAILED FEATURE_TYPE FMEServerNotifier_2_Output___NotRasterFeatures___ OUTPUT PASSED FEATURE_TYPE FMEServerNotifier_2_Output___RasterFeatures___ FACTORY_DEF * TestFactory FACTORY_NAME FMEServerNotifier_2_Output___FeatureDirector1 INPUT FEATURE_TYPE FMEServerNotifier_2_Output___NotRasterFeatures___ TEST &fme_type == "fme_point_cloud" OUTPUT FAILED FEATURE_TYPE FMEServerNotifier_2_Output___VectorFeatures___ OUTPUT PASSED FEATURE_TYPE FMEServerNotifier_2_Output___PointCloudFeatures___ # Vector features simply may get their colors overridden FACTORY_DEF * TeeFactory FACTORY_NAME FMEServerNotifier_2_Output_VectorSetterUpper INPUT FEATURE_TYPE FMEServerNotifier_2_Output___VectorFeatures___ OUTPUT FEATURE_TYPE __viewme__ # Point Cloud Features Might Need to be thinned # Note that we don't call the ThinPointCloud function directly, but rather # do it through TCL. This should allow this transformer to be used with a # Desktop license, even though ThinPointCloud requires Professional. Tcl2 proc FMEServerNotifier_2_Output_c285cb96_a8d0_11e4_ba28_60030894943e0_thinPointCloud {} { if {[string equal {NO_THINNING} {KEEPNPOINT}]} { FME_Execute ThinPointCloud NO_THINNING "\" \ ";} elseif {[string equal {no_thin} {MAXNUMPOINTS}]} {FME_Execute ThinPointCloud no_thin "\" \ ";} elseif {[string equal {no_thin} {FIRSTNPOINTS}]} {FME_Execute ThinPointCloud no_thin "\" \ ";} elseif {[string equal {no_thin} {LASTNPOINTS}]} {FME_Execute ThinPointCloud no_thin "\" \ ";};} FACTORY_DEF * TeeFactory FACTORY_NAME fmeservernotifier_2_output__pointcloudthinner INPUT FEATURE_TYPE fmeservernotifier_2_output__pointcloudfeatures___ OUTPUT FEATURE_TYPE __viewme__ @Tcl2("FMEServerNotifier_2_Output_c285cb96_a8d0_11e4_ba28_60030894943e0_thinPointCloud") Tcl2 proc .fmeservernotifier_2_output_c285cb96_a8d0_11e4_ba28_60030894943e0_prepareeraster {subsetStartRow subsetNumRows subsetStartCol subsetNumCols} {set useDI [string equal -nocase {$(FME_VIEWER_APP)} {fmedatainspector}];如果{!$useDI} {FME_Execute ApplyRasterRotation BILINEAR;};设置doResample [string equal {NoReduction} {Resample}];set doSubset [string equal {NoReduction} {Subset}]; / /设置一个子集设置doBounds [string equal {NoReduction} {BoundingBoxOnly}]; if {$doBounds} { FME_Execute GeometryType fme_polygon; } elseif {$doResample || $doSubset} { set comment { First, we need to prefix all the attributes. This is done because we are going to call @RasterProperties, and we want to make sure it doesn't overwrite any existing attributes. }; set kAttrPrefix "."; set allNames [FME_AttributeNames]; foreach oldName $allNames { set newName $kAttrPrefix; append newName $oldName; FME_RenameAttribute $newName $oldName; }; FME_Execute RasterProperties RASTER; if {$doResample} { set oldNumCols [FME_GetAttribute _num_columns]; set oldNumRows [FME_GetAttribute _num_rows]; set oldSpacingX [FME_GetAttribute _spacing_x]; set oldSpacingY [FME_GetAttribute _spacing_y]; set kMinNumCells 32; set kMaxNumCells 512; set comment { We will only resample if both dimensions are greater than the minimum num cells, and at least one is greater than the maximum. }; if {$oldNumRows > $kMinNumCells && $oldNumCols > $kMinNumCells && ($oldNumRows > $kMaxNumCells || $oldNumCols > $kMaxNumCells)} { set newSpacingX 1.0; set newSpacingY 1.0; if {$oldNumRows > $oldNumCols} { set comment { If we have more rows than columns, we need to choose a spacing that reduces the number of rows to the maximum we've chosen. }; set newSpacingY [expr 1.0 * $oldNumRows * $oldSpacingY / $kMaxNumCells]; set newSpacingX [expr 1.0 * $newSpacingY / $oldSpacingY * $oldSpacingX]; set comment { Now we need to check if doing this will result in the columns going below the minimum. If so, choose the spacing such that we only go down to the minimum (and not past). }; set newNumCols [expr $oldNumCols * $oldSpacingX / $newSpacingX]; if {$newNumCols < $kMinNumCells} { set newSpacingX [expr 1.0 * $oldNumCols * $oldSpacingX / $kMinNumCells]; set newSpacingY [expr 1.0 * $newSpacingX / $oldSpacingX * $oldSpacingY]; }; } else { set comment { This is identical to the above case, except the roles of rows and cols are reversed. }; set newSpacingX [expr 1.0 * $oldNumCols * $oldSpacingX / $kMaxNumCells]; set newSpacingY [expr 1.0 * $newSpacingX / $oldSpacingX * $oldSpacingY]; set newNumRows [expr $oldNumRows * $oldSpacingY / $newSpacingY]; if {$newNumRows < $kMinNumCells} { set newSpacingY [expr 1.0 * $oldNumRows * $oldSpacingY / $kMinNumCells]; set newSpacingX [expr 1.0 * $newSpacingY / $oldSpacingY * $oldSpacingX]; }; }; FME_Execute ResampleRaster CELL_SIZE $newSpacingX $newSpacingY NearestNeighbor; }; } elseif {$doSubset} { set comment { Get the value of some strings that may be attributes or constants. Note that we pass in the attribute prefix we're using, because if one does turn out to be an attribute, it won't actually be the exact name in the string (since we renamed all our attributes above). }; set rasterNumRows [FME_GetAttribute _num_rows]; set rasterNumCols [FME_GetAttribute _num_columns]; set comment { Only do subsetting if the specified start position is actually within the raster. }; if {$subsetStartRow < $rasterNumRows && $subsetStartCol < $rasterNumCols} { set comment { Now bound the subset to the size of the raster, so that we don't create padding. }; if {[expr $subsetStartRow + $subsetNumRows] > $rasterNumRows} { set subsetNumRows [expr $rasterNumRows - $subsetStartRow]; }; if {[expr $subsetStartCol + $subsetNumCols] > $rasterNumCols} { set subsetNumCols [expr $rasterNumCols - $subsetStartCol]; }; FME_Execute SubsetRaster $subsetStartRow $subsetNumRows $subsetStartCol $subsetNumCols; }; }; set comment { Remove all the attributes added by @RasterProperties and remove the prefix from the real attributes. We assume they all start with an underscore. }; FME_Execute RemoveAttributes fme_regexp_match {^_}; foreach oldName $allNames { set newName $kAttrPrefix; append newName $oldName; FME_RenameAttribute $oldName $newName; }; }; } FACTORY_DEF * TeeFactory FACTORY_NAME FMEServerNotifier_2_Output_RasterSetterUpper INPUT FEATURE_TYPE FMEServerNotifier_2_Output___RasterFeatures___ OUTPUT FEATURE_TYPE __viewme__ @Tcl2("FMEServerNotifier_2_Output_c285cb96_a8d0_11e4_ba28_60030894943e0_prepareRaster { } { } { } { # FMEServerNotifier_2_Output_c285cb96_a8d0_11e4_ba28_60030894943e0_VIS_FEAT_TYPE更改正在可视化的特性的特性类型#。DEFAULT_MACRO FMEServerNotifier_2_Output_c285cb96_a8d0_11e4_ba28_60030894943e0_VIS_FEAT_TYPE FMEServerNotifier_2_Output$(CATMAC) DEFAULT_MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/$(亚搏在线SAFE_FFS_NAME). DEFAULT_MACRO FMEServerNotifier_2_Output$(CATMAC) DEFAULT_MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/$(SAFE_FFS_NAME)。数据检查器将限制它在WIN32上读取的最大特性数量,因此我们将相应地限制使用MAX_FEATURES_TO_RECORD指令记录的#特性数量。FACTORY_DEF * RecorderFactory FACTORY_NAME FMEServerNotifier_2_Output_Recorder INPUT FEATURE_TYPE __viewme__ _wb_termination_feature Yes @FeatureType(TERMINATOR_@Value(_wb_termination_xformer)) INPUT FEATURE_TYPE __viewme__ @FeatureType($(FMEServerNotifier_2_Output_c285cb96_a8d0_11e4_ba28_60030894943e0_VIS_FEAT_TYPE)) FEATURE_FILE" $ (VISUALIZER_FEATURE_FILE) "CREATE_SPATIAL_INDEX " $ (VISUALIZER_CREATE_SPATIAL_INDEX) "检查员" $ (VISUALIZER_CREATE_SPATIAL_INDEX) "FSC_SCHEMA _creation_instance、varchar 255 、attachment1 varchar 255 、_email_feature_id varchar 255 、_email_from varchar 255 、_email_replyto varchar 255 、_email_attachment_paths varchar 255 、_email_cc varchar 255 、_email_to varchar 255 、_email_subject varchar 255 、_email_subscriber_content varchar 255 、text_line_data varchar 255 、_email_attachment_path_list varchar 255 、_element_index varchar 255 、_email_attachment_json varchar 255 、_notifier_topic varchar 255 、_notifier_content varchar 255 模式记录RECORD_DIRECTLY_TO_DISK是的MAX_FEATURES_TO_RECORD WIN32 2000000 # ------------------------------------------------------------------------- FACTORY_DEF * RoutingFactory FACTORY_NAME“目的地功能类型路由相关器”输入FEATURE_TYPE *输出路由FEATURE_TYPE * @FeatureType(编码,@ value (__wb_out_feat_type__))@RemoveAttributes (__wb_out_feat_type__)输出NOT_ROUTED FEATURE_TYPE __nuke_me__ @Tcl2(“FME_StatMessage 818059 [FME_GetAttribute fme_template_feature_type) 818060 818061 fme_warn ") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME“最终输出核武器”输入FEATURE_TYPE __nuke_me__ #------------------------------------------------------------------------- FACTORY_DEF * CreationFactory CREATE_AT_END OUTPUT FEATURE_TYPE __NUKEME__ @TCL("if [file exists {$(WORKSPACE_TEMP_DIR)}] {set files [glob -nocomplain -directory {$(WORKSPACE_TEMP_DIR)} -tails *.ffs]; if {[llength $files] == 1} { set theFile {$(WORKSPACE_TEMP_DIR)/}; append theFile [lindex $files 0]; eval FME_Execute System \173\042$(FME_HOME_UNIX)/fmedatainspector\042 --visualizer --single-application --delete-on-close --no-source-prompt -f FFS $theFile & \175; } elseif { [llength $files] == 0 } { catch { file delete -force {$(WORKSPACE_TEMP_DIR)} }; } else { set filesNoExt {}; set lastfile {}; foreach {fileName} [lsort $files] { set fileNoExt [string trimright $fileName {.ffs}]; if [regexp {(.*)_[0-9]*$} $fileNoExt wholething fileNoExtBase] { if { $fileNoExtBase == $lastfile } { continue } }; set lastfile $fileNoExt; lappend filesNoExt $fileNoExt }; eval FME_Execute System \173\042$(FME_HOME_UNIX)/fmedatainspector\042 --visualizer --single-application --delete-on-close --no-source-prompt -d {$(WORKSPACE_TEMP_DIR)} -a ffs -f FFS $filesNoExt & \175; }; }; ") FACTORY_DEF * TeeFactory INPUT FEATURE_TYPE __NUKEME__