首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将参数从CDE传递到PDI pentaho

将参数从CDE传递到PDI pentaho
EN

Stack Overflow用户
提问于 2016-01-12 19:34:26
回答 2查看 2.2K关注 0票数 0

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

提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2016-01-12 21:32:12

您将需要使用Pentaho插件构建器SPARKL。

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

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

示例:

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

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

Sparkl欢迎屏幕

给你的插件起一个名字,然后给它添加一个水壶端点。如果您现在查看您的五角大楼-解决方案/系统文件夹,您将拥有一个带有插件名称的新文件夹。打开它并在子文件夹中找到ktr文件,以将其替换为您的转换。

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

使用以下代码将javascript的新资源添加到CDE布局中:

代码语言:javascript
运行
复制
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,但这使您能够使用任何按钮调用该端点并发送参数。要做到这一点,您可以使用该代码:

代码语言:javascript
运行
复制
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 - Blog

Francesco Corti - Blog

关注这些家伙,他们令人惊叹。

票数 0
EN

Stack Overflow用户

发布于 2016-01-13 02:09:45

您可以这样做,也可以只创建一个CDA数据源,它接受转换中定义的参数。

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

在转换中,您可以使用get variables步骤获取参数。

我错过了什么吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34742581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档