//Journalise les données d'un élement public CVersionDonneesObjet JournaliseDonnees(System.Data.DataRow row, CVersionDonnees version) { CVersionDonneesObjet versionObjet = null; if (row.RowState != DataRowState.Added && row.RowState != DataRowState.Modified && row.RowState != DataRowState.Deleted) { return(null); } Type typeElement = CContexteDonnee.GetTypeForTable(row.Table.TableName); versionObjet = version.GetVersionObjetAvecCreation(row); if (versionObjet == null) { return(null); } if (row.HasVersion(DataRowVersion.Original)) { CStructureTable structure = CStructureTable.GetStructure(typeElement); foreach (CInfoChampTable info in structure.Champs) { if (info.m_bIsInDB) { new CJournaliseurChampDb().JournaliseDonneeInContexte(versionObjet, info.NomChamp, row); } } } return(versionObjet); }
//--------------------------------------------------------------------- public CVersionDonneesObjetOperation JournaliseDonneeInContexte( CVersionDonneesObjet version, string strChampDeTable, DataRow row) { if (version != null && row.Table.Columns.Contains(strChampDeTable)) { object valeurAvant = DBNull.Value; object valeurApres = DBNull.Value; if (row.HasVersion(DataRowVersion.Original)) { valeurAvant = row[strChampDeTable, DataRowVersion.Original]; } if (row.HasVersion(DataRowVersion.Current)) { valeurApres = row[strChampDeTable, DataRowVersion.Current]; } if (!valeurAvant.Equals(valeurApres)) { if (version.VersionDonnees.TypeVersion.Code == CTypeVersion.TypeVersion.Previsionnelle) { JournaliseValeur(version, strChampDeTable, valeurApres); } else { JournaliseValeur(version, strChampDeTable, valeurAvant); } } } return(null); }
//------------------------------------------------------------------------------- public CVersionDonneesObjetOperation JournaliseValeur(CVersionDonneesObjet version, string strChampDeTable, object valeur) { CVersionDonneesObjetOperation data = null; CListeObjetsDonnees listeDatas = version.Modifications; listeDatas.Filtre = new CFiltreData( CVersionDonneesObjetOperation.c_champTypeChamp + "=@1 and " + CVersionDonneesObjetOperation.c_champChamp + "=@2", CChampPourVersionInDb.c_TypeChamp, strChampDeTable); listeDatas.InterditLectureInDB = true; if (listeDatas.Count != 0) { data = (CVersionDonneesObjetOperation)listeDatas[0]; } else { data = new CVersionDonneesObjetOperation(version.ContexteDonnee); data.CreateNewInCurrentContexte(); data.VersionObjet = version; } data.TypeChamp = CChampPourVersionInDb.c_TypeChamp; data.FieldKey = strChampDeTable; data.SetValeurStd(valeur); data.CodeTypeOperation = (int)CTypeOperationSurObjet.TypeOperation.Modification; return(data); }
/// <summary> /// Retourne les informations de modification pour l'objet demandé /// </summary> /// <param name="row"></param> /// <returns></returns> public CVersionDonneesObjet GetVersionObjetAvecCreation(DataRow row) { lock (typeof(CLockerOptim)) { if (m_lastRow != null && row.Equals(m_lastRow) && m_lastVersionObjet != null) { return(m_lastVersionObjet); } } CListeObjetsDonnees liste = VersionsObjets; Type typeElement = CContexteDonnee.GetTypeForTable(row.Table.TableName); if (typeElement == null || !typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(typeElement)) { return(null); } DataRowVersion versionToReturn = DataRowVersion.Current; if (row.RowState == DataRowState.Deleted) { versionToReturn = DataRowVersion.Original; } int nIdElement = (int)row[row.Table.PrimaryKey[0], versionToReturn]; liste.Filtre = new CFiltreData(CVersionDonneesObjet.c_champTypeElement + "=@1 and " + CVersionDonneesObjet.c_champIdElement + "=@2", typeElement.ToString(), nIdElement); liste.InterditLectureInDB = true; CVersionDonneesObjet valeurDeRetour = null; if (liste.Count != 0) { valeurDeRetour = (CVersionDonneesObjet)liste[0]; } if (valeurDeRetour == null) { CVersionDonneesObjet versionObjet = new CVersionDonneesObjet(ContexteDonnee); versionObjet.CreateNewInCurrentContexte(); versionObjet.StringTypeElement = typeElement.ToString(); versionObjet.IdElement = nIdElement; versionObjet.VersionDonnees = this; switch (row.RowState) { case DataRowState.Added: versionObjet.CodeTypeOperation = (int)CTypeOperationSurObjet.TypeOperation.Ajout; break; case DataRowState.Modified: versionObjet.CodeTypeOperation = (int)CTypeOperationSurObjet.TypeOperation.Modification; break; case DataRowState.Deleted: versionObjet.CodeTypeOperation = (int)CTypeOperationSurObjet.TypeOperation.Suppression; break; case DataRowState.Unchanged: versionObjet.CodeTypeOperation = (int)CTypeOperationSurObjet.TypeOperation.Aucune; break; } valeurDeRetour = versionObjet; } lock (typeof(CLockerOptim)) { m_lastVersionObjet = valeurDeRetour; m_lastRow = row; } return(valeurDeRetour); }