如何解决Qlik Desktop - 自定义连接器 - ExtractQuery 和其他问题时出错
我正在尝试为 Qlik 开发一个简单的自定义连接器,我从特定源获取数据,在 Qlik 中加载数据并根据自己的查询提取数据。但是,我发现了一些问题和疑问,我在下面描述:
-
我像下面的代码一样传递了连接的字段、表名和数据,但是当我单击“加载数据”时,会显示错误“对象引用未定义为对象的实例”,如果尚未定义“QvAditiConnection.Init()”中的表,如何处理。波纹管,代码:
public QvAditiConectorConnection(QvxConnection connection) { try { _logApp = new LogApp(); _util = new ClsUtil(); _nomeTabela = " "; _tipoConexao = " "; _connectionString = " "; _parameters = " "; if (connection != null && connection.MParameters != null && connection.MParameters.Count > 0) { this.MParameters = connection.MParameters; } GetParametersFromConnection(); if (string.IsNullOrWhiteSpace(_parameters) == false) { _connectionStringParameters = _util.RecuperaParametrosConnectionString(_parameters); _tipoConexao = _connectionStringParameters[0]; string connectionString = GetConnectionString(); if (TestarConexao(connectionString)) { _connectionString = connectionString; StartConnection(); } else { _logApp.CriarLog("ERRO na conexão com o banco de dados."); } } else { QvxLog.Log(QvxLogFacility.Audit,QvxLogSeverity.Error,"Init() Erro de conexão. Verifique os dados ou o servidor."); } Init(); } catch (Exception ex) { _logApp = new LogApp(); if (string.IsNullOrWhiteSpace(ex.Message) == false) { QvxLog.Log(QvxLogFacility.Audit,"Init() Erro: " + ex.Message); _logApp.CriarLog("ERRO Constructor: " + ex.Message); } else { QvxLog.Log(QvxLogFacility.Application,QvxLogSeverity.Notice,"Init() Erro Desconhecido"); _logApp.CriarLog("ERRO não identificado"); } } } public override void Init() { try { if (string.IsNullOrWhiteSpace(_parameters) == false) { QvxLog.SetLogLevels(true,true); QvxLog.Log(QvxLogFacility.Application,"Init()"); List<QvxTable> tabelas = new List<QvxTable>(); DataTable schemaTables = _connectionPostGreSqlStaging.GetSchema("Tables"); foreach (DataRow row in schemaTables.Rows) { _nomeTabela = (string)row[2]; _dataTableStagingArea = new DataTable(_nomeTabela); GetDataReader(); QvxTable dadosTable = new QvxTable(); dadosTable.TableName = _nomeTabela; dadosTable.Fields = _qvxFields; dadosTable.GetRows = GetDataRowsConnector; tabelas.Add(dadosTable); } this.MTables = tabelas; } }
你怎么能在下面看到,在这种情况下连接是正确的,因为应用程序以正确的形式获取并显示表格和字段:
但是,在我点击“插入脚本”和“加载数据”后,显示以下错误,如果应用程序中的表尚未定义:
Error on click in load data button
“ExtractQuery”的确切含义如下,当我调试代码并在参数“qvxTables”中使用“Add Watch”时,我看到他为空且不包含表:
public IEnumerable<QvxDataRow> GetDataRowsConnector()
{
DataTable dadosTabela = _dataTableStagingArea;
foreach (var item in dadosTabela.Rows)
{
yield return MakeEntry(item as DataRow,FindTable(_nomeTabela,MTables));
}
}
public QvxDataRow MakeEntry(DataRow item,QvxTable table)
{
try
{
var row = new QvxDataRow();
for (int i = 0; i < _dataTableStagingArea.Columns.Count; i++)
{
var field = table.Fields.Where(a => a.FieldName == _dataTableStagingArea.Columns[i].ColumnName)
.Select(b => b).FirstOrDefault();
row[field] = item[field.FieldName].ToString();
}
return row;
}
catch (Exception ex)
{
throw new Exception(ex + "MakeEntry()");
}
}
在这种情况下,当调用方法“ExtractQuery”时,有时会出现表,但通信中没有出现数据,类似于错误1。在这种情况下,当我逐步调试时并排队等候“ dadosTable.GetRows = GetDataRowsConnector;”即使我在方法中插入断点或按“F11”使用“Step Into”,调试也不会进入“GetDataRowsConnector”或“MakeEntry”。
- 如何在选择对话框中显示预览数据(在这种情况下我使用 QvxSdk)?即使使用 getPreview,我也没有获得数据,也没有在文档中看到示例。如果您对我有任何建议或示例,如果您分享,我将不胜感激。以及如何编辑和选择要在此窗口中显示的字段(如何显示或不显示 Metadada、选择摘要等)?以及如何在连接器中插入徽标,例如“Oracle”、“PostGreSql”等连接器?
select dialog with highlighted data area preview
- 当我单击“插入脚本”时,我想向编辑器发送一个空白脚本,ao invés de 发送脚本“Load [FIELD] SQL SELECT * FROM ...”,然后 ao mesmo tempo get this Qlik 生成器在我的后端自动运行的脚本,可以这样做吗?
请记住,我将 QvxSdk 用于此解决方案,基于为 Qlik 提供的“简单示例”,但如果是回答我的问题的情况,我愿意为其他 API 提供建议。我也使用 .Net Framework 4.5 来开发连接器
预先感谢您的关注和帮助。
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。