问题描述
我正在尝试为 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 (将#修改为@)