我正在为talend编写自定义组件。我想在组件设置中添加一个下拉列表。我需要使用给定的主机ID和密码从服务器添加列表项,例如:
用户填写1和2后,将使用主机响应填充下拉列表。
我尝试搜索talend文档中的相关内容但未找到
任何人都可以建议我如何实现此功能,或者可以开发吗?
我做的方法建议创建一个插件并安装到TOS / plugins添加标头扩展名。当我试图将组件推送到调色板Talend时,错误
java.lang.Exception:Component TalendDynamicList加载错误。 因为异常:在org.talend.core.external_component上找到的扩展数量不正确。期望在1和1之间但是找到0。
at org.talend.designer.core.model.components.EmfComponent.load(EmfComponent.java:398)
at org.talend.designer.core.model.components.EmfComponent.<init>(EmfComponent.java:243)
at org.talend.designer.codegen.components.model.ComponentsFactory.loadComponentsFromFolder(ComponentsFactory.java:503)
at org.talend.designer.codegen.components.model.ComponentsFactory.loadComponents(ComponentsFactory.java:296)
at org.talend.designer.codegen.components.model.ComponentsFactory.loadComponentsFromComponentsProviderExtension(ComponentsFactory.java:280)
at org.talend.designer.codegen.components.model.ComponentsFactory.init(ComponentsFactory.java:179)
at org.talend.designer.codegen.components.model.ComponentsFactory.getComponents(ComponentsFactory.java:801)
at org.talend.librariesmanager.model.service.LocalLibraryManager.deployComponentAndExtensionLibs(LocalLibraryManager.java:1133)
at org.talend.librariesmanager.model.service.JavaLibrariesService.syncLibraries(JavaLibrariesService.java:227)
at org.talend.librariesmanager.model.service.LibrariesService.syncLibraries(LibrariesService.java:128)
at org.talend.designer.codegen.CodeGeneratorService.refreshTemplates(CodeGeneratorService.java:156)
at org.talend.componentdesigner.ui.action.provider.PushToPaletteActionProvider$PushToPaletteAction.run(PushToPaletteActionProvider.java:181)
at org.eclipse.jface.action.Action.runWithEvent(Action.java:519)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:595)
at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:511)
at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:420)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4353)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1061)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4172)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3761)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1151)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1032)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:148)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:636)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:579)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
at org.talend.rcp.intro.Application.start(Application.java:243)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
引起:java.lang.RuntimeException:plugin:org.talend.designer.plsap not found
at org.talend.core.model.repository.ExternalNodesFactory.getInstance(ExternalNodesFactory.java:38)
at org.talend.designer.core.model.components.EmfComponent.load(EmfComponent.java:396)
... 41 more
引起:org.talend.commons.exception.IllegalPluginConfigurationException:在org.talend.core.external_component上找到的扩展数量不正确。期望在1和1之间但是找到0。
at org.talend.commons.utils.workbench.extensions.ExtensionImplementationProvider.createInstances(ExtensionImplementationProvider.java:193)
at org.talend.commons.utils.workbench.extensions.ExtensionImplementationProvider.getInstance(ExtensionImplementationProvider.java:143)
at org.talend.core.model.repository.ExternalNodesFactory.getInstance(ExternalNodesFactory.java:36)
... 42 more
如果可能,然后分享插件模板,我试着按照
https://www.talendforge.org/forum/viewtopic.php?id=38165和 http://community.jaspersoft.com/wiki/jaspersoft-etl-plugin-create-talend-plugin
两者都有相同的错误请帮助
答案 0 :(得分:0)
这是可行的,但你必须完全开箱即用。而不是在组件内部解决它,您可以拥有可以与您的组件通信的STUDIO扩展。
我在talend论坛上对此进行了解释,所以这是一个非常复制的粘贴。 http://www.talendforge.org/forum/viewtopic.php?id=9439 https://www.talendforge.org/forum/viewtopic.php?id=38165
由于我觉得我的帖子只是一个更大的开头,我想开一个新主题,在那里我可以发布我的其他发现。 这是我对该主题的原始答案:(随意让它变得更好)
到目前为止,以下似乎有效: 这是基于ssps扩展,我用作基础。为什么?因为它在GUI上有2个参数,它只是&#34;只是&#34;将文件解析为talend元数据。
入门:
EXTENSION="org.talend.designer.plsap"
所以它看起来像:<HEADER EXTENSION="org.talend.designer.plsap" PLATEFORM="ALL" ....>
<PARAMETER NAME="MAP" FIELD="EXTERNAL" NUM_ROW="89">
<DEFAULT />
</PARAMETER>
创建扩展程序JAR!
安装扩展程序JAR!
features\org.talend.tos.components-feature_5.4.1.r111943\features.xml
在这里,我添加了以下条目: <plugin
id="org.talend.designer.plsap"
download-size="0"
install-size="0"
version="5.4.1.r111943"
unpack="false"/>
<studio>\configuration\org.talend.configurator
下创建一个extrabundles.info文件
内容应该是:org.talend.designer.plsap,5.4.1.r111943,插件/ org.talend.designer.plsap_5.4.1.r111943.jar,4,假
它是如何运作的?
每当您在GUI上单击该按钮时,将调用java程序,它可以获取/设置组件的参数。 我还有一些要做/检查: 我不确定是否传递参数NAME = value。 我不确定我们是否可以启动任何类型的外部java程序。
<强>疑难解答:强>
我会尝试从实际的java代码中挖掘一些代码,以便我们与组件进行交互。
答案 1 :(得分:-1)
我在Talend git存储库中找到了解决方案, 您可以按照以下步骤创建自定义组件
转到您的工作区并运行以下命令
mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -DarchetypeGroupId=org.talend.components -DarchetypeArtifactId=input-component-archetypes -DarchetypeVersion=0.20.0-SNAPSHOT -DarchetypeRepository=https://artifacts-oss.talend.com/nexus/content/repositories/TalendOpenSourceRelease/
同时你的命令正在运行它会问你几个问题,比如组件名称和版本等。
完成命令后,它会为您生成输入组件模板
在命令中有 DarchetypeVersion 版本,如果需要不同版本,可以更改
-DarchetypeVersion=0.20.0-SNAPSHOT
就我而言,我正在使用
-DarchetypeVersion=0.16.0-SNAPSHOT
现在只需找到组件的POM.XML文件并运行命令
mvn install
在调色板中找到组件后,下一步就是在组件中添加动态下拉列表。 按照步骤
定义属性
public Property<List<NamedThing>> dropdown = newProperty(new
TypeLiteral<List<NamedThing>>() {
}, "dropdown");
public List<String> items = new ArrayList<>();
这将创建组件配置的下拉列表 4填充值,首先在类型中添加项目 5然后在 refreshLayout函数上添加以下代码
dropdown.setPossibleValues(items);
现在再次构建源代码并在talend插件中安装bundle.jar。 您将看到动态下拉列表