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 }
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); }