代码之家  ›  专栏  ›  技术社区  ›  maudulus

命名Talend自定义组件-除tTutorialRow外不工作

  •  1
  • maudulus  · 技术社区  · 11 年前

    我一直在跟踪Talend tutorial 关于“如何创建自定义组件”。如果我逐字逐句地遵循这个示例,那么我的文件命名如下并放在文件夹中 tTutorialRow ,教程工作:

    tTutorialRow_java.xml
    tTutorialRow_messages.properties
    tTutorialRow_begin.javajet
    tTutorialRow_main.javajet
    tTutorialRow_end.javajet
    

    这使用以下代码:

    t教程行_java.xml:

    <COMPONENT>
      <HEADER
        PLATEFORM="ALL"
        SERIAL=""
        VERSION="2.0"
        STATUS="ALPHA"
      
        COMPATIBILITY="ALL"
        AUTHOR="Talend"
        RELEASE_DATE="20070525A"
        STARTABLE="false"
      >
        <SIGNATURE/>
      </HEADER>
      
      <FAMILIES> 
        <FAMILY>Helium</FAMILY> 
      </FAMILIES> 
      
      <DOCUMENTATION>
        <URL/>
      </DOCUMENTATION>
      
      <CONNECTORS>
        <CONNECTOR CTYPE="FLOW" MAX_INPUT="1"/>
        <CONNECTOR CTYPE="ITERATE" MAX_OUTPUT="1" MAX_INPUT="1"/>
        <CONNECTOR CTYPE="SUBJOB_OK" MAX_INPUT="1" />
        <CONNECTOR CTYPE="SUBJOB_ERROR" MAX_INPUT="1" />
        <CONNECTOR CTYPE="COMPONENT_OK" />
        <CONNECTOR CTYPE="COMPONENT_ERROR" />
        <CONNECTOR CTYPE="RUN_IF" />
      </CONNECTORS>
      
      <PARAMETERS>
        <PARAMETER NAME="ADDRESSES" FIELD="TABLE" REQUIRED="true" NUM_ROW="3" NB_LINES="5" SHOW="true">
          <ITEMS BASED_ON_SCHEMA="false">
            <ITEM NAME="USERNAME" />
            <ITEM NAME="DOMAIN" />
          </ITEMS>
        </PARAMETER>
      </PARAMETERS>
      
      <CODEGENERATION/>
      
      <RETURNS>
        <RETURN NAME="NB_LINE" TYPE="id_Integer" AVAILABILITY="AFTER"/>
      </RETURNS>
      
    </COMPONENT>
    

    t自动行消息属性:

    LONG_NAME=Tutorial component
    HELP=org.talend.help.TutorialRow
     
    NB_LINE.NAME=Number of lines
    ADDRESSES.ITEM.USERNAME=Username
    ADDRESSES.ITEM.DOMAIN=Domain
    ADDRESSES.NAME=Addresses
    

    t教程Row_begin.javajet:

    <%@ jet 
        imports="
            org.talend.core.model.process.INode 
            org.talend.core.model.process.ElementParameterParser 
            org.talend.core.model.metadata.IMetadataTable 
            org.talend.core.model.metadata.IMetadataColumn 
            org.talend.core.model.process.IConnection
            org.talend.core.model.process.IConnectionCategory
            org.talend.designer.codegen.config.CodeGeneratorArgument
            org.talend.core.model.metadata.types.JavaTypesManager
            org.talend.core.model.metadata.types.JavaType
            java.util.List 
            java.util.Map       
        " 
    %>
    <% 
        CodeGeneratorArgument codeGenArgument = (CodeGeneratorArgument) argument;
        INode node = (INode)codeGenArgument.getArgument();
        String cid = node.getUniqueName();  
        List<Map<String, String>> lines = (List<Map<String,String>>)ElementParameterParser.getObjectValue(node, "__ADDRESSES__");
    %> 
    java.util.List<String> addresses_<%=cid %> = new java.util.ArrayList<String>();
    <%
      for (int i=0; i<lines.size(); i++) {
        Map<String, String> line = lines.get(i);
    %>
        addresses_<%=cid %>.add(<%= line.get("USERNAME") %> + "@" + <%= line.get("DOMAIN") %>);
    <%
      }
    %>
    int nb_line_<%=cid %> = 0;
    

    t教程Row_main.javajet:

    <%@ jet 
        imports="
            org.talend.core.model.process.INode 
            org.talend.core.model.process.ElementParameterParser 
            org.talend.core.model.metadata.IMetadataTable 
            org.talend.core.model.metadata.IMetadataColumn 
            org.talend.core.model.process.IConnection
            org.talend.core.model.process.IConnectionCategory
            org.talend.designer.codegen.config.CodeGeneratorArgument
            org.talend.core.model.metadata.types.JavaTypesManager
            org.talend.core.model.metadata.types.JavaType
            java.util.List 
            java.util.Map       
        " 
    %>
    <% 
        CodeGeneratorArgument codeGenArgument = (CodeGeneratorArgument) argument;
        INode node = (INode)codeGenArgument.getArgument();
        String cid = node.getUniqueName();  
    %>
        String[] adresses_<%=cid %> = addresses_<%=cid %>.toArray(new String[] {});
         
        System.out.print(nb_line_<%=cid %>++ + ": ");
        for (int i_<%=cid %> = 0; i_<%=cid %> < adresses_<%=cid %>.length; i_<%=cid %>++ )
        {
          System.out.print(adresses_<%=cid %>[i_<%=cid %>]);
          if (i_<%=cid %> < adresses_<%=cid %>.length-1) System.out.print(",");
        }   
        System.out.println();
    

    tTutorialRow_end.javajet:

    <%@ jet 
        imports="
            org.talend.core.model.process.INode 
            org.talend.core.model.process.ElementParameterParser 
            org.talend.core.model.metadata.IMetadataTable 
            org.talend.core.model.metadata.IMetadataColumn 
            org.talend.core.model.process.IConnection
            org.talend.core.model.process.IConnectionCategory
            org.talend.designer.codegen.config.CodeGeneratorArgument
            org.talend.core.model.metadata.types.JavaTypesManager
            org.talend.core.model.metadata.types.JavaType
            java.util.List 
            java.util.Map       
        " 
    %>
    <% 
        CodeGeneratorArgument codeGenArgument = (CodeGeneratorArgument) argument;
        INode node = (INode)codeGenArgument.getArgument();
        String cid = node.getUniqueName();  
    %>   
        globalMap.put("<%=cid %>_NB_LINE",nb_line_<%=cid %>);
    

    如果我从以下位置更改文件名:

    t教程行_java.xml
    t自动行消息属性
    t教程Row_begin.javajet
    t教程Row_main.javajet
    t教程Row_end.javajet
    

    至:

    myProject_java.xml
    myProject_messages.properties
    myProject_begin.javajet
    myProject_main.javajet
    myProject_end.javajet
    

    并将文件夹名称更新为myProject,添加组件将不再有效。如何使用新名称添加组件?

    谢谢

    1 回复  |  直到 5 年前
        1
  •  1
  •   maudulus    11 年前

    答案是,在Talend中合并自定义组件有一定的命名细节/要求。

    以下措施奏效:

    我必须在主文件夹中包含一个名为 tProjectName ,包含:

    tProjectName_begin.javajet
    tProjectName_end.javajet
    tProjectName_icon32.png
    tProjectName_java.xml
    tProjectName_main.javajet
    tProjectName_message.properties
    

    这些文件根本不需要从stackoverflow问题的问题部分的格式进行内部更改。