public override void Init() { QvxLog.SetLogLevels(true, true); QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Notice, "Init()"); var eventLogFields = new QvxField[] { new QvxField("Category", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("EntryType", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Message", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("CategoryNumber", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Index", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("MachineName", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Source", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("TimeGenerated", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII) }; MTables = new List <QvxTable> { new QvxTable { TableName = "ApplicationsEventLog", GetRows = GetApplicationEvents, Fields = eventLogFields } }; }
public override void Init() { QvxLog.SetLogLevels(true, true); QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Notice, "Init()"); var eventLogFields = new QvxField[] { new QvxField("Category", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("EntryType", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Message", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("CategoryNumber", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Index", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("MachineName", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Source", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("TimeGenerated", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII) }; MTables = new List<QvxTable> { new QvxTable { TableName = "ApplicationsEventLog", GetRows = GetApplicationEvents, Fields = eventLogFields } }; }
public override void Init() { QvxLog.SetLogLevels(false, true); QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Notice, "Init()"); var bucketsListFields = new QvxField[] { new QvxField("BucketName", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("CreationDate", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII) }; var objectFields = new QvxField[] { new QvxField("BucketName", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("ETag", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Key", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("LastModified", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.INTEGER), new QvxField("OwnerName", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("OwnerId", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Size", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.INTEGER), new QvxField("StorageClass", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII) }; var dummyFields = new QvxField[] { new QvxField("DummyField", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII) }; MTables = new List <QvxTable> { new QvxTable { TableName = "ListBuckets", Fields = bucketsListFields }, new QvxTable { TableName = "BucketObjects", Fields = objectFields }, new QvxTable { TableName = "DownloadObject", Fields = dummyFields } //new QvxTable // { // TableName = "UploadObject", // Fields = dummyFields // }, //new QvxTable // { // TableName = "DeleteLocalObject", // Fields = dummyFields // } }; }
public override void Init() { var killFields = new QvxField[] { new QvxField("KillerName", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("AssisterName", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("VictimName", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Weapon", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("PenetratedObjects", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Headshot", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII) }; MTables = new List <QvxTable> { new QvxTable { TableName = "Kills", GetRows = GetKills, Fields = killFields } }; }
/// <summary> /// This method obtains the list of tables and assigns it to connection.MTables /// </summary> /// <param name="connection"></param> /// <param name="_source"></param> /// <param name="_file"></param> public void LoadGAMSFile(QvGamsConnection connection) { connection.MTables = new List <QvxTable>(); foreach (GAMSSymbol sym in this.Db) { var GamsFields = new QvxField[this.GetColumnCount(sym)]; int i = 0; foreach (var item in this.GetColumnHeaders(sym)) { GamsFields[i++] = new QvxField(item.Item1, item.Item2, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA); } connection.MTables.Add( new QvxTable { TableName = sym.Name, GetRows = connection.GetData, Fields = GamsFields } ); } ; }
public override void Init() { QvxLog.SetLogLevels(true, true); QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Notice, "Init()"); QvxField[] svnLogFields = new QvxField[] { new QvxField("Author", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("LogMessage", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Revision", QvxFieldType.QVX_SIGNED_INTEGER, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.INTEGER), new QvxField("Time", QvxFieldType.QVX_IEEE_REAL, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.DATE) }; MTables = new List<QvxTable> { new QvxTable { TableName = "SvnLogEntries", GetRows = GetSvnLogEntries, Fields = svnLogFields } }; }
public override void Init() { QvxLog.SetLogLevels(false, true); QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Notice, "Init()"); this.MParameters.TryGetValue("jsonPath", out jsonPath); try { jsonCredentials = File.ReadAllText(jsonPath); } catch (Exception ex) { QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Error, ex.Message); throw new QvxPleaseSendReplyException(QvxResult.QVX_UNKNOWN_ERROR, String.Format("Unable to read {0}", jsonPath)); } var bucketsListFields = new QvxField[] { new QvxField("Acl", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Billing", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Cors", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("ETag", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Encryption", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Id", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Kind", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Label", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Lifecycle", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Location", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Logging", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Name", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Owner", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII) }; var objectFields = new QvxField[] { new QvxField("Acl", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Bucket", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("CacheControl", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("ComponentCount", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.INTEGER), new QvxField("ContentDisposition", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("ContentEncoding", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("ContentLanguage", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Crc32c", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("ETag", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Generation", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Id", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Kind", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("KmsKeyName", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Md5Hash", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("MediaLink", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Metadata", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Metageneration", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.INTEGER), new QvxField("Name", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Owner", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("SelfLink", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Size", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.INTEGER), new QvxField("StorageClass", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("TimeCreated", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("TimeDeleted", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("TimeStorageClassUpdated", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Updated", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII) //new QvxField("CustomerEncryption", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("TimeCreatedRaw", QvxFieldType.QVX_SIGNED_INTEGER, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("TimeDeletedRaw", QvxFieldType.QVX_SIGNED_INTEGER, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("TimeStorageClassUpdated", QvxFieldType.QVX_SIGNED_INTEGER, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("Updated", QvxFieldType.QVX_SIGNED_INTEGER, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), }; var dummyFields = new QvxField[] { new QvxField("DummyField", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII) }; MTables = new List <QvxTable> { new QvxTable { TableName = "ListBuckets", Fields = bucketsListFields }, new QvxTable { TableName = "BucketObjects", Fields = objectFields }, new QvxTable { TableName = "DownloadObject", Fields = dummyFields }, new QvxTable { TableName = "UploadObject", Fields = dummyFields }, new QvxTable { TableName = "DeleteLocalObject", Fields = dummyFields } }; }
private QvxTable GetData(ScriptCode script, string username, string password, string workdir, string remoteName) { var actualWorkDir = Environment.CurrentDirectory; var useRemote = IsRemoteComputer(remoteName); if (String.IsNullOrWhiteSpace(workdir)) { workdir = Path.GetDirectoryName(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)); } if (Directory.Exists(workdir)) { try { Environment.CurrentDirectory = workdir; } catch (Exception ex) { logger.Error(ex, $"The working dir \"{workdir}\" not set."); } } var resultTable = new QvxTable(); resultTable.TableName = script.TableName; try { var Errors = new StringBuilder(); if (String.IsNullOrWhiteSpace(script.Code)) { return(resultTable); } using (var powerShell = PowerShell.Create()) { var scriptBlock = ScriptBlock.Create(script.Code); if (useRemote) { powerShell.AddCommand("Invoke-Command"); } else { powerShell.AddCommand("Start-Job"); } NTAccount accountInfo = null; if (username != "" && password != "") { // if username & password are defined -> add as credentials var secPass = new SecureString(); Array.ForEach(password.ToArray(), secPass.AppendChar); powerShell.AddParameter("Credential", new PSCredential(username, secPass)); accountInfo = new NTAccount(username); if (!useRemote && !UserSystemCheck(accountInfo)) { accountInfo = null; } } else { if (useRemote == true) { logger.Warn("A remote connection without user credentials is not allowed."); return(resultTable); } if (!IsQlikDesktopApp) { // check signature var signature = script.GetSignature(); if (Manager == null) { logger.Warn("No Certificate file found or no access."); return(resultTable); } if (!Manager.IsValidPublicKey(script.Code, signature)) { logger.Warn("The signature could not be valid."); return(resultTable); } } } powerShell.AddParameter("ScriptBlock", scriptBlock); if (script.Parameters.Count > 0) { powerShell.AddParameter("ArgumentList", script.Parameters); } if (useRemote) { powerShell.AddParameter("ComputerName", remoteName); } else { // Wait for the Job to finish powerShell.AddCommand("Wait-Job"); // Give all results and not the jobs back powerShell.AddCommand("Receive-Job"); } using (var windowsGrandAccess = new WindowsGrandAccess(accountInfo, WindowsGrandAccess.WindowStationAllAccess, WindowsGrandAccess.DesktopRightsAllAccess)) { using (var interactiveUser = new InteractiveUser(accountInfo, IsQlikDesktopApp)) { // Run PowerShell var results = powerShell.Invoke(); foreach (var error in powerShell.Streams.Error.ReadAll()) { logger.Error(error.Exception, "PowerShell Error"); } if (Errors.Length > 0) { throw new Exception($"Powershell-Error: {Errors.ToString()}"); } // fill QvxTable var fields = new List <QvxField>(); var rows = new List <QvxDataRow>(); foreach (var psObject in results) { var row = new QvxDataRow(); foreach (var p in psObject.Properties) { if (p.Name != "PSComputerName" && p.Name != "RunspaceId" && p.Name != "PSShowComputerName") { var field = new QvxField(p.Name, QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII); if (fields.SingleOrDefault(s => s.FieldName == field.FieldName) == null) { fields.Add(field); } row[field] = (p.Value ?? "").ToString(); } } rows.Add(row); } resultTable.Fields = fields.ToArray(); resultTable.GetRows = () => { return(rows); }; } } } } catch (Exception ex) { logger.Error(ex, "The PowerShell script can not be executed."); return(resultTable); } finally { Environment.CurrentDirectory = actualWorkDir; } return(resultTable); }
public override void Init() { QvxLog.SetLogLevels(true, true); QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Notice, "QvxConnection.Init() avg"); if (MParameters == null) { return; } MParameters.TryGetValue("QV_Table", out go_qvTableName); MParameters.TryGetValue("Query", out go_query); MParameters.TryGetValue("name_connect", out string lo_connectionName); if (string.IsNullOrEmpty(go_qvTableName)) { return; } if (string.IsNullOrEmpty(go_query)) { return; } go_connString = ConnectString(); List <string> lo_fieldsName = new List <string>(); QvxField[] v8Fileds = null; /*смотрим, если есть сохраненные данные о подключении - грузим*/ if (string.IsNullOrEmpty(lo_connectionName)) { lo_connectionName = "QlikView"; } ConnectData lo_connectData = null; if (ConnectData.IsExistJson(Properties.Settings.Default.QlikConnectJsonFolder + lo_connectionName)) { QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Notice, "Load Json file"); lo_connectData = ConnectData.LoadFromJson(Properties.Settings.Default.QlikConnectJsonFolder + lo_connectionName); /**/ if (lo_connectData.ConnectionString.Equals(go_connString)) { go_query = lo_connectData.Query; go_qvTableName = lo_connectData.go_tablesFields.Keys.ElementAt(0); lo_fieldsName = lo_connectData.go_tablesFields[go_qvTableName]; } } /*если сохраненных данных нет - подключаемся и тащим*/ if (lo_fieldsName.Count == 0) { QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Debug, "Connect 1c COM"); Type oType = Type.GetTypeFromProgID("V83.COMConnector"); using (Object1C lo_v8 = (oType == null) ? null : new Object1C(Activator.CreateInstance(oType))) { if (lo_v8 == null) { QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Error, "Невозможно создать объект типа V83.COMConnector"); Debug.WriteLine("Невозможно создать объект типа V83.COMConnector"); return; } /*соединяемся с базой данных*/ using (Object1C lo_connection = lo_v8.ExecuteFunction("Connect", new object[] { go_connString })) { if (lo_connection == null) { QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Error, "Невозможно подключиться к системе: " + go_connString); Debug.WriteLine("Невозможно подключиться к системе: " + go_connString); return; } QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Debug, "Подключение к 1с выполнено успешно: "); try { using (Object1C lo_query = lo_connection.ExecuteFunctionEx("NewObject", new object[] { "ПостроительЗапроса" })) { lo_query.SetProperty("Текст", new object[] { go_query }); using (Object1C lo_queryRes = lo_query.GetPropertyEx("Результат")) { using (Object1C lo_queryResColumn = lo_queryRes.GetPropertyEx("Колонки")) { /*количество колонок в таблице, которую вернет запрос*/ int lv_countColumn = 0; using (Object1C lo_cntColumn = lo_queryResColumn.ExecuteFunctionEx("Количество")) { lv_countColumn = Convert.ToInt32(lo_cntColumn.ToString()); } /*названия колонок*/ for (int lv_i = 0; lv_i < lv_countColumn; ++lv_i) { string lo_columnName = string.Empty; using (Object1C lo_arrayField = lo_queryResColumn.ExecuteFunction("Получить", new object[] { lv_i })) { using (Object1C lo_fieldName = lo_arrayField.GetProperty("Имя")) { lo_columnName = lo_fieldName.ToString(); } } lo_fieldsName.Add(lo_columnName); } } } } } catch (Exception lo_ex) { QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Error, lo_ex.ToString()); Debug.WriteLine(lo_ex.ToString()); } finally { if (lo_connection != null) { lo_connection.Dispose(); } } } } try { lo_connectData = new ConnectData { ConnectionString = go_connString, Query = go_query, go_tablesFields = new Dictionary <string, List <string> > { [go_qvTableName] = lo_fieldsName } }; lo_connectData.SaveToJson(Properties.Settings.Default.QlikConnectJsonFolder + lo_connectionName); } catch (Exception lo_ex) { QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Error, lo_ex.ToString()); Debug.WriteLine(lo_ex.ToString()); } } /*добавляем поля в таблицу Qlik View*/ v8Fileds = new QvxField[lo_fieldsName.Count]; for (int lv_i = 0; lv_i < lo_fieldsName.Count; ++lv_i) { v8Fileds.SetValue( new QvxField( lo_fieldsName[lv_i], QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII ), lv_i ); } MTables = new List <QvxTable> { new QvxTable { TableName = go_qvTableName, GetRows = GetData, Fields = v8Fileds } }; }
// Has been hardcoded, should preferably be done programatically. public override void Init() { // Set to true true to get more logging. //QvxLog.SetLogLevels(false, false); QvxLog.SetLogLevels(true, true); QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Notice, "Init()"); _logger = new SimpleLogger("QvBigDataConn"); _logger.EnableFileLogging(Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData), log4net.Core.Level.Debug); _logger.LogMsg(log4net.Core.Level.Info, "Initializing QlikView API connection class."); _logger.LogMsg(log4net.Core.Level.Info, String.Format("Command queue path: [{0}].", Program.CommandPipe)); VerifyCredentials(); var billToCodesFields = new QvxField[] { new QvxField("billtocode", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("billtodesc", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("billtoeffdt", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("billtoexpdt", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII) }; /* * var applicationsEventLogFields = new QvxField[] * { * new QvxField("Category", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), * new QvxField("EntryType", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), * new QvxField("Message", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), * new QvxField("CategoryNumber", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), * new QvxField("Index", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), * new QvxField("MachineName", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), * new QvxField("Source", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), * new QvxField("TimeGenerated", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII) * }; * * var systemEventLogFields = new QvxField[] * { * new QvxField("Category", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), * new QvxField("EntryType", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), * new QvxField("Message", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), * new QvxField("CategoryNumber", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), * new QvxField("Index", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), * new QvxField("MachineName", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), * new QvxField("Source", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), * new QvxField("TimeGenerated", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII) * }; */ MTables = new List <QvxTable> { new QvxTable { TableName = "BillToCodes", GetRows = GetBillToCodes, Fields = billToCodesFields } }; /* * MTables = new List<QvxTable> { * new QvxTable { * TableName = "ApplicationsEventLog", * GetRows = GetApplicationEvents, * Fields = applicationsEventLogFields * }, * new QvxTable { * TableName = "SystemEventLog", * GetRows = GetSystemEvents, * Fields = systemEventLogFields * } * }; */ }
public override void Init() { var addressFields = new QvxField[] { new QvxField("Address_Id", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Address_Name", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Address", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Address_Asset", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Address_Balance", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.REAL), new QvxField("Address_Updated_At", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.DATE), new QvxField("Address_Active", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII) }; var transactionFields = new QvxField[] { new QvxField("Transaction_Id", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Transaction_Asset", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Transaction_Amount", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.REAL), new QvxField("Transaction_Fair_Value", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.REAL), new QvxField("Transaction_Spot_Value", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.REAL), new QvxField("Transaction_Total_Value", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.REAL), new QvxField("Transaction_Note", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Transaction_Destination", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Datetime", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.DATE), new QvxField("Transaction_Created_At", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.DATE), new QvxField("Address_Id", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Wallet_Id", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Transaction_Tax_Type", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII) }; var walletFields = new QvxField[] { new QvxField("Wallet_Id", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Wallet_Name", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Wallet_Provider_Id", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Wallet_Provider_Name", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Wallet_Asset", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Wallet_Balance", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.REAL), new QvxField("Wallet_Updated_At", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.DATE) }; var tradeFields = new QvxField[] { new QvxField("Trade_Id", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Trade_Asset1", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Trade_Amount1", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.REAL), new QvxField("Trade_Asset2", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Trade_Amount2", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.REAL), new QvxField("Trade_Rate", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.REAL), new QvxField("Trade_Total_Value", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.REAL), new QvxField("Trade_Note", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Trade_Direction", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Datetime", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.DATE), new QvxField("Trade_Created_At", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.DATE), new QvxField("Trade_Provider", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Trade_Provider_Id", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII) }; var lotFields = new QvxField[] { new QvxField("Match_Id", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Match_Calculation_Method", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Match_Asset", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Match_User_Id", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Datetime", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Match_Updated_At", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Match_Calculation_Started_At", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("Match_Unsold_Lots", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("Match_Invalidated_At", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII) //new QvxField("Lot_Date", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("Lot_Remaining", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("Lot_Total_Value", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("Lot_Fee", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("Lot_Fair_Value", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("Lot_Id", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("Lot_Gain_Type", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("Lot_Amount", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("Lot_Total_Sale_Value", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("Lot_Value_Per_Coin", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("Lot_Amount_Remaining", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("Lot_Tax_Type", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("Lot_Net_Gain", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("Lot_Amount_Sold", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("Lot_Spot_Value", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("Lot_Cost_Basis_Per_Coin", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("Lot_Asset", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("Lot_Date_Sold", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("Lot_Sale_Value_Per_Coin", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("Lot_Sale_Id", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), //new QvxField("Lot_Total_Cost_Basis", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII) }; var calculationFields = new QvxField[] { new QvxField("Calculation_Method", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Calculation_Asset", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Calculation_Period", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Calculation_Status_Ready", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Calculation_Total_Gain_Long_Term", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.REAL), new QvxField("Calculation_Total_Gain_Total", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.REAL), new QvxField("Calculation_Total_Gain_Unrealized", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.REAL), new QvxField("Calculation_Taggable_Totals_Drinks", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.REAL), new QvxField("Calculation_Categories_Totals_Accounts_Payable", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.REAL), new QvxField("Calculation_Categories_Totals_Accounts_Receivable", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.REAL) }; MTables = new List <QvxTable> { new QvxTable { TableName = "Address", GetRows = GetAddressData, Fields = addressFields }, new QvxTable { TableName = "Transaction", GetRows = GetTransactionData, Fields = transactionFields }, new QvxTable { TableName = "Wallet", GetRows = GetWalletData, Fields = walletFields }, new QvxTable { TableName = "Trade", GetRows = GetTradeData, Fields = tradeFields }, new QvxTable { TableName = "Lot", GetRows = GetLotData, Fields = lotFields }, new QvxTable { TableName = "Calculation", GetRows = GetCalculationData, Fields = calculationFields } }; }
/// <summary> /// This method obtains the data from the GAMS file using the low level API /// </summary> /// <param name="_source"></param> /// <param name="file"></param> /// <param name="table"></param> /// <param name="where"></param> /// <returns></returns> public static IEnumerable <QvxDataRow> GetGamsDataLowLevel(string _source, string file, QvxTable table, List <string> selectedFields, List <QueryExtractor.WhereCondition> where) { const int GMS_VAL_LEVEL = 0; const int GMS_VAL_MARGINAL = 1; const int GMS_VAL_LOWER = 2; const int GMS_VAL_UPPER = 3; const int GMS_VAL_SCALE = 4; //const int GMS_VAL_MAX = 5; string msg = string.Empty, VarName = string.Empty, sText = string.Empty, UelName = string.Empty; int ErrNr = 0, SymNr = 0, SymTyp = 0, ADim = 0, ACount = 0, AUser = 0, NRec = 0, FDim = 0, j = 0, i = 0, IDum = 0; using (gdxcs gdx = new gdxcs(ref msg)) { gdx.gdxOpenRead(_source + "\\" + file, ref ErrNr); gdx.gdxFindSymbol(table.TableName, ref SymNr); gdx.gdxSymbolInfo(SymNr, ref VarName, ref ADim, ref SymTyp); gdx.gdxSymbolInfoX(SymNr, ref ACount, ref AUser, ref sText); gdx.gdxDataReadRawStart(SymNr, ref NRec); Dictionary <int, string>[] dimensionCache = new Dictionary <int, string> [ADim]; if (where.Count == 0) { // No WHERE clause double[] Vals = new double[gamsglobals.val_max]; int[] Keys = new int[gamsglobals.maxdim]; while (gdx.gdxDataReadRaw(ref Keys, ref Vals, ref FDim) != 0) { QvxDataRow row = mapRow(Keys, Vals); if (row != null) { yield return(row); } } } else { // WHERE clause string[] strFilter = Enumerable.Repeat("", table.Fields.Count()).ToArray(); var emptyFilters = new List <QvxField>(); foreach (var whereCondition in where) { int m = Array.FindIndex(table.Fields, element => element.FieldName == whereCondition.Field); if (m >= 0) { if (m > (ADim - 1)) { // Only dimensions can be filtered throw new QvxPleaseSendReplyException(QvxResult.QVX_UNSUPPORTED_COMMAND, String.Format("Field \"{0}\" is not a dimension and can't be filtered", whereCondition.Field)); } else if ("".Equals(whereCondition.Value)) { // GAMS API doesn't allow empty filters, so we have to filter them ourselves emptyFilters.Add(table.Fields[m]); } else { strFilter[m] = whereCondition.Value; } } else { throw new QvxPleaseSendReplyException(QvxResult.QVX_FIELD_NOT_FOUND, String.Format("The field \"{0}\" is not valid", whereCondition.Field)); } } using (BlockingCollection <QvxDataRow> buffer = new BlockingCollection <QvxDataRow>()) { // Start reading thread Exception exception = null; var readTask = Task.Run(() => { try { gdx.gdxDataReadRawFastFilt(SymNr, strFilter, FilterProc); } catch (Exception e) { exception = e; } finally { // Signal the end of the data buffer.CompleteAdding(); } }); int FilterProc(IntPtr IndxPtr, IntPtr ValsPtr, IntPtr Uptr) { double[] managedArrayVals = new double[gamsglobals.val_max]; Marshal.Copy(ValsPtr, managedArrayVals, 0, gamsglobals.val_max); int[] managedArrayIndx = new int[gamsglobals.maxdim]; Marshal.Copy(IndxPtr, managedArrayIndx, 0, gamsglobals.maxdim); QvxDataRow row = mapRow(managedArrayIndx, managedArrayVals, emptyFilters); if (row != null) { buffer.Add(row); } return(1); } // Writing process foreach (QvxDataRow row in buffer.GetConsumingEnumerable()) { yield return(row); } if (exception != null) { throw exception; } } } QvxDataRow mapRow(int[] Keys, double[] Vals, List <QvxField> emptyFilters = null) { i = 0; var row = new QvxDataRow(); // Read the dimensions for (j = 0; j < ADim; j++) { if (dimensionCache[j] == null) { dimensionCache[j] = new Dictionary <int, string>(); } UelName = null; if (dimensionCache[j].ContainsKey(Keys[j])) { UelName = dimensionCache[j][Keys[j]]; } else { gdx.gdxUMUelGet(Keys[j], ref UelName, ref IDum); dimensionCache[j][Keys[j]] = UelName; } if (UelName != null) { QvxField field = table.Fields[i++]; if (selectedFields.Contains(field.FieldName)) { row[field] = UelName; } // we check the empty filters, as GAMS API doesn't do it if (emptyFilters != null && emptyFilters.Contains(field) && !string.IsNullOrEmpty(UelName)) { return(null); } } } switch (SymTyp) { // SET case gamsglobals.dt_set: if (gdx.gdxGetElemText((int)Vals[GMS_VAL_LEVEL], ref msg, ref IDum) != 0) { QvxField field2 = table.Fields[i++]; if (selectedFields.Contains(field2.FieldName)) { row[field2] = msg; } } else { QvxField field2 = table.Fields[i++]; if (selectedFields.Contains(field2.FieldName)) { row[field2] = Y_STRING; } } break; // PARAMETER case gamsglobals.dt_par: // Value readValueField(row, table.Fields[i++], table.Fields[i++], Vals[GMS_VAL_LEVEL]); if (!string.IsNullOrEmpty(sText) && ADim == 0) { QvxField field = table.Fields[i++]; if (selectedFields.Contains(field.FieldName)) { row[field] = sText; } } break; // EQUATION and VARIABLE case gamsglobals.dt_equ: case gamsglobals.dt_var: int[] gms_values = { GMS_VAL_LEVEL, GMS_VAL_MARGINAL, GMS_VAL_LOWER, GMS_VAL_UPPER, GMS_VAL_SCALE }; foreach (int gms_value in gms_values) { // Value readValueField(row, table.Fields[i++], table.Fields[i++], Vals[gms_value]); } break; } return(row); } /// <summary>This method reads a value separated in two fields, the first with the numeric value and the second with the special value description.</summary> void readValueField(QvxDataRow pRow, QvxField numberField, QvxField specialField, double pVal) { Boolean isSpecialValue = false; // Value if (selectedFields.Contains(numberField.FieldName)) { pRow[numberField] = val2str(pVal, msg, out isSpecialValue, true, false); } // Value (Special) if (selectedFields.Contains(specialField.FieldName)) { pRow[specialField] = val2str(pVal, msg, out isSpecialValue, false, true); } else if (isSpecialValue) { // If the value is special, but the "Special value" column is not selected, we throw an error throw new QvxPleaseSendReplyException(QvxResult.QVX_FIELD_NOT_FOUND, String.Format("The field \"{0}\" contains special values, so the field \"{1}\" has to be selected", numberField.FieldName, specialField.FieldName)); } } /// <summary>This method generates the final value of a field, that can be a normal number, an acronym, infinite, ...</summary> /// <param name="returnNumber">If true, the value of a number will be returned as a double</param> /// <param name="returnSpecial">If true, the value of a special value (infinite, epsilon, acronym, ...) will be returned as a string</param> dynamic val2str(double val, string s, out Boolean isSpecial, Boolean returnNumber = true, Boolean returnSpecial = true) { string[] gmsSVText = { "UNdef", "NA", "+Inf", "-Inf", "Eps", "0", "AcroN" }; int sv = 0; if (gdx.gdxAcronymName(val, ref s) != 0) { isSpecial = true; return(returnSpecial ? s : null); } else { gdx.gdxMapValue(val, ref sv); if (gamsglobals.sv_normal != sv) { isSpecial = true; return(returnSpecial ? gmsSVText[sv] : null); } else { isSpecial = false; if (returnNumber) { return(val); } else { return(null); } } } } } }
// Has been hardcoded, should preferably be done programatically. public override void Init() { // Set to true true to get more logging. //QvxLog.SetLogLevels(false, false); QvxLog.SetLogLevels(true, true); QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Notice, "Init()"); _logger = new SimpleLogger("QvBigDataConn"); _logger.EnableFileLogging(Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData), log4net.Core.Level.Debug); _logger.LogMsg(log4net.Core.Level.Info, "Initializing QlikView API connection class."); _logger.LogMsg(log4net.Core.Level.Info, String.Format("Command queue path: [{0}].", Program.CommandPipe ) ); VerifyCredentials(); var billToCodesFields = new QvxField[] { new QvxField("billtocode", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("billtodesc", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("billtoeffdt", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("billtoexpdt", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII) }; /* var applicationsEventLogFields = new QvxField[] { new QvxField("Category", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("EntryType", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Message", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("CategoryNumber", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Index", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("MachineName", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Source", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("TimeGenerated", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII) }; var systemEventLogFields = new QvxField[] { new QvxField("Category", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("EntryType", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Message", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("CategoryNumber", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Index", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("MachineName", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("Source", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII), new QvxField("TimeGenerated", QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII) }; */ MTables = new List<QvxTable> { new QvxTable { TableName = "BillToCodes", GetRows = GetBillToCodes, Fields = billToCodesFields } }; /* MTables = new List<QvxTable> { new QvxTable { TableName = "ApplicationsEventLog", GetRows = GetApplicationEvents, Fields = applicationsEventLogFields }, new QvxTable { TableName = "SystemEventLog", GetRows = GetSystemEvents, Fields = systemEventLogFields } }; */ }
public void SetFieldValue(int index, QvxField field, SalesforceDataType attribType) { Fields[index] = field; FieldTypes[index] = attribType; }