private QvxDataRow InsertRow(dynamic sourceRow, QvxTable tableDef, dynamic parentData)
        {
            QvxDataRow destRow = new QvxDataRow();

            foreach (QvxField fieldDef in tableDef.Fields)
            {
                dynamic originalDef = helper.ActiveFields[fieldDef.FieldName];
                dynamic sourceField;
                if (originalDef.path.ToString().IndexOf("{parent}") == -1)
                {
                    sourceField = GetSourceValue(sourceRow, originalDef.path.ToString(), originalDef.type.ToString());
                }
                else
                {
                    String parentPath = originalDef.path.ToString();
                    parentPath  = parentPath.Replace("{parent}.", "");
                    sourceField = GetSourceValue(parentData, parentPath, originalDef.type.ToString());
                }

                if (sourceField != null)
                {
                    destRow[fieldDef] = sourceField.ToString();
                }
            }
            recordsLoaded++;
            return(destRow);
        }
Пример #2
0
        public static QvxTable ConvertTable(ResultTable table)
        {
            var resultTable = new QvxTable()
            {
                TableName = table.Name
            };
            var fields = new List <QvxField>();

            foreach (var header in table.Headers)
            {
                fields.Add(new QvxField(header.Name, QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII));
            }
            var        rows   = new List <QvxDataRow>();
            QvxDataRow newRow = null;

            foreach (var row in table.Rows)
            {
                if (row.IsFirstRow)
                {
                    newRow = new QvxDataRow();
                }
                var field = fields.FirstOrDefault(f => f.FieldName == row.Header);
                newRow[field] = row.Value;
                if (row.IsLastRow)
                {
                    rows.Add(newRow);
                }
            }

            resultTable.Fields  = fields.ToArray();
            resultTable.GetRows = () => { return(rows); };
            return(resultTable);
        }
Пример #3
0
        private QvxDataRow MakeEntry(int i, QvxTable table)
        {
            var row = new QvxDataRow();

            row[table.Fields[0]] = $"f1 {i}";
            row[table.Fields[1]] = i;

            return(row);
        }
        private QvxDataRow MakeEntry(DataRow dr, QvxTable table)
        {
            var row = new QvxDataRow();

            foreach (DataColumn dc in dr.Table.Columns)
            {
                row[table[dc.ColumnName]] = dr[dc].ToString();
            }

            return(row);
        }
        /// <summary>
        /// Return all rows in the QvxTable.
        /// </summary>
        /// <returns>IEnumerable with all QvxDataRow elements of m_Table member.</returns>
        private IEnumerable <QvxDataRow> GetRows()
        {
            var connectionString = new StringBuilder();

            // The default return fields for a friend is id and name. We need more information for the QlikView example application.
            connectionString.Append("fields=");

            var supportedFields = Enum.GetNames(typeof(EntertainmentFields));

            foreach (var field in supportedFields)
            {
                connectionString.Append(field);
                if (field != supportedFields.Last())
                {
                    connectionString.Append(",");
                }
            }
            var connectionData = _facebookConnection.LoadConnectionData(_tableName, connectionString.ToString());
            var rows           = new List <QvxDataRow>();

            try
            {
                foreach (var item in connectionData["data"])
                {
                    var row = new QvxDataRow();

                    for (var i = 0; i < supportedFields.Length; i++)
                    {
                        var field      = supportedFields[i];
                        var tableIndex = _facebookConnection.IndexOfTable(_tableName);

                        try
                        {
                            row[_facebookConnection.MTables[tableIndex].Fields[i]] = item[field];
                        }
                        catch (KeyNotFoundException)
                        {
                            // If the field does not exist set it to empty (the person has not specified the information)
                            row[_facebookConnection.MTables[tableIndex].Fields[i]] = "";
                        }
                    }

                    rows.Add(row);
                }
            }
            catch (Exception ex)
            {
                QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Error, String.Format("EntertainmentTable GetRows for {0} :{1}", _tableName, ex.Message));
                // Forward the error message to QlikView
                throw;
            }

            return(rows);
        }
        public static QvxTable.GetRowsHandler ListBucketsRows(QvxTable table, IDictionary <string, string> MParameters)
        {
            RegionEndpoint region   = null;
            AmazonS3Client s3Client = null;

            string GCPProjectId = "";

            List <QvxDataRow> rows = new List <QvxDataRow>();

            MParameters.TryGetValue("access-key", out string accessKey);
            MParameters.TryGetValue("secret-key-encrypted", out string secretKeyEncrypted);
            MParameters.TryGetValue("aws-region", out string awsRegion);

            string secretKey = EncryptDecrypt.DecryptString(secretKeyEncrypted);

            return(() =>
            {
                try
                {
                    region = RegionEndpoint.GetBySystemName("eu-west-2");
                    s3Client = new AmazonS3Client(accessKey, secretKey, region);
                }
                catch (Exception ex)
                {
                    QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Error, ex.Message);
                    throw new QvxPleaseSendReplyException(QvxResult.QVX_UNKNOWN_COMMAND, "Error getting the data from Google Storage");
                }

                ListBucketsResponse response = s3Client.ListBuckets();

                int length = 0;
                foreach (S3Bucket bucket in response.Buckets)
                {
                    length++;
                }

                if (length == 0)
                {
                    throw new QvxPleaseSendReplyException(QvxResult.QVX_UNKNOWN_COMMAND, String.Format("No buckets found for project {0}", GCPProjectId));
                }
                else
                {
                    foreach (S3Bucket bucket in response.Buckets)
                    {
                        var row = new QvxDataRow();
                        row[table.Fields[0]] = bucket.BucketName.ToString();
                        row[table.Fields[1]] = bucket.CreationDate.ToString();
                        rows.Add(row);
                    }
                }

                return rows;
            });
        }
        public static QvxTable.GetRowsHandler ListBucketObjectsRows(IDictionary <string, string> fields, QvxTable table, IDictionary <string, string> MParameters)
        {
            return(() =>
            {
                List <QvxDataRow> rows = new List <QvxDataRow>();
                RegionEndpoint region = null;
                AmazonS3Client s3Client = null;
                ListObjectsResponse response = null;

                MParameters.TryGetValue("access-key", out string accessKey);
                MParameters.TryGetValue("secret-key-encrypted", out string secretKeyEncrypted);
                MParameters.TryGetValue("aws-region", out string awsRegion);

                string secretKey = EncryptDecrypt.DecryptString(secretKeyEncrypted);

                fields.TryGetValue("bucketname", out string bucketName);

                try
                {
                    region = RegionEndpoint.GetBySystemName(awsRegion);
                    s3Client = new AmazonS3Client(accessKey, secretKey, region);
                    ListObjectsRequest request = new ListObjectsRequest
                    {
                        BucketName = bucketName
                    };

                    response = s3Client.ListObjects(request);

                    foreach (S3Object bucketObject in response.S3Objects)
                    {
                        var row = new QvxDataRow();
                        row[table.Fields[0]] = bucketObject.BucketName?.ToString() ?? "";
                        row[table.Fields[1]] = bucketObject.ETag?.ToString() ?? "";
                        row[table.Fields[2]] = bucketObject.Key?.ToString() ?? "";
                        row[table.Fields[3]] = bucketObject.LastModified.ToString();
                        row[table.Fields[4]] = bucketObject.Owner.DisplayName?.ToString() ?? "";
                        row[table.Fields[5]] = bucketObject.Owner.Id?.ToString() ?? "";
                        row[table.Fields[6]] = bucketObject.Size;
                        row[table.Fields[7]] = bucketObject.StorageClass.Value.ToString() ?? "";
                        rows.Add(row);
                    }
                }
                catch (Exception ex)
                {
                    QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Error, ex.Message);
                    throw new QvxPleaseSendReplyException(QvxResult.QVX_UNKNOWN_COMMAND, "Error getting the data from AWS S3");
                }

                QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Error, rows.Count.ToString());
                return rows;
            });
        }
Пример #8
0
        private QvxDataRow MakeEntryW(Wallet wallet, QvxTable table)
        {
            var row = new QvxDataRow();

            row[table.Fields[0]] = wallet.id;
            row[table.Fields[1]] = wallet.name;
            row[table.Fields[2]] = wallet.provider.id;
            row[table.Fields[3]] = wallet.provider.name;
            row[table.Fields[4]] = wallet.asset;
            row[table.Fields[5]] = wallet.balance;

            return(row);
        }
Пример #9
0
        private QvxDataRow MakeEntryA(Address address, QvxTable table)
        {
            var row = new QvxDataRow();

            row[table.Fields[0]] = address.id;
            row[table.Fields[1]] = address.name;
            row[table.Fields[2]] = address.address;
            row[table.Fields[3]] = address.asset;
            row[table.Fields[4]] = address.balance;
            row[table.Fields[5]] = address.updated_at;
            row[table.Fields[6]] = address.active;
            return(row);
        }
        public static QvxTable.GetRowsHandler DownloadObjectRows(QvxTable table)
        {
            return(() =>
            {
                List <QvxDataRow> rows = new List <QvxDataRow>();

                var row = new QvxDataRow();
                row[table.Fields[0]] = "Dummy Value. This table can be dropped from the data model.";
                rows.Add(row);

                return rows;
            });
        }
 private QvxDataRow MakeEntry(EventLogEntry evl, QvxTable table)
 {
     var row = new QvxDataRow();
     row[table.Fields[0]] = evl.Category;
     row[table.Fields[1]] = evl.EntryType.ToString();
     row[table.Fields[2]] = evl.Message;
     row[table.Fields[3]] = evl.CategoryNumber.ToString();
     row[table.Fields[4]] = evl.Index.ToString();
     row[table.Fields[5]] = evl.MachineName;
     row[table.Fields[6]] = evl.Source;
     row[table.Fields[7]] = evl.TimeGenerated.ToString();
     return row;
 }
Пример #12
0
        private QvxDataRow MakeEntry(DataRow dr, QvxTable table)
        {
            QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Notice, "MakeEntry()");

            var row = new QvxDataRow();

            foreach (DataColumn dc in dr.Table.Columns)
            {
                row[table[dc.ColumnName]] = dr[dc].ToString();
            }

            return(row);
        }
Пример #13
0
        private IEnumerable <QvxDataRow> GetData()
        {
            QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Notice, "GetData() avg");

            QvxTable table = FindTable(go_qvTableName, MTables);

            if (table == null)
            {
                yield return(null);
            }

            Type oType = Type.GetTypeFromProgID("V83.COMConnector");

            using (Object1C lo_v8 = (oType == null) ? null : new Object1C(Activator.CreateInstance(oType))) {
                if (lo_v8 == null)
                {
                    Debug.WriteLine("Невозможно создать объект типа V83.COMConnector");
                    QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Error, "Невозможно создать объект типа V83.COMConnector");
                    yield return(new QvxDataRow());
                }

                /*соединяемся с базой данных*/
                using (Object1C lo_connection = lo_v8.ExecuteFunction("Connect", new object[] { go_connString })) {
                    if (lo_connection == null)
                    {
                        Debug.WriteLine("Невозможно подключиться к системе: " + go_connString);
                        QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Error, "Невозможно подключиться к системе: " + go_connString);
                        yield return(new QvxDataRow());
                    }

                    /*получаем результат запроса, возвращаем построчно*/
                    using (Object1C lo_query = lo_connection.ExecuteFunctionEx("NewObject", new object[] { "Query" })) {
                        lo_query.SetProperty("Текст", new object[] { go_query });

                        using (Object1C lo_queryResult = lo_query.ExecuteFunctionEx("Выполнить")) {
                            using (Object1C lo_queryResSelection = lo_queryResult.ExecuteFunctionEx("Выбрать")) {
                                while ((bool)lo_queryResSelection.ExecuteFunctionEx("Следующий").CurrentObject)
                                {
                                    QvxDataRow lo_row = new QvxDataRow();
                                    foreach (var tField in table.Fields)
                                    {
                                        lo_row[tField] = lo_queryResSelection.GetPropertyEx(tField.FieldName).ToString();
                                    }
                                    yield return(lo_row);
                                }
                            }
                        }
                    }
                }
            }
        }
        private QvxDataRow MakeEntry(EventLogEntry evl, QvxTable table)
        {
            var row = new QvxDataRow();

            row[table.Fields[0]] = evl.Category;
            row[table.Fields[1]] = evl.EntryType.ToString();
            row[table.Fields[2]] = evl.Message;
            row[table.Fields[3]] = evl.CategoryNumber.ToString();
            row[table.Fields[4]] = evl.Index.ToString();
            row[table.Fields[5]] = evl.MachineName;
            row[table.Fields[6]] = evl.Source;
            row[table.Fields[7]] = evl.TimeGenerated.ToString();
            return(row);
        }
Пример #15
0
        private QvxDataRow MakeEntryC(RootObjectC cal, QvxTable table)
        {
            var row = new QvxDataRow();

            row[table.Fields[0]] = cal.method;
            row[table.Fields[1]] = cal.asset;
            row[table.Fields[2]] = cal.period;
            row[table.Fields[3]] = cal.status.ready;
            row[table.Fields[4]] = cal.total_gains.long_term;
            row[table.Fields[5]] = cal.total_gains.total;
            row[table.Fields[6]] = cal.total_gains.unrealized;
            row[table.Fields[7]] = cal.taggable_totals.drinks;
            //row[table.Fields[8]] = cal.categories_totals.accounts_payable;
            //row[table.Fields[9]] = cal.categories_totals.accounts_receivable;

            return(row);
        }
Пример #16
0
        private IEnumerable <QvxDataRow> GetKills()
        {
            string directory;

            this.MParameters.TryGetValue("directory", out directory);
            var files = Directory.GetFiles(directory, "*.dem", SearchOption.AllDirectories);

            foreach (var file in files)
            {
                var proc = new Process()
                {
                    StartInfo = new ProcessStartInfo()
                    {
                        FileName               = "parser.exe",
                        Arguments              = "-demoPath \"" + file + "\"",
                        UseShellExecute        = false,
                        RedirectStandardOutput = true,
                        CreateNoWindow         = true
                    }
                };
                proc.Start();
                QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Notice, "Parsing demo " + file);
                while (!proc.StandardOutput.EndOfStream)
                {
                    var rawLine = proc.StandardOutput.ReadLine();
                    var line    = rawLine.Split('\t');
                    var row     = new QvxDataRow();
                    var table   = FindTable("Kills", MTables);

                    row[table.Fields[0]] = line[0];
                    row[table.Fields[1]] = line[1];
                    row[table.Fields[2]] = line[2];
                    row[table.Fields[3]] = line[3];
                    row[table.Fields[4]] = line[4];
                    row[table.Fields[5]] = line[5];

                    QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Notice, "Line info: " + rawLine);
                    yield return(row);
                }
            }

            /*foreach (var ev1 in ev.Entries) {
             *  yield return MakeEntry(ev1 as EventLogEntry, FindTable("Kills", MTables));
             * }*/
        }
        private QvxDataRow MakeEntry(XmlNode rowNode, QvxTable table)
        {
            var row = new QvxDataRow();

            foreach (XmlNode field_node in rowNode.ChildNodes)
            {
                switch (field_node.Name.ToLower())
                {
                case "billtocode":
                    row[table.Fields[0]] = field_node.InnerText;
                    break;

                case "billtodesc":
                    row[table.Fields[1]] = field_node.InnerText;
                    break;

                case "billtoeffdt":
                    row[table.Fields[2]] = field_node.InnerText;
                    break;

                case "billtoexpdt":
                    row[table.Fields[3]] = field_node.InnerText;
                    break;
                }
            }

            //row[table.Fields[0]] = "CODE VALUE 1";
            //row[table.Fields[1]] = "CODE DESCRIPTION 1";
            //row[table.Fields[2]] = DateTime.Now.ToString();
            //row[table.Fields[3]] = DateTime.Now.ToString();


            //row[table.Fields[0]] = evl.Category;
            //row[table.Fields[1]] = evl.EntryType.ToString();
            //row[table.Fields[2]] = evl.Message;
            //row[table.Fields[3]] = evl.CategoryNumber.ToString();
            //row[table.Fields[4]] = evl.Index.ToString();
            //row[table.Fields[5]] = evl.MachineName;
            //row[table.Fields[6]] = evl.Source;
            //row[table.Fields[7]] = evl.TimeGenerated.ToString();

            return(row);
        }
Пример #18
0
        private QvxDataRow MakeEntryT(Transaction transaction, QvxTable table)
        {
            var row = new QvxDataRow();

            row[table.Fields[0]]  = transaction.id;
            row[table.Fields[1]]  = transaction.asset;
            row[table.Fields[2]]  = transaction.amount;
            row[table.Fields[3]]  = transaction.fair_value;
            row[table.Fields[4]]  = transaction.spot_value;
            row[table.Fields[5]]  = transaction.total_value;
            row[table.Fields[6]]  = transaction.note;
            row[table.Fields[7]]  = transaction.destination;
            row[table.Fields[8]]  = transaction.date;
            row[table.Fields[9]]  = transaction.created_at;
            row[table.Fields[10]] = transaction.address_id;
            row[table.Fields[11]] = transaction.wallet_id;
            row[table.Fields[12]] = transaction.tax_type;

            return(row);
        }
Пример #19
0
        private QvxDataRow MakeEntryD(Trade trade, QvxTable table)
        {
            var row = new QvxDataRow();

            row[table.Fields[0]]  = trade.id;
            row[table.Fields[1]]  = trade.asset1;
            row[table.Fields[2]]  = trade.amount1;
            row[table.Fields[3]]  = trade.asset2;
            row[table.Fields[4]]  = trade.amount2;
            row[table.Fields[5]]  = trade.rate;
            row[table.Fields[6]]  = trade.total_value;
            row[table.Fields[7]]  = trade.note;
            row[table.Fields[8]]  = trade.direction;
            row[table.Fields[9]]  = trade.datetime;
            row[table.Fields[10]] = trade.created_at;
            row[table.Fields[11]] = trade.provider;
            row[table.Fields[12]] = trade.provider_id;

            return(row);
        }
        private IEnumerable <QvxDataRow> GetPowerShellResult()
        {
            var result = new List <QvxDataRow>();

            try
            {
                foreach (DataRow dataRow in internalData.Rows)
                {
                    var row = new QvxDataRow();
                    for (int i = 0; i < dataRow.ItemArray.Length; i++)
                    {
                        row[fields[i]] = dataRow[i].ToString();
                    }

                    result.Add(row);
                }
            }
            catch { }

            return(result);
        }
Пример #21
0
        private QvxDataRow MakeEntryL(Matched match, QvxTable table)
        {
            var row = new QvxDataRow();

            row[table.Fields[0]] = match.id;
            row[table.Fields[1]] = match.calculation_method;
            row[table.Fields[2]] = match.asset;
            row[table.Fields[3]] = match.user_id;
            row[table.Fields[4]] = match.created_at;
            row[table.Fields[5]] = match.updated_at;
            row[table.Fields[6]] = match.calculation_started_at;
            //row[table.Fields[7]] = match.unsold_lots;
            //row[table.Fields[8]] = match.invalidated_at;
            //row[table.Fields[0]] = lot.date;
            //row[table.Fields[1]] = lot.lot_remaining;
            //row[table.Fields[2]] = lot.total_value;
            //row[table.Fields[3]] = lot.fee;
            //row[table.Fields[4]] = lot.fair_value;
            //row[table.Fields[5]] = lot.id;
            //row[table.Fields[6]] = lot.gain_type;
            //row[table.Fields[7]] = lot.amount;
            //row[table.Fields[8]] = lot.total_sale_value;
            //row[table.Fields[9]] = lot.value_per_coin;
            //row[table.Fields[10]] = lot.amount_remaining;
            //row[table.Fields[11]] = lot.tax_type;
            //row[table.Fields[12]] = lot.net_gain;
            //row[table.Fields[13]] = lot.amount_sold;
            //row[table.Fields[14]] = lot.spot_value;
            //row[table.Fields[15]] = lot.cost_basis_per_coin;
            //row[table.Fields[16]] = lot.asset;
            //row[table.Fields[17]] = lot.date_sold;
            //row[table.Fields[18]] = lot.sale_value_per_coin;
            //row[table.Fields[19]] = lot.sale_id;
            //row[table.Fields[20]] = lot.total_cost_basis;

            return(row);
        }
        private async Task <QvxDataRow> MakeEntry(string id, EntityModel model, QvxTable table)
        {
            var row = new QvxDataRow();
            var doc = await _bucket.GetAsync <string>(id);

            Dictionary <string, object> raw = null;

            try
            {
                raw = JsonConvert.DeserializeObject <Dictionary <string, object> >(doc.Value);
            }
            catch (Exception)
            {
                return(null);
            }

            row[table.Fields[0]] = model.Name;
            for (int i = 1; i < table.Fields.Length; i++)
            {
                row[table.Fields[i]] = raw[table.Fields[i].FieldName].ToString();
            }

            return(row);
        }
        private async Task<QvxDataRow> MakeEntry(string id, EntityModel model, QvxTable table)
        {
            var row = new QvxDataRow();
            var doc = await _bucket.GetAsync<string>(id);
            Dictionary<string, object> raw = null;

            try
            {
                raw = JsonConvert.DeserializeObject<Dictionary<string, object>>(doc.Value);
            }
            catch (Exception)
            {
                return null;
            }

            row[table.Fields[0]] = model.Name;
            for (int i = 1; i < table.Fields.Length; i++ )
                row[table.Fields[i]] = raw[table.Fields[i].FieldName].ToString();

            return row;
        }
        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);
        }
Пример #25
0
        public static QvxTable.GetRowsHandler ListBucketsRows(QvxTable table, string jsonCredentials)
        {
            string GCPProjectId = "";

            try
            {
                var JSONObj = new JavaScriptSerializer().Deserialize <Dictionary <string, string> >(jsonCredentials);
                GCPProjectId = JSONObj["project_id"];
            } catch (Exception ex)
            {
                QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Error, ex.Message);
                throw new QvxPleaseSendReplyException(QvxResult.QVX_UNKNOWN_COMMAND, "Error parsing the JSON credentials file.");
            }


            return(() =>
            {
                List <QvxDataRow> rows = new List <QvxDataRow>();
                GoogleCredential credential = null;
                StorageClient storage = null;
                Google.Api.Gax.PagedEnumerable <Buckets, Bucket> buckets = null;

                try
                {
                    credential = GoogleCredential.FromJson(jsonCredentials);
                    storage = StorageClient.Create(credential);
                    buckets = storage.ListBuckets(GCPProjectId);
                } catch (Exception ex)
                {
                    QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Error, ex.Message);
                    throw new QvxPleaseSendReplyException(QvxResult.QVX_UNKNOWN_COMMAND, "Error getting the data from Google Storage");
                }


                int length = 0;
                foreach (Bucket bucket in buckets)
                {
                    length++;
                }

                if (length == 0)
                {
                    throw new QvxPleaseSendReplyException(QvxResult.QVX_UNKNOWN_COMMAND, String.Format("No buckets found for project {0}", GCPProjectId));
                }
                else
                {
                    foreach (Bucket bucket in buckets)
                    {
                        var row = new QvxDataRow();
                        row[table.Fields[0]] = bucket.Acl?.ToString() ?? "";
                        row[table.Fields[1]] = bucket.Billing?.ToString() ?? "";
                        row[table.Fields[2]] = bucket.Cors?.ToString() ?? "";
                        row[table.Fields[3]] = bucket.ETag?.ToString() ?? "";
                        row[table.Fields[4]] = bucket.Encryption?.ToString() ?? "";
                        row[table.Fields[5]] = bucket.Id?.ToString() ?? "";
                        row[table.Fields[6]] = bucket.Kind?.ToString() ?? "";
                        row[table.Fields[7]] = bucket.Labels?.ToString() ?? "";
                        row[table.Fields[8]] = bucket.Lifecycle?.ToString() ?? "";
                        row[table.Fields[9]] = bucket.Location?.ToString() ?? "";
                        row[table.Fields[10]] = bucket.Logging?.ToString() ?? "";
                        row[table.Fields[11]] = bucket.Name?.ToString() ?? "";
                        row[table.Fields[12]] = bucket.Owner?.ToString() ?? "";
                        rows.Add(row);
                    }
                }

                return rows;
            });
        }
Пример #26
0
        public static QvxTable.GetRowsHandler ListBucketObjectsRows(IDictionary <string, string> fields, QvxTable table, string jsonCredentials)
        {
            return(() =>
            {
                List <QvxDataRow> rows = new List <QvxDataRow>();

                GoogleCredential credential = null;
                StorageClient storage = null;
                Google.Api.Gax.PagedEnumerable <Objects, Google.Apis.Storage.v1.Data.Object> bucketObjects = null;

                fields.TryGetValue("bucketname", out string bucketName);

                if (String.IsNullOrEmpty(bucketName))
                {
                    throw new QvxPleaseSendReplyException(QvxResult.QVX_UNKNOWN_COMMAND, String.Format("Missing required param: {0}", "BucketName"));
                }

                try
                {
                    credential = GoogleCredential.FromJson(jsonCredentials);
                    storage = StorageClient.Create(credential);

                    bucketObjects = storage.ListObjects(bucketName, null, null);


                    foreach (Google.Apis.Storage.v1.Data.Object bucketObject in bucketObjects)
                    {
                        var row = new QvxDataRow();
                        row[table.Fields[0]] = bucketObject.Acl?.ToString() ?? "";
                        row[table.Fields[1]] = bucketObject.Bucket?.ToString() ?? "";
                        row[table.Fields[2]] = bucketObject.CacheControl?.ToString() ?? "";
                        row[table.Fields[3]] = bucketObject.ComponentCount ?? 0;
                        row[table.Fields[4]] = bucketObject.ContentDisposition?.ToString() ?? "";
                        row[table.Fields[5]] = bucketObject.ContentEncoding?.ToString() ?? "";
                        row[table.Fields[6]] = bucketObject.ContentLanguage?.ToString() ?? "";
                        row[table.Fields[7]] = bucketObject.Crc32c.ToString() ?? "";
                        row[table.Fields[8]] = bucketObject.ETag?.ToString() ?? "";
                        row[table.Fields[9]] = bucketObject.Generation?.ToString() ?? "";
                        row[table.Fields[10]] = bucketObject.Id?.ToString() ?? "";
                        row[table.Fields[11]] = bucketObject.Kind?.ToString() ?? "";
                        row[table.Fields[12]] = bucketObject.KmsKeyName?.ToString() ?? "";
                        row[table.Fields[13]] = bucketObject.Md5Hash?.ToString() ?? "";
                        row[table.Fields[14]] = bucketObject.MediaLink?.ToString() ?? "";
                        row[table.Fields[15]] = ""; // bucketObject.Metadata?.ToString() ?? "";
                        row[table.Fields[16]] = bucketObject.Metageneration ?? 0;
                        row[table.Fields[17]] = bucketObject.Name?.ToString() ?? "";
                        row[table.Fields[18]] = bucketObject.Owner?.ToString() ?? "";
                        row[table.Fields[19]] = bucketObject.SelfLink?.ToString() ?? "";
                        row[table.Fields[20]] = bucketObject.Size ?? 0;
                        row[table.Fields[21]] = bucketObject.StorageClass?.ToString() ?? "";
                        row[table.Fields[22]] = bucketObject.TimeCreatedRaw?.ToString() ?? "";
                        row[table.Fields[23]] = bucketObject.TimeDeletedRaw?.ToString() ?? "";
                        row[table.Fields[24]] = bucketObject.TimeStorageClassUpdatedRaw?.ToString() ?? "";
                        row[table.Fields[25]] = bucketObject.UpdatedRaw?.ToString() ?? "";
                        rows.Add(row);
                    }
                }
                catch (Exception ex)
                {
                    QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Error, ex.Message);
                    throw new QvxPleaseSendReplyException(QvxResult.QVX_UNKNOWN_COMMAND, "Error getting the data from Google Storage");
                }


                return rows;
            });
        }
        private QvxDataRow MakeEntry(XmlNode rowNode, QvxTable table)
        {
            var row = new QvxDataRow();

            foreach (XmlNode field_node in rowNode.ChildNodes)
            {
                switch (field_node.Name.ToLower())
                {
                    case "billtocode":
                        row[table.Fields[0]] = field_node.InnerText;
                        break;
                    case "billtodesc":
                        row[table.Fields[1]] = field_node.InnerText;
                        break;
                    case "billtoeffdt":
                        row[table.Fields[2]] = field_node.InnerText;
                        break;
                    case "billtoexpdt":
                        row[table.Fields[3]] = field_node.InnerText;
                        break;
                }
            }

            //row[table.Fields[0]] = "CODE VALUE 1";
            //row[table.Fields[1]] = "CODE DESCRIPTION 1";
            //row[table.Fields[2]] = DateTime.Now.ToString();
            //row[table.Fields[3]] = DateTime.Now.ToString();

            //row[table.Fields[0]] = evl.Category;
            //row[table.Fields[1]] = evl.EntryType.ToString();
            //row[table.Fields[2]] = evl.Message;
            //row[table.Fields[3]] = evl.CategoryNumber.ToString();
            //row[table.Fields[4]] = evl.Index.ToString();
            //row[table.Fields[5]] = evl.MachineName;
            //row[table.Fields[6]] = evl.Source;
            //row[table.Fields[7]] = evl.TimeGenerated.ToString();

            return row;
        }
        public static IEnumerable <QvxDataRow> GetReportData(QvxConnection connection, QvxFieldsWrapper fields, string reportID)
        {
            IDictionary <string, string> connectionParams = GetParamsFromConnection(connection);

            if (connectionParams == null)
            {
                return(new List <QvxDataRow>());
            }

            return(ValidateAccessTokenAndPerformRequest(connection,
                                                        connectionParams,
                                                        accessToken =>
            {
                Uri hostUri = new Uri(connectionParams[QvxSalesforceConnectionInfo.CONNECTION_HOST]);
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(hostUri,
                                                                                   "/services/data/" + QvxSalesforceConnectionInfo.SALESFORCE_API_VERSION + "/analytics/reports/" + reportID + "?includeDetails=true"));
                request.Method = "GET";
                WebHeaderCollection headers = new WebHeaderCollection();
                headers.Add("Authorization", "Bearer " + accessToken);
                request.Headers = headers;

                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    using (Stream stream = response.GetResponseStream())
                    {
                        StreamReader reader = new StreamReader(stream, Encoding.UTF8);
                        string responseString = reader.ReadToEnd();

                        JsonReader jsonReader = new JsonTextReader(new StringReader(responseString));
                        jsonReader.DateParseHandling = DateParseHandling.None;
                        JObject jsonResponse = JObject.Load(jsonReader);

                        IEnumerable <QvxDataRow> rows = jsonResponse["factMap"].First.First["rows"].Values <JObject>().Select(
                            dr =>
                        {
                            QvxDataRow row = new QvxDataRow();
                            for (int i = 0; i < fields.GetLength(); i++)
                            {
                                if (fields.GetFieldType(i) == SalesforceDataType.Double || fields.GetFieldType(i) == SalesforceDataType.Percent)
                                {
                                    try
                                    {
                                        row[fields.GetField(i)] = dr.First.First.ElementAt(i)["value"].Value <double>();
                                    }
                                    catch
                                    {
                                        row[fields.GetField(i)] = null;
                                    }
                                }
                                else if (fields.GetFieldType(i) == SalesforceDataType.Integer)
                                {
                                    try
                                    {
                                        row[fields.GetField(i)] = dr.First.First.ElementAt(i)["value"].Value <int>();
                                    }
                                    catch
                                    {
                                        row[fields.GetField(i)] = null;
                                    }
                                }
                                else if (fields.GetFieldType(i) == SalesforceDataType.Boolean)
                                {
                                    try
                                    {
                                        row[fields.GetField(i)] = dr.First.First.ElementAt(i)["value"].Value <bool>();
                                    }
                                    catch
                                    {
                                        row[fields.GetField(i)] = null;
                                    }
                                }
                                else if (fields.GetFieldType(i) == SalesforceDataType.Currency)
                                {
                                    if (dr.First.First.ElementAt(i)["value"].HasValues)
                                    {
                                        row[fields.GetField(i)] = dr.First.First.ElementAt(i)["value"].Value <double>("amount");
                                    }
                                    else
                                    {
                                        row[fields.GetField(i)] = null;
                                    }
                                }
                                else if (fields.GetFieldType(i) == SalesforceDataType.Date || fields.GetFieldType(i) == SalesforceDataType.DateTime)
                                {
                                    string dt = dr.First.First.ElementAt(i)["value"].Value <string>();

                                    if (string.IsNullOrWhiteSpace(dt) || dt == "-")
                                    {
                                        row[fields.GetField(i)] = null;
                                    }
                                    else
                                    {
                                        DateTime datetime;
                                        if (dt.ToLower(CultureInfo.InvariantCulture).EndsWith("z"))
                                        {
                                            datetime = DateTime.ParseExact(dt, "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture);
                                        }
                                        else
                                        {
                                            datetime = DateTime.ParseExact(dt, "yyyy-MM-dd", CultureInfo.InvariantCulture);
                                        }
                                        row[fields.GetField(i)] = datetime.ToOADate();
                                    }
                                }
                                else
                                {
                                    row[fields.GetField(i)] = dr.First.First.ElementAt(i)["label"].Value <string>();
                                }
                            }
                            return row;
                        });
                        return rows;
                    }
                }
            }));
        }
Пример #29
0
        private QvxDataRow MakeEntry(DataRow dr, QvxTable table)
        {
            QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Notice, "MakeEntry()");

            var row = new QvxDataRow();

            foreach (DataColumn dc in dr.Table.Columns)
            {
                row[table[dc.ColumnName]] = dr[dc].ToString();
            }

            return row;
        }
        public TableHelper GetTableInfosFromApp(string tableName, ScriptCode script, ConnectorParameter parameter, QlikApp qlikApp = null)
        {
            try
            {
                var resultTable = new QvxTable()
                {
                    TableName = tableName,
                };

                HyperCubePager    pager       = null;
                IEnumerable <int> columnOrder = null;
                var fields = new List <QvxField>();
                var rows   = new List <QvxDataRow>();
                var size   = new Size();

                if (qlikApp == null)
                {
                    qlikApp = AppInstance.GetQlikInstance(parameter, script.AppId);
                }

                if (qlikApp == null)
                {
                    return(null);
                }

                var masterObject = qlikApp.FirstSession.CurrentApp.GetMasterObjectAsync(script.ObjectId).Result;
                if (masterObject != null)
                {
                    logger.Debug($"find master object: {script.ObjectId}");
                    var genericObject = qlikApp.FirstSession.CurrentApp.CreateGenericSessionObjectAsync(masterObject.Properties).Result;
                    pager = genericObject.GetAllHyperCubePagers().FirstOrDefault() ?? null;
                    var tableLayout = genericObject.GetLayout().As <TableLayout>();
                    var hyperCube   = tableLayout.HyperCube;
                    columnOrder = hyperCube.ColumnOrder;
                    size        = hyperCube.Size;
                    fields.AddRange(GetHyperCubeFields(hyperCube.DimensionInfo, hyperCube.MeasureInfo, script));
                }
                var table = qlikApp.FirstSession.CurrentApp.GetObjectAsync <Table>(script.ObjectId).Result;
                if (table != null)
                {
                    logger.Debug($"table object: {script.ObjectId}");
                    pager       = table.HyperCubePager;
                    columnOrder = table.ColumnOrder;
                    size        = table.Size;
                    fields.AddRange(GetHyperCubeFields(table.DimensionInfo, table.MeasureInfo, script));
                }

                var preview = new PreviewResponse()
                {
                    MaxCount = 15,
                };

                if (script != null)
                {
                    var initalPage = new NxPage {
                        Top = 0, Left = 0, Width = size.cx, Height = preview.MaxCount
                    };
                    var allPages = new List <IEnumerable <NxDataPage> >();
                    allPages.Add(pager.GetData(new List <NxPage>()
                    {
                        initalPage
                    }));
                    if (script.Full)
                    {
                        var pageHeight = Math.Min(size.cy * size.cx, 5000) / size.cx;
                        logger.Debug($"read data - column count: {size.cx}");
                        initalPage = new NxPage {
                            Top = 0, Left = 0, Width = size.cx, Height = pageHeight
                        };
                        allPages         = pager.IteratePages(new[] { initalPage }, Pager.Next).ToList();
                        preview.MaxCount = 0;
                    }
                    if (allPages == null)
                    {
                        throw new Exception($"no dimension in table {script.ObjectId} exits.");
                    }
                    logger.Debug($"read pages - count {allPages.Count}");
                    foreach (var page in allPages)
                    {
                        var allMatrix = page?.SelectMany(p => p.Matrix);
                        foreach (var matrix in allMatrix)
                        {
                            var row  = new QvxDataRow();
                            var hrow = new PreviewRow();
                            var drow = new PreviewRow();
                            foreach (var order in columnOrder)
                            {
                                if (order < fields.Count)
                                {
                                    var field = fields[order];
                                    row[field] = matrix[order].Text;
                                    if (!preview.qPreview.Any(s => s.qValues.Contains(field.FieldName)))
                                    {
                                        hrow.qValues.Add(field.FieldName);
                                    }
                                    if (preview.qPreview.Count <= preview.MaxCount)
                                    {
                                        drow.qValues.Add(matrix[order].Text);
                                    }
                                }
                            }
                            rows.Add(row);
                            if (hrow.qValues.Count > 0)
                            {
                                preview.qPreview.Add(hrow);
                            }
                            if (drow.qValues.Count > 0)
                            {
                                preview.qPreview.Add(drow);
                            }
                        }
                    }
                }

                resultTable.Fields  = fields.ToArray();
                resultTable.GetRows = () => { return(rows); };
                logger.Debug($"return table {resultTable.TableName}");
                return(new TableHelper(resultTable, preview));
            }
            catch (Exception ex)
            {
                logger.Error(ex, "can´t read table infos.");
                return(null);
            }
        }
Пример #31
0
        /// <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);
                            }
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Creates a Qvx data entry from an Svn log entry.
        /// </summary>
        /// <param name="item">The Svn log entry to be used as a source</param>
        /// <param name="table">The destination Qvx table</param>
        /// <returns>The resulting row</returns>
        private QvxDataRow MakeEntry(SvnLogEventArgs entry, QvxTable table)
        {
            QvxDataRow row = new QvxDataRow();

            row[table.Fields[0]] = entry.Author;
            row[table.Fields[1]] = entry.LogMessage;
            row[table.Fields[2]] = entry.Revision;
            row[table.Fields[3]] = entry.Time.ToOADate();

            return row;
        }
        /// <summary>
        /// Return all rows in the QvxTable.
        /// </summary>
        /// <returns>IEnumerable with all QvxDataRow elements of m_Table member.</returns>
        private IEnumerable<QvxDataRow> GetRows()
        {
            var connectionString = new StringBuilder();
            // The default return fields for a friend is id and name. We need more information for the QlikView example application.
            connectionString.Append("fields=");

            var supportedFields = Enum.GetNames(typeof(EntertainmentFields));
            foreach (var field in supportedFields)
            {
                connectionString.Append(field);
                if (field != supportedFields.Last())
                {
                    connectionString.Append(",");
                }
            }
            var connectionData = _facebookConnection.LoadConnectionData(_tableName, connectionString.ToString());
            var rows = new List<QvxDataRow>();

            try
            {
                foreach (var item in connectionData["data"])
                {
                    var row = new QvxDataRow();

                    for (var i = 0; i < supportedFields.Length; i++)
                    {
                        var field = supportedFields[i];
                        var tableIndex = _facebookConnection.IndexOfTable(_tableName);

                        try
                        {
                            row[_facebookConnection.MTables[tableIndex].Fields[i]] = item[field];
                        }
                        catch (KeyNotFoundException)
                        {
                            // If the field does not exist set it to empty (the person has not specified the information)
                            row[_facebookConnection.MTables[tableIndex].Fields[i]] = "";
                        }
                    }

                    rows.Add(row);
                }
            }
            catch (Exception ex)
            {
                QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Error, String.Format("EntertainmentTable GetRows for {0} :{1}", _tableName, ex.Message));
                // Forward the error message to QlikView
                throw;
            }

            return rows;
        }
Пример #34
0
        private QvxDataRow InsertRow(dynamic sourceRow, QvxTable tableDef, dynamic parentData)
        {
            QvxDataRow destRow = new QvxDataRow();
            foreach (QvxField fieldDef in tableDef.Fields)
            {
                dynamic originalDef = helper.ActiveFields[fieldDef.FieldName];
                dynamic sourceField;
                if(originalDef.path.ToString().IndexOf("{parent}")==-1){
                    sourceField = GetSourceValue(sourceRow, originalDef.path.ToString(), originalDef.type.ToString());
                }
                else{
                    String parentPath = originalDef.path.ToString();
                    parentPath = parentPath.Replace("{parent}.", "");
                    sourceField = GetSourceValue(parentData, parentPath, originalDef.type.ToString());
                }

                if (sourceField != null)
                {
                    destRow[fieldDef] = sourceField.ToString();
                }
                else if (originalDef.path.ToString()=="")
                {
                    sourceField = GetSourceValue(sourceRow, null, originalDef.type.ToString());
                }
            }
            //recordsLoaded++;
            return destRow;
        }