我有一个场景,使用kettle将参数从pentaho cde传递到pentaho数据集成,然后使用PDI中传递的参数更新表。如何在PDI中传递参数并获取传递的参数?
提前感谢!
发布于 2016-01-12 13:32:12
您将需要使用Pentaho插件构建器SPARKL。
有了它,您可以上传一个转换作为可调用的端点,并使用CDE仪表板来调用它。
首先,您需要一个需要参数的转换。在进行更高级的转换之前,您可以使用测试版本进行尝试:
示例:
使用Get Variables步骤定义参数和获取
其次,您将在SPARKL上创建一个新插件。
Sparkl欢迎屏幕
给你的插件起一个名字,然后给它添加一个水壶端点。如果您现在查看您的五角大楼-解决方案/系统文件夹,您将拥有一个带有插件名称的新文件夹。打开它并在子文件夹中找到ktr文件,以将其替换为您的转换。
最后一步是将新的仪表板添加到您的插件中并对其进行编辑。如果您现在转到datasources选项卡,请注意名称中包含'endpoint‘的数据源。我们将通过代码访问它们,但很高兴知道它们在这里,这样您也可以从其中读取数据,而不仅仅是输入数据。
使用以下代码将javascript的新资源添加到CDE布局中:
var myPluginName = {};
(function(myself) {
myself.runEndpoint = function (pluginId, endpoint, opts) {
if (!pluginId && !endpoint) {
Dashboards.log('PluginId or endpointName not defined.');
return false
}
var _opts = {
success: function () {
Dashboards.log(pluginId + ': ' + endpoint + ' ran successfully.')
},
error: function (){
Dashboards.log(pluginId + ': error running ' + endpoint + '.')
},
params: {},
systemParams: {},
type: 'POST',
dataType: 'json'
}
var opts = $.extend( {}, _opts, opts);
var url = Dashboards.getWebAppPath() + '/plugin/' + pluginId + '/api/' + endpoint;
function successHandler (json) {
if (json && json.result == false) {
opts.error.apply(this, arguments);
} else {
opts.success.apply( this, arguments );
}
}
function errorHandler () {
opts.error.apply(this, arguments);
}
if (endpoint != 'renderer/refresh' ) {
var ajaxOpts = {
url: url,
async: true,
type: opts.type,
dataType: opts.dataType,
success: successHandler,
error: errorHandler,
data: {}
}
} else {
var ajaxOpts = {
url: url,
async: true,
type: 'GET',
dataType: opts.dataType,
success: successHandler,
error: errorHandler,
data: {}
}
}
_.each( opts.params , function ( value , key) {
ajaxOpts.data['param' + key] = value;
});
_.each(opts.systemParams , function (value , key) {
ajaxOpts.data[key] = value;
});
$.ajax(ajaxOpts)
}
})(myPluginName);
您可以随心所欲地更改myPluginName,但这使您能够使用任何按钮调用该端点并发送参数。要做到这一点,您可以使用该代码:
myPluginName.runEndpoint(
'myPluginName', // Plugin identifier.
'endpointName', // Put your endpoint name here!
{
params: {
'EXAMPLE_PARAMETER' : foo_bar
},
success: function() { Dashboards.fireChange('refresh', 1); alert('data sent'); },
error: function() { alert('Ops, something went wrong. Check the logs.'); }
})
您可以通过监视双服务器日志来跟踪执行情况。
有关来源的更多信息:
关注这些家伙,他们令人惊叹。
发布于 2016-01-12 18:09:45
您可以这样做,也可以只创建一个CDA数据源,它接受转换中定义的参数。
参数通过URL上常用的¶mYOURPARAMNAME=x语法传递给CDA。
在转换中,您可以使用get variables步骤获取参数。
我错过了什么吗?
https://stackoverflow.com/questions/34742581
复制