命名 Talend 自定义组件 - 除了 tTutorialRow 之外不起作用 [英] Naming a Talend Custom Component - Not working except for tTutorialRow
问题描述
我一直在关注 Talend 教程 关于如何创建自定义组件".如果我逐字逐句地遵循示例,将我的文件命名如下并放置在文件夹 tTutorialRow
中,则教程有效:
I have been following the Talend tutorial on "How to Create a Custom Component". If I follow the example verbatim, with my files named as follows and placed inside of the folder tTutorialRow
, the tutorial works:
tTutorialRow_java.xml
tTutorialRow_messages.properties
tTutorialRow_begin.javajet
tTutorialRow_main.javajet
tTutorialRow_end.javajet
这是使用以下代码:
tTutorialRow_java.xml:
tTutorialRow_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>
tTutorialRow_messages.properties:
tTutorialRow_messages.properties:
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
tTutorialRow_begin.javajet:
tTutorialRow_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;
tTutorialRow_main.javajet:
tTutorialRow_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:
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 %>);
如果我更改文件名:
tTutorialRow_java.xml
tTutorialRow_messages.properties
tTutorialRow_begin.javajet
tTutorialRow_main.javajet
tTutorialRow_end.javajet
到:
myProject_java.xml
myProject_messages.properties
myProject_begin.javajet
myProject_main.javajet
myProject_end.javajet
并将文件夹名称更新为 myProject,添加组件不再有效.如何添加具有新名称的组件?
and update the folder name to myProject, adding the component no longer works. How can I add the component with a new name?
谢谢!
推荐答案
答案是在 Talend 中合并自定义组件有某些命名细节/要求.
The answer is that there are certain naming specifics/requirements for incorporating a custom component in Talend.
以下有效:
我必须在我的主文件夹中包含一个名为 tProjectName
的文件夹,其中包含:
I had to include a folder inside of my main folder named tProjectName
, containing:
tProjectName_begin.javajet
tProjectName_end.javajet
tProjectName_icon32.png
tProjectName_java.xml
tProjectName_main.javajet
tProjectName_message.properties
这些文件根本不需要从这个 stackoverflow 问题的问题部分中的格式内部更改.
These files did not have to be changed at all inside from the format in the question section of this stackoverflow question.
这篇关于命名 Talend 自定义组件 - 除了 tTutorialRow 之外不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!