예제 #1
0
        private void GetData(BloombergDataInstrument instrument, BB.Element fields, BB.Element secData)
        {
            #region security errors
            if (secData.HasElement(SECURITY_ERROR))
            {
                instrument.IsSecurityValid = false;
                BB.Element error = secData.GetElement(SECURITY_ERROR);
                UpdateStatus(string.Format("Security error for ticker {0} : {1}", instrument.Ticker, error.GetElementAsString(MESSAGE)));
                instrument.SecurityErrors += (error.GetElementAsString(MESSAGE) + "; ");
            }
            #endregion

            #region field errors
            if (secData.HasElement(FIELD_EXCEPTIONS))
            {
                instrument.HasFieldErrors = true;
                // process error
                BB.Element error = secData.GetElement(FIELD_EXCEPTIONS);
                for (int errorIndex = 0; errorIndex < error.NumValues; errorIndex++)
                {
                    BB.Element errorException = error.GetValueAsElement(errorIndex);
                    BB.Element errorInfo      = errorException.GetElement(ERROR_INFO);

                    instrument.BBFields[errorException.GetElementAsString(FIELD_ID)].Error = errorInfo.GetElementAsString(MESSAGE);
                    instrument.HasFieldErrors = true;
                    string msg = string.Format("Field error for ticker {0} : Field {1}: {2}",
                                               instrument.Ticker,
                                               errorException.GetElementAsString(FIELD_ID),
                                               errorInfo.GetElementAsString(MESSAGE));
                    UpdateStatus(msg);
                }
            }
            #endregion

            #region get the data
            if (instrument.BBFields != null)
            {
                lock (lockObject) {
                    foreach (string bbField in instrument.BBFields.Keys.ToList())
                    {
                        if (fields.HasElement(bbField))
                        {
                            BB.Element item = fields.GetElement(bbField);
                            if (item.IsArray)
                            {
                                instrument.BBFields[bbField].Value = processBulkData(item);
                            }
                            else
                            {
                                // set the value in the instrument field item
                                instrument.BBFields[bbField].Value = item.GetValue();
                            }
                        }
                    }
                }
            }
            #endregion
        }
예제 #2
0
        public System.Data.DataTable ExtractValueByName(Bloomberglp.Blpapi.Element argvElement, string[] argvNames)
        {
            System.Data.DataTable tReturnValue = new System.Data.DataTable();
            string[] tUpperCaseNames           = new string[argvNames.Length];
            for (int i = 0; i < argvNames.Length; i++)
            {
                tUpperCaseNames[i] = argvNames[i].ToUpper();
                tReturnValue.Columns.Add(tUpperCaseNames[i]);
            }

            if (argvElement.Datatype == Schema.Datatype.CHOICE || argvElement.Datatype == Schema.Datatype.SEQUENCE)
            {
                List <Bloomberglp.Blpapi.Element> tSubElementArray = new List <Element>();
                if (argvElement.IsArray)
                {
                    for (int i = 0; i < argvElement.NumValues; i++)
                    {
                        tSubElementArray.Add((Bloomberglp.Blpapi.Element)argvElement.GetValue(i));
                    }
                }
                else
                {
                    foreach (Bloomberglp.Blpapi.Element tSubElement in argvElement.Elements)
                    {
                        tSubElementArray.Add(tSubElement);
                    }
                }

                bool tRowIsAdded = false;
                foreach (Bloomberglp.Blpapi.Element tSubElement in tSubElementArray)
                {
                    //Console.WriteLine(temp_sub_element.Name.ToString() + " type is " + temp_sub_element.Datatype.ToString());
                    if (tSubElement.Datatype == Schema.Datatype.CHOICE || tSubElement.Datatype == Schema.Datatype.SEQUENCE)
                    {
                        System.Data.DataTable tLowerLevelValueTable = this.ExtractValueByName(tSubElement, tUpperCaseNames);
                        foreach (System.Data.DataRow tLowerLevelValueRow in tLowerLevelValueTable.Rows)
                        {
                            System.Data.DataRow tNewRow = tReturnValue.NewRow();
                            foreach (System.Data.DataColumn tColumn in tLowerLevelValueTable.Columns)
                            {
                                tNewRow[tColumn.ColumnName] = tLowerLevelValueRow[tColumn.ColumnName];
                            }
                            tReturnValue.Rows.Add(tNewRow);
                        }
                    }
                    else if (tSubElement.NumValues > 0)
                    {
                        //Console.WriteLine(temp_sub_element.Name.ToString() + " value is " + temp_sub_element.GetValueAsString(0));
                        if (tUpperCaseNames.Contains(tSubElement.Name.ToString().ToUpper()))
                        {
                            if (!tRowIsAdded)
                            {
                                System.Data.DataRow tNewRow = tReturnValue.NewRow();
                                tReturnValue.Rows.Add(tNewRow);
                                tRowIsAdded = true;
                            }
                            System.Type tValueType = tSubElement.GetValue().GetType();
                            if (tValueType == typeof(Datetime))
                            {
                                tReturnValue.Rows[tReturnValue.Rows.Count - 1][tSubElement.Name.ToString().ToUpper()] = tSubElement.GetValueAsDatetime().ToSystemDateTime().ToString("yyyyMMdd HHmmss.fff");
                            }
                            else
                            {
                                tReturnValue.Rows[tReturnValue.Rows.Count - 1][tSubElement.Name.ToString().ToUpper()] = tSubElement.GetValueAsString(0);
                            }
                        }
                    }
                }
            }

            return(tReturnValue);
        }