private void UnMarkRelatedRecoredsAsDeleted(Epi.Data.Services.CollectedDataProvider OutputDriver, View pView, List<int> pIDList) { Dictionary<string, bool> VisitedViews = new Dictionary<string, bool>(StringComparer.OrdinalIgnoreCase); string SQL = null; StringBuilder InSQL = new StringBuilder(); InSQL.Append(" Where FKey In ("); foreach (int ID in pIDList) { pView.LoadRecord(ID); pView.RecStatusField.CurrentRecordValue = 1; pView.SaveRecord(ID); InSQL.Append("'"); InSQL.Append(pView.CurrentGlobalRecordId); InSQL.Append("',"); } InSQL.Length = InSQL.Length - 1; InSQL.Append(")"); foreach (Epi.Fields.Field field in pView.Fields) { if (field is Epi.Fields.RelatedViewField) { Epi.Fields.RelatedViewField rvf = field as Epi.Fields.RelatedViewField; if (!VisitedViews.ContainsKey(rvf.ChildView.Name)) { SQL = "Select UniqueKey From [" + rvf.ChildView.TableName + "] " + InSQL.ToString(); IDataReader reader = OutputDriver.ExecuteReader(OutputDriver.CreateQuery(SQL)); List<int> NewIdList = new List<int>(); while (reader.Read()) { if (reader["UniqueKey"] != DBNull.Value) { NewIdList.Add((int)reader["UniqueKey"]); } } VisitedViews.Add(rvf.ChildView.Name, true); UnMarkRelatedRecoredsAsDeleted(OutputDriver, rvf.ChildView, NewIdList); } } } }
private void CascadePermanentDelete(Epi.Data.Services.CollectedDataProvider OutputDriver, View pView, List<int> pIDList) { Dictionary<string, bool> VisitedViews = new Dictionary<string, bool>(StringComparer.OrdinalIgnoreCase); string SQL = null; StringBuilder InSQL = new StringBuilder(); InSQL.Append(" ("); foreach (int ID in pIDList) { pView.LoadRecord(ID); InSQL.Append("'"); InSQL.Append(pView.CurrentGlobalRecordId); InSQL.Append("',"); } InSQL.Length = InSQL.Length - 1; InSQL.Append(")"); foreach (Epi.Fields.Field field in pView.Fields) { if (field is Epi.Fields.RelatedViewField) { Epi.Fields.RelatedViewField rvf = field as Epi.Fields.RelatedViewField; if (!VisitedViews.ContainsKey(rvf.ChildView.Name)) { SQL = "Select UniqueKey From [" + rvf.ChildView.TableName + "] Where FKey In " + InSQL.ToString(); IDataReader reader = OutputDriver.ExecuteReader(OutputDriver.CreateQuery(SQL)); List<int> NewIdList = new List<int>(); while (reader.Read()) { if (reader["UniqueKey"] != DBNull.Value) { NewIdList.Add((int)reader["UniqueKey"]); } } VisitedViews.Add(rvf.ChildView.Name, true); CascadePermanentDelete(OutputDriver, rvf.ChildView, NewIdList); } } else if(field is Epi.Fields.GridField) { Epi.Fields.GridField gf = field as Epi.Fields.GridField; SQL = "Delete from [" + gf.TableName + "] Where FKey In " + InSQL.ToString(); OutputDriver.ExecuteNonQuery(OutputDriver.CreateQuery(SQL)); } } foreach (Epi.Page page in pView.Pages) { SQL = "Delete from [" + page.TableName + "] Where GlobalRecordId In " + InSQL.ToString(); OutputDriver.ExecuteNonQuery(OutputDriver.CreateQuery(SQL)); } SQL = "Delete from [" + pView.TableName + "] Where GlobalRecordId In " + InSQL.ToString(); OutputDriver.ExecuteNonQuery(OutputDriver.CreateQuery(SQL)); }