0

我有一个场景使用kettle将参数从pentaho cde传递到pentaho数据集成,然后使用PDI中传递的参数更新表。如何传递参数并在 PDI 中获取传递的参数?

提前致谢!!!

4

2 回答 2

0

您可以这样做,或者您可以只创建一个 CDA 数据源,该数据源采用转换中定义的参数。

参数通过 URL 上常用的 ¶mYOURPARAMNAME=x 语法传递给 CDA。

在转换中,您使用获取变量步骤获取参数。

我错过了什么?

于 2016-01-12T18:09:44.800 回答
0

您将需要使用 Pentaho 插件生成器 SPARKL。

有了它,您可以将转换上传为可调用端点,并使用 CDE 仪表板来调用它。

首先,您需要一个需要参数的转换。在进行更高级的转换之前,您可以先进行测试:

例子: 参数

定义参数并使用 Get Variables 步骤获取


其次,您将在 SPARKL 上创建一个新插件。

闪亮的欢迎屏幕 闪闪发光

为您的插件命名并为其添加一个kettle端点。如果您现在查看您的 pentaho-solutions/system 文件夹,您将拥有一个带有插件名称的新文件夹。打开它并在子文件夹中找到 ktr 文件以将其替换为您的转换。


最后一步是将新仪表板添加到您的插件并进行编辑。如果您现在转到数据源选项卡,请注意名称中带有“端点”的数据源。我们将通过代码访问它们,但很高兴知道它们在这里,因此您也可以从中读取数据,而不仅仅是输入数据。

使用以下代码将新的 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.'); }
                    })

您可以通过监视双服务器日志来跟踪执行情况。

有关来源的更多信息:

Diethard Steiner - 博客
Francesco Corti - 博客
关注这些家伙,他们很棒。

于 2016-01-12T13:32:11.617 回答