} // end of Populate() /// <summary> /// Processes the history for current record. /// </summary> /// <param name="initialView">First history item structure</param> /// <param name="migratedHistory">No of history items already migrated</param> /// <returns>List of history items except first one</returns> private ArrayList ProcessHistory(Hashtable initialView, int migratedHistory) { int noOfHistory = 0; ArrayList historyItems = new ArrayList(); try { Logger.Write(LogSource.CQ, TraceLevel.Verbose, "Processing History for {0} : {1}", m_entityName, m_sourceId); // record all history items except the first one Hashtable currentHistory = null; OAdHistoryFields cqHistFields = CQWrapper.GetHistoryFields(m_CQEntity); int historyFldCount = CQWrapper.HistoryFieldsCount(cqHistFields); for (int histFldIndex = 0; histFldIndex < historyFldCount; histFldIndex++) { object ob = (object)histFldIndex; OAdHistoryField historyField = CQWrapper.HistoryFieldsItem(cqHistFields, ref ob); int historyCount = CQWrapper.HistoryFieldHistoriesCount(historyField); for (int histIndex = migratedHistory; histIndex < historyCount; histIndex++) { if (histIndex == 0) { // first history.. use the initial view to record history currentHistory = initialView; } else { // create a new instance to record history InMemoryHistoryItem imHistItem = new InMemoryHistoryItem(); historyItems.Add(imHistItem); currentHistory = imHistItem.UpdatedView; } object obHistIndex = (object)histIndex; OAdHistory aHistory = CQWrapper.HistoryFieldHistoriesItem(historyField, ref obHistIndex); string[] parsedString = CQWrapper.HistoryValue(aHistory).Split('\t'); Debug.Assert(parsedString != null && parsedString.Length >= 6); string date = parsedString[1]; string user = parsedString[2]; string action = parsedString[3]; string oldstate = parsedString[4]; string newstate = parsedString[5]; DateTime changedDate = DateTime.Parse(date, CultureInfo.CurrentCulture); Logger.Write(LogSource.CQ, TraceLevel.Verbose, "History Item : [{0}] [{1}] [{2}] [{3}]", changedDate, user, oldstate, newstate); string historyval = UtilityMethods.Format(CQResource.CQ_HISTORY_STRING, changedDate.ToString(CultureInfo.CurrentCulture), user, action, oldstate, newstate); currentHistory.Add("History", historyval); currentHistory.Add("user_name", user); currentHistory.Add("Reason", action); if (!String.Equals("N/A", newstate, StringComparison.Ordinal)) { // add state only if state is valid currentHistory.Add("State", newstate); } noOfHistory++; #if DEBUG CommonConstants.NoOfHistory++; #endif } } } finally { } return(historyItems); } // end of ProcessHistory()