protected RevisionedObject ResolveRDO(RevisionedObject rdo_changes, out string idProperty_Name) { object to_change = null; string idProperty_Value = Service.GetIdentityFieldValue(rdo_changes, out idProperty_Name); if (idProperty_Value == null || idProperty_Value == "0") { to_change = ResolveCDO(rdo_changes.GetType(), rdo_changes.DisplayName); } else { to_change = ResolveCDOByID(rdo_changes.GetType(), idProperty_Value); } return(to_change as RevisionedObject); }
virtual protected bool Update(RevisionedObject rdo_changes, out RevisionedObject to_change) { string idProperty_Name; to_change = ResolveRDO(rdo_changes, out idProperty_Name); if (to_change != null) { ObjScope.Transaction.Begin(); foreach (PropertyInfo pi in rdo_changes.GetType().GetProperties()) { if (pi.Name == idProperty_Name || pi.Name == "RevBase") { continue; // do not update Primary Property and RevBase } object v_changes = pi.GetValue(rdo_changes, null); if (v_changes != null && (pi.CanWrite || v_changes.GetType().IsGenericType)) { SetProperty(to_change, pi, v_changes); } } ObjScope.Transaction.Commit(); return(true); } else { return(false); } }
virtual public bool Add(RevisionedObject rdo_insert) { string idProperty_Name = null; object check_exist = ResolveRDO(rdo_insert, out idProperty_Name); if (check_exist == null) { // Reuse exist RevBase if exist object rdo_base_exist = ResolveCDO(rdo_insert.RevBase.GetType(), rdo_insert.RevBase.Name); if (rdo_base_exist != null) { rdo_insert.RevBase = rdo_base_exist as RevisionBase; } foreach (PropertyInfo pi in rdo_insert.GetType().GetProperties()) { if (pi.Name == idProperty_Name || pi.Name == "RevBase") { continue; // do not update Primary Property and RevBase } object v_changes = pi.GetValue(rdo_insert, null); if (v_changes != null && (pi.CanWrite || v_changes.GetType().IsGenericType)) { SetProperty(rdo_insert, pi, v_changes); } } ObjScope.Transaction.Begin(); ObjScope.Add(rdo_insert); ObjScope.Transaction.Commit(); return(true); } else { return(false); } }
private int RDOBaseUsageCount(RevisionedObject rdo_obj) { const string queryRDOBaseUsageCount = "SELECT COUNT(*) FROM {0}Extent AS o WHERE o.RevBase = $1"; int count = 0; IQuery oqlQuery = ObjScope.GetOqlQuery(string.Format(queryRDOBaseUsageCount, rdo_obj.GetType().Name)); IQueryResult result = oqlQuery.Execute(rdo_obj.RevBase); if (result.Count > 0) { count = (int)result[0]; } result.Dispose(); return(count); }