public bool FetchDataFromCellsMisys(object objCommand, ref object objResult, ref object objError) { Logger.logBegin("FetchDataFromCellsMisys"); const string cnst_CONDITION = "CONDITION:"; string strCommand = objCommand == null ? null : objCommand.ToString(); try { if (string.IsNullOrEmpty(strCommand)) { throw new Exception("objCommand should not be NULL or empty"); } /** check Command **/ /* ' format : * ' ROWS_LIMIT:0:0;Code/Name * ' ALLROWS;ColumnsName * ' CONDITION:COLUMN=A;ColumnName;NOSUB, Example: CONDITION:0=@FO_test;Income;NOSUB * ' NOSUB means don't get all sub information, other wise get all sub expanded rows * */ if (!TigerMarsUtil.RegularTest("^CONDITION:", strCommand)) { throw new Exception(string.Format("No supported Command, [{0}]", strCommand)); } //objReflect.GetMember<object>(objDataSrcTmp,"") if (TigerMarsUtil.RegularTest("^" + cnst_CONDITION, strCommand)) { #region CONDITION MODE //CONDITION:COLUMN=A;ColumnName;NOSUB, Example: CONDITION:0=@FO_test;Income;NOSUB if (!TigerMarsUtil.RegularTest(@"CONDITION:\S+=\S{1,};\b\w+\b(;NOSUB){0,1}", strCommand)) { objError = string.Format("RC should match CONDITION:\\b\\w+\\b=\\w+;\\b\\w+\\b(;NOSUB), Command:{0}", strCommand); Logger.Error("FetchDataFromCellsMisys", (string)objError); return(false); } string strCmdNoHeader = strCommand.Replace(cnst_CONDITION, ""); string[] arrTargetField = strCmdNoHeader.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); string strTargetField = arrTargetField[1]; string[] arrCondition = arrTargetField[0].Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries); TreeList objTr = (TreeList)base.SourceControl; CustomTreeList objCTrlst = (CustomTreeList)objTr; object objDataSrcTmp = objCTrlst.DataSource; ReflectorForCSharp objReflect = new ReflectorForCSharp(); CSMPortfolio objPortC = null; CSMPosition objPortCsub = null; //object objPortfolio = objReflect.GetMember<object>(objDataSrcTmp, "Portfolio"); //CSMPortfolio objPortC = (CSMPortfolio)objPortfolio; //double dIncome = objPortC.GetIncome(); object tmpData = objReflect.GetMember <object>(objTr, "Data"); UnboundData unData = (UnboundData)tmpData; VirtualDataRow objVDataRow = null; bool isFind = false; string strHeadName = ""; int iLevel = -1; double dDat = 0.00; string strResult = "", strTmp = ""; for (int i = 0; i < unData.DataList.Count; i++) { objVDataRow = (VirtualDataRow)unData.DataList[i]; objPortC = (CSMPortfolio)(objReflect.GetMember <object>(objVDataRow.VirtualNode, "Portfolio")); iLevel = objPortC.GetLevel(); if ((iLevel <= 1) && (isFind)) { break; } strHeadName = objPortC.GetName() == null?"":objPortC.GetName().ToString(); if (!isFind) { /** Only the root level can be taken as comparison node **/ if (iLevel != 1) { continue; } if (!TigerMarsUtil.RegularTest(arrCondition[1], strHeadName)) { continue; } else { isFind = true; } } switch (strTargetField.ToUpper()) { case "INCOME": dDat = objPortC.GetIncome() * 1000; strTmp = dDat.ToString("0."); break; case "NAV": dDat = objPortC.GetNetAssetValue() * 1000; strTmp = dDat.ToString("0."); break; case "RESULT": dDat = objPortC.GetResult() * 1000; strTmp = dDat.ToString("0."); break; case "REALIZED": dDat = objPortC.GetRealised() * 1000; strTmp = dDat.ToString("0."); break; case "BALANCE": dDat = objPortC.GetBalance() * 1000; strTmp = dDat.ToString("0."); break; default: throw new Exception(string.Format("Not supported field :[{0}]", strTargetField)); } if (string.IsNullOrEmpty(strResult)) { strResult = string.Format("[{0}{1}]", strHeadName, FormatStrWithTab(0, strTmp)); } else { strResult = string.Format("{0}\n\r{1}", strResult, string.Format("[{0}{1}]", strHeadName, FormatStrWithTab(0, strTmp))); } for (int j = 0; j < objVDataRow.Children.Count; j++) { //objVDataRow.Children[j]; objPortCsub = (CSMPosition)objReflect.GetMember <object>(objVDataRow.Children[j], "Position"); strHeadName = objVDataRow.Children[j].ToString(); if (objPortCsub == null) { continue; } switch (strTargetField.ToUpper()) { case "INCOME": dDat = objPortCsub.GetIncome() * 1000; strTmp = dDat.ToString("0."); break; case "NAV": dDat = objPortCsub.GetNetAssetValue() * 1000; strTmp = dDat.ToString("0."); break; case "RESULT": dDat = objPortCsub.GetResult() * 1000; strTmp = dDat.ToString("0."); break; case "REALIZED": dDat = objPortCsub.GetRealised() * 1000; strTmp = dDat.ToString("0."); break; case "BALANCE": dDat = objPortCsub.GetBalance() * 1000; strTmp = dDat.ToString("0."); break; default: throw new Exception(string.Format("Not supported field :[{0}]", strTargetField)); } strResult = string.Format("{0}\n\r{1}", strResult, string.Format("[{0} {1}]", strHeadName, FormatStrWithTab(0, strTmp))); } break; } objResult = strResult; return(true); #endregion //CONDTION MODE } objError = string.Format("Unsupported Command formatter:[{0}]", strCommand); return(false); } catch (Exception e) { objError = e.Message; Logger.Error("FetchDataFromCellsMisys", string.Format("Errors come across. Exception:[{0}]", e.Message), e); return(false); } finally { Logger.logEnd("FetchDataFromCellsMisys"); } }
private bool FindNodeBySettings_Sophis(Sophis.Util.GUI.CustomTreeList objTreeList, int iDepths, int iCurrentDep, string[] arrNodeSearchItems, ref TreeListNode objCurrentNode, int iColumn) { Logger.logBegin("FindNodeBySettings_Sophis"); ReflectorForCSharp objReflector = new ReflectorForCSharp(); try { TreeListData objData = objReflector.GetMember <TreeListData>(objTreeList, "Data"); if (objData == null) { Logger.Info("FindNodeBySettings_Sophis", "Can't get Data from object instance via reflection."); return(false); } if (objData.DataList == null) { Logger.Info("FindNodeBySettings_Sophis", "DataList is null"); return(false); } /** + virtualDataHelper {Sophis.Util.GUI.CustomTLVDH} DevExpress.XtraTreeList.TreeList.TreeListVirtualDataHelper {Sophis.Util.GUI.CustomTLVDH} * - objData.DataHelper {DevExpress.XtraTreeList.Data.TreeListDataHelper} DevExpress.XtraTreeList.Data.TreeListDataHelper * * * object o = objData.GetValue(0, 0); * string strCellDis = objTreeList.Nodes[0].GetDisplayText(objTreeList.Columns[0]) ; * object or = objData.GetDataRow(objTreeList.Nodes[0].Id); * strCellDis = objData.GetDisplayText(objTreeList.Nodes[0].Id, objTreeList.Columns[0].AbsoluteIndex, objTreeList.Nodes[0]); * object oc = objReflector.GetMember<object>(objTreeList, "CurrencyManager"); * object ov = objReflector.CallPrivateMethod<object>(objTreeList, "GetNodeValue", new object[] {objTreeList.Nodes[0],objTreeList.Columns[0] }); * object objHelper0 = objReflector.GetMember<object>(objTreeList, "VirtualDataHelper"); * object objHelper2 = objReflector.GetPrivateProperty<object>(objTreeList, "VirtualDataHelper"); * TreeList.TreeListVirtualDataHelper objDataHelper = (TreeList.TreeListVirtualDataHelper)(objHelper0) ; * object objCellData = objDataHelper.GetCellDataViaEvent(((VirtualDataRow)objData.DataList[0]).Node, objTreeList.Columns[0]); * objCellData = objDataHelper.GetCellDataViaEvent(objTreeList.Nodes[0], objTreeList.Columns[0]); * objCellData = objDataHelper.GetCellDataViaInterface(((VirtualDataRow)objData.DataList[0]).Node, objTreeList.Columns[0], null); * objCellData = objDataHelper.GetCellDataViaInterface(objTreeList.Nodes[0], objTreeList.Columns[0], null); * object value = typeof(TreeListVirtualData).GetField("virtualNodeToDataRowCache", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(objData); * **/ //DevExpress.XtraTreeList.TreeList.TreeListVirtualDataHelper objHelper1 = objReflector.GetPrivateProperty<DevExpress.XtraTreeList.TreeList.TreeListVirtualDataHelper>(objTreeList, "virtualDataHelper"); //GetCellDataViaEvent for (int i = 0; i < objData.DataList.Count; i++) { object objRawItem = objData.DataList[i]; if (!(objRawItem is VirtualDataRow)) { /** I don't know what it could be **/ continue; } VirtualDataRow objRow = (VirtualDataRow)objRawItem; if (objRow.VirtualNode == null) { continue; } string strCaption = objRow.VirtualNode.ToString(); if (TigerMarsUtil.RegularTest(arrNodeSearchItems[iCurrentDep], strCaption)) { /** find **/ Logger.Info("FindNodeBySettings_Sophis", string.Format("Find Level [{0}] node information [{1}], with node value is:[{2}]", iCurrentDep, arrNodeSearchItems[iCurrentDep], strCaption)); if (iCurrentDep == iDepths - 1) { objCurrentNode = objTreeList.Nodes[i]; objTreeList.FocusedNode = objTreeList.Nodes[i]; } return(true); } } return(false); } catch (Exception e) { Logger.Error("FindNodeBySettings_Sophis", string.Format("Exceptions when trying to get data via Reflection. Exception:[{0}]", e.Message), e); return(false); } }