/// ////////////////////////////////////////////////////// protected static CResultAErreur PreValideDocument(CReferenceDocument refDoc) { CResultAErreur result = CResultAErreur.True; if (refDoc == null) { return(result); } if (refDoc.TypeReference.Code == CTypeReferenceDocument.TypesReference.LienDirect) { return(result); } foreach (CReferenceTemporaire refTemp in m_listeReferencesTemporaires.ToArray(typeof(CReferenceTemporaire))) { if (refTemp.Reference.Equals(refDoc)) { refTemp.Renew(); return(result); } } if (!File.Exists(m_strPath + refDoc.NomFichier)) { result.EmpileErreur(I.T("Document isn't available in EDM (exceeded time)|113")); } return(result); }
/// ////////////////////////////////////////////////////// protected static CResultAErreur DeleteDocument(CReferenceDocument reference) { CResultAErreur result = CResultAErreur.True; if (reference.TypeReference.Code == CTypeReferenceDocument.TypesReference.LienDirect) { //On ne supprime pas le doc, seulement le lien, donc deleteDocument ne fait rien return(result); } string strNomFichier = m_strPath + reference.NomFichier; if (File.Exists(strNomFichier)) { try { File.Delete(strNomFichier); } catch (Exception e) { result.EmpileErreur(new CErreurException(e)); result.EmpileErreur(I.T("Error while document deleting|112")); } } return(result); }
/// ////////////////////////////////////////////////////// protected static void ValideDocument(CReferenceDocument refDoc) { foreach (CReferenceTemporaire refTemp in m_listeReferencesTemporaires.ToArray(typeof(CReferenceTemporaire))) { if (refTemp.Reference.Equals(refDoc)) { m_listeReferencesTemporaires.Remove(refTemp); break; } } }
//-------------------------------------------------------------------------------- public CResultAErreur MajChamps() { CResultAErreur result = CResultAErreur.True; foreach (CNouveauDoc nouveau in m_listeNouveauxDocs.ToArray()) { CProxyGED proxy = new CProxyGED(nouveau.Document.ContexteDonnee.IdSession, CTypeReferenceDocument.TypesReference.Fichier); proxy.AttacheToLocal(nouveau.NomFichier); result = proxy.UpdateGed(); if (!result) { return(result); } CReferenceDocument refDoc = result.Data as CReferenceDocument; nouveau.Document.ReferenceDoc = refDoc; m_listeNouveauxDocs.Remove(nouveau); } foreach (CDocumentGED doc in m_listeDocsToRemove) { doc.Delete(true); } return(result); }
//------------------------------------------------------------------- /// <summary> /// Récupère une source document pour le document demandé /// </summary> /// <param name="refDoc"></param> /// <returns></returns> public CResultAErreur GetDocument(CReferenceDocument refDoc) { CResultAErreur result = CResultAErreur.True; CSourceDocument source = null; try { switch (refDoc.TypeReference.Code) { case CTypeReferenceDocument.TypesReference.Fichier: source = new CSourceDocumentStream( new FileStream(m_strPath + refDoc.NomFichier , FileMode.Open, FileAccess.Read) ); break; case CTypeReferenceDocument.TypesReference.LienDirect: source = new CSourceDocumentLienDirect(refDoc.NomFichier); break; default: result.EmpileErreur(I.T("Document type '@1' not supported|108", refDoc.TypeReference.Libelle)); break; } } catch (Exception e) { result.EmpileErreur(new CErreurException(e)); result.EmpileErreur(I.T("Impossible to read the file|107")); return(result); } result.Data = source; return(result); }
/// //////////////////////////////////////////////////////// protected override CResultAErreur MyExecute(CContexteExecutionAction contexte) { CResultAErreur result = CResultAErreur.True; CSessionClient sessionClient = CSessionClient.GetSessionForIdSession(contexte.IdSession); if (sessionClient != null) { if (sessionClient.GetInfoUtilisateur().KeyUtilisateur == contexte.Branche.KeyUtilisateur) { using (C2iSponsor sponsor = new C2iSponsor()) { CServiceSurClient service = sessionClient.GetServiceSurClient(c_idServiceSelectMultiForGed); CServiceSurClient serviceGetFile = sessionClient.GetServiceSurClient(CActionCopierLocalDansGed.c_idServiceClientGetFichier); if (service != null && serviceGetFile != null) { sponsor.Register(service); sponsor.Register(serviceGetFile); //Calcule la liste des ids de catégories à gérer List <int> lstIds = new List <int>(); if (FormuleListeCategories != null) { CContexteEvaluationExpression contexteEval = new CContexteEvaluationExpression(contexte.Branche.Process); contexteEval.AttacheObjet(typeof(CContexteDonnee), contexte.ContexteDonnee); result = FormuleListeCategories.Eval(contexteEval); if (!result) { return(result); } IEnumerable lst = result.Data as IEnumerable; if (lst != null) { foreach (object obj in lst) { if (obj is int) { lstIds.Add((int)obj); } if (obj is CCategorieGED) { lstIds.Add(((CCategorieGED)obj).Id); } } } } result = service.RunService(lstIds); if (result && result.Data is IEnumerable) { List <CDocumentGED> lstDocs = new List <CDocumentGED>(); foreach (object obj in (IEnumerable)result.Data) { CInfoFichierToGed info = obj as CInfoFichierToGed; if (info != null) { string strContenu = info.FileFullName; CSourceDocument sourceDoc = null; result = serviceGetFile.RunService(strContenu); if (!result) { return(result); } sourceDoc = result.Data as CSourceDocument; if (sourceDoc == null) { result.EmpileErreur(I.T("Error while retrieving file @1|20020", strContenu)); return(result); } //On a notre fichier en local, création du document string strCle = ""; string strLibelle = ""; info.ActiveProcess = contexte.Branche.Process; CContexteEvaluationExpression ctxEval = new CContexteEvaluationExpression(info); if (FormuleCle != null) { result = FormuleCle.Eval(ctxEval); if (result && result.Data != null) { strCle = result.Data.ToString(); } else { result.EmpileErreur(I.T("Document key could not be computed|30050")); return(result); } } if (FormuleLibelleDocument != null) { result = FormuleLibelleDocument.Eval(ctxEval); if (result && result.Data != null) { strLibelle = result.Data.ToString(); } else { result.EmpileErreur(I.T("Document label could not be computed|30051")); return(result); } } if (strLibelle.Length == 0) { strLibelle = info.FileName; } CObjetDonneeAIdNumerique associeA = null; if (FormuleElementAssocie != null) { result = FormuleElementAssocie.Eval(ctxEval); if (result) { associeA = result.Data as CObjetDonneeAIdNumerique; } } CDocumentGED doc = new CDocumentGED(contexte.ContexteDonnee); //Si la clé n'est pas nulle, cherche un document avec cette clé if (strCle.Trim() != "") { CFiltreData filtre = new CFiltreData(CDocumentGED.c_champCle + "=@1", strCle); if (!doc.ReadIfExists(filtre)) { doc.CreateNew(); } else { doc.BeginEdit(); } } else { doc.CreateNew(); } doc.Libelle = strLibelle; doc.Cle = strCle; ArrayList lstToCreate = new ArrayList(); lstToCreate.Add(info.EDMCategoryId); ArrayList lstToDelete = new ArrayList(); //Affecte les catégories CListeObjetsDonnees listeCategoriesExistantes = CRelationDocumentGED_Categorie.GetRelationsCategoriesForDocument(doc); foreach (CRelationDocumentGED_Categorie rel in listeCategoriesExistantes) { if (!lstToCreate.Contains(rel.Categorie.Id)) { lstToDelete.Add(rel); } lstToCreate.Remove(rel.Categorie.Id); } foreach (CRelationDocumentGED_Categorie rel in lstToDelete) { rel.Delete(); } foreach (int nId in lstToCreate) { CCategorieGED cat = new CCategorieGED(doc.ContexteDonnee); if (cat.ReadIfExists(nId)) { CRelationDocumentGED_Categorie rel = new CRelationDocumentGED_Categorie(doc.ContexteDonnee); rel.CreateNewInCurrentContexte(); rel.Categorie = cat; rel.Document = doc; } } result = CDocumentGED.SaveDocument(contexte.IdSession, sourceDoc, sourceDoc.TypeReference, doc.ReferenceDoc, true); if (!result) { return(result); } CReferenceDocument refDoc = result.Data as CReferenceDocument; doc.ReferenceDoc = refDoc; if (associeA != null) { doc.AssocieA(associeA); } result = doc.CommitEdit(); if (!result) { return(result); } lstDocs.Add(doc); } } if (VariableResultat != null) { Process.SetValeurChamp(VariableResultat, lstDocs.ToArray()); } return(result); } } } } } //Utilisateur pas accessible foreach (CLienAction lien in GetLiensSortantHorsErreur()) { if (lien is CLienUtilisateurAbsent) { result.Data = lien; return(result); } } return(result); }
/// //////////////////////////////////////////////////////// protected override CResultAErreur MyExecute(CContexteExecutionAction contexte) { CResultAErreur result = CResultAErreur.True; CSessionClient sessionClient = CSessionClient.GetSessionForIdSession(contexte.IdSession); if (sessionClient != null) { //TESTDBKEYOK if (sessionClient.GetInfoUtilisateur().KeyUtilisateur == contexte.Branche.KeyUtilisateur) { using (C2iSponsor sponsor = new C2iSponsor()) { CServiceSurClient service = sessionClient.GetServiceSurClient(c_idServiceClientGetFichier); CParametresCopierLocalDansGed parametreService = new CParametresCopierLocalDansGed(); CFichierLocalTemporaire fichierLocal = null; FileStream localStream = null; if (service != null) { sponsor.Register(service); //Calcule le contenu CContexteEvaluationExpression contexteEval = new CContexteEvaluationExpression(contexte.Branche.Process); contexteEval.AttacheObjet(typeof(CContexteDonnee), contexte.ContexteDonnee); result = ExpressionContenu.Eval(contexteEval); if (!result) { return(result); } parametreService.NomFichierLocal = result.Data as string; if (ExpressionUser != null && (result = ExpressionUser.Eval(contexteEval))) { if (result.Data != null) { parametreService.User = result.Data.ToString(); } } if (ExpressionPassword != null && (result = ExpressionPassword.Eval(contexteEval))) { if (result.Data != null) { parametreService.Password = result.Data.ToString(); } } CSourceDocument sourceDoc = null; if (parametreService.NomFichierLocal.ToUpper().StartsWith("FTP://")) { CResultAErreurType <CFichierLocalTemporaire> resFic = GetFileFromFtp( parametreService); if (!resFic) { result.EmpileErreur(resFic.Erreur); return(result); } fichierLocal = resFic.DataType; localStream = new FileStream(fichierLocal.NomFichier, FileMode.Open, FileAccess.Read); sourceDoc = new CSourceDocumentStream(localStream, "txt"); } else if (!m_bCreerFichierTexteAPartirDeLaFormuleContenu) { result = service.RunService(parametreService); if (!result) { return(result); } sourceDoc = result.Data as CSourceDocument; if (sourceDoc == null) { result.EmpileErreur(I.T("Error while retrieving file @1|20020", parametreService.NomFichierLocal)); return(result); } } else { fichierLocal = new CFichierLocalTemporaire("txt"); localStream = new FileStream(fichierLocal.NomFichier, FileMode.CreateNew, FileAccess.Write); StreamWriter writer = new StreamWriter(localStream); writer.Write(parametreService.NomFichierLocal); writer.Close(); localStream.Close(); localStream = new FileStream(fichierLocal.NomFichier, FileMode.Open, FileAccess.Read); sourceDoc = new CSourceDocumentStream(localStream, "txt"); } //On a notre fichier en local, création du document string strCle = ""; string strDescriptif = ""; string strLibelle = ""; result = ExpressionCle.Eval(contexteEval); if (result) { strCle = result.Data.ToString(); } else { result.EmpileErreur(I.T("Document key could not be computed|30050")); return(result); } result = ExpressionLibelle.Eval(contexteEval); if (result) { strLibelle = result.Data.ToString(); } else { result.EmpileErreur(I.T("Document label could not be computed|30051")); return(result); } result = ExpressionDescriptif.Eval(contexteEval); if (result) { strDescriptif = result.Data.ToString(); } else { result.EmpileErreur(I.T("Document description could not be computed|30052")); return(result); } CDocumentGED doc = new CDocumentGED(contexte.ContexteDonnee); //Si la clé n'est pas nulle, cherche un document avec cette clé if (strCle.Trim() != "") { CFiltreData filtre = new CFiltreData(CDocumentGED.c_champCle + "=@1", strCle); if (!doc.ReadIfExists(filtre)) { doc.CreateNew(); } else { doc.BeginEdit(); } } else { doc.CreateNew(); } doc.Libelle = strLibelle; doc.Descriptif = strDescriptif; doc.Cle = strCle; List <CDbKey> lstToCreate = new List <CDbKey>(ListeDbKeysCategoriesStockage); List <CRelationDocumentGED_Categorie> lstToDelete = new List <CRelationDocumentGED_Categorie>(); //Affecte les catégories CListeObjetsDonnees listeCategoriesExistantes = CRelationDocumentGED_Categorie.GetRelationsCategoriesForDocument(doc); foreach (CRelationDocumentGED_Categorie rel in listeCategoriesExistantes) { if (!lstToCreate.Contains(rel.Categorie.DbKey)) { lstToDelete.Add(rel); } lstToCreate.Remove(rel.Categorie.DbKey); } foreach (CRelationDocumentGED_Categorie rel in lstToDelete) { rel.Delete(); } foreach (CDbKey dbKey in lstToCreate) { CCategorieGED cat = new CCategorieGED(doc.ContexteDonnee); if (cat.ReadIfExists(dbKey)) { CRelationDocumentGED_Categorie rel = new CRelationDocumentGED_Categorie(doc.ContexteDonnee); rel.CreateNewInCurrentContexte(); rel.Categorie = cat; rel.Document = doc; } } result = CDocumentGED.SaveDocument(contexte.IdSession, sourceDoc, sourceDoc.TypeReference, doc.ReferenceDoc, true); if (sourceDoc != null) { sourceDoc.Dispose(); } if (localStream != null) { localStream.Dispose(); } if (fichierLocal != null) { fichierLocal.Dispose(); } if (!result) { return(result); } CReferenceDocument refDoc = result.Data as CReferenceDocument; doc.ReferenceDoc = refDoc; result = doc.CommitEdit(); if (!result) { return(result); } if (VariableResultat != null) { Process.SetValeurChamp(VariableResultat, doc); } return(result); } } } } //Utilisateur pas accessible foreach (CLienAction lien in GetLiensSortantHorsErreur()) { if (lien is CLienUtilisateurAbsent) { result.Data = lien; return(result); } } return(result); }
public override CResultAErreur SaveAll(CContexteSauvegardeObjetsDonnees contexteSauvegarde, System.Data.DataRowState etatsAPrendreEnCompte) { ArrayList listeFichiersToDelete = null; ArrayList listeFichiersToValide = null; ArrayList listeFichiersANePasSupprimer = null; GetListesPourValidation(ref listeFichiersToDelete, ref listeFichiersToValide, ref listeFichiersANePasSupprimer); CResultAErreur result = CResultAErreur.True; m_commitEventHandlerNote = new OnCommitTransEventHandler(OnCommitTrans); DataTable table = contexteSauvegarde.ContexteDonnee.Tables[GetNomTable()]; if (table != null) { foreach (DataRow row in table.Rows) { if (row.RowState == DataRowState.Modified || row.RowState == DataRowState.Added) { if (!CDocumentGED.IsControleDocumentsALaSauvegardeDesactive(contexteSauvegarde.ContexteDonnee)) //si désactivation des ids auto, on est dans un processus //de synchronisation, donc , pas de contrôle de document { CDocumentGED doc = new CDocumentGED(row); CReferenceDocument newReference = doc.ReferenceDoc; bool bRefAsChange = true; if (row.RowState == DataRowState.Modified) { doc.VersionToReturn = DataRowVersion.Original; CReferenceDocument oldRef = doc.ReferenceDoc; bRefAsChange = false; if ((newReference == null) != (oldRef == null)) { bRefAsChange = true; } if (oldRef != null && !oldRef.Equals(newReference)) { listeFichiersToDelete.Add(oldRef); bRefAsChange = true; } doc.VersionToReturn = DataRowVersion.Current; } if (bRefAsChange) { result = PreValideDocument(newReference); } if (!result) { return(result); } if (bRefAsChange) { listeFichiersToValide.Add(doc.ReferenceDoc); } listeFichiersANePasSupprimer.Add(doc.ReferenceDoc); listeFichiersToDelete.Remove(doc.ReferenceDoc);//Il ne faut pas le supprimer ! } } if (row.RowState == DataRowState.Deleted) { CDocumentGED doc = new CDocumentGED(row); doc.VersionToReturn = DataRowVersion.Original; string strRefString = doc.ReferenceString; if (!listeFichiersToValide.Contains(doc.ReferenceDoc) && !listeFichiersANePasSupprimer.Contains(doc.ReferenceDoc)) { listeFichiersToDelete.Add(doc.ReferenceDoc); } doc.VersionToReturn = DataRowVersion.Current; } } } IDatabaseConnexion con = CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, GetType()); if (con != null) { con.OnCommitTrans += m_commitEventHandlerNote; } result = base.SaveAll(contexteSauvegarde, etatsAPrendreEnCompte); return(result); }
public CReferenceTemporaire(CReferenceDocument reference) { Reference = reference; }
//------------------------------------------------------------------- public CResultAErreur SaveDocument(CSourceDocument source, CTypeReferenceDocument typeReference, CReferenceDocument versionPrecedente, bool bIncrementeVersionFichier) { CResultAErreur result = CResultAErreur.True; //Copie du fichier try { switch (typeReference.Code) { case CTypeReferenceDocument.TypesReference.Fichier: if (!(source is CSourceDocumentStream)) { result.EmpileErreur(I.T("Document type '@1' source not supported|109", source.GetType().Name)); return(result); } string strNomFichier = ""; if (versionPrecedente != null) { strNomFichier = versionPrecedente.NomFichier; strNomFichier = strNomFichier.Replace("..", "."); //Correction erreurs passées if (bIncrementeVersionFichier) { strNomFichier = IncNomFichier(strNomFichier); } string strExt = ((CSourceDocumentStream)source).Extension; if (strExt.ToUpper() != "DAT") { strNomFichier = ChangeExtension(strNomFichier, ((CSourceDocumentStream)source).Extension); } } else { string strPath = DateTime.Now.Year.ToString() + "\\"; strPath += DateTime.Now.Month.ToString() + "\\"; strPath += DateTime.Now.Day.ToString() + "\\"; strNomFichier = strPath + CGenerateurStringUnique.GetNewNumero(m_nIdSession) + "_0."; strNomFichier += ((CSourceDocumentStream)source).Extension; } //S'assure que le chemin du fichier existe string[] strChemins = strNomFichier.Split('\\'); int nChemin = 0; string strTemp = m_strPath; foreach (string strChemin in strChemins) { if (nChemin < strChemins.Length - 1) { if (!Directory.Exists(m_strPath + strChemin)) { Directory.CreateDirectory(strTemp + strChemin); } strTemp += strChemin + "\\"; } nChemin++; } if (strNomFichier.LastIndexOf('.') < 0) { strNomFichier += ((CSourceDocumentStream)source).Extension; } if (File.Exists(m_strPath + strNomFichier)) { File.Delete(m_strPath + strNomFichier); } FileStream stream = new FileStream(m_strPath + strNomFichier, FileMode.CreateNew); Stream sourceStream = ((CSourceDocumentStream)source).SourceStream; result = CStreamCopieur.CopyStream(sourceStream, stream, 32000); if (!result) { File.Delete(strNomFichier); return(result); } CReferenceDocument referenceFinale = new CReferenceDocument(); referenceFinale.NomFichier = strNomFichier; referenceFinale.CodeTypeReference = CTypeReferenceDocument.TypesReference.Fichier; referenceFinale.TailleFichier = (int)new FileInfo(m_strPath + strNomFichier).Length; m_listeReferencesTemporaires.Add(new CReferenceTemporaire(referenceFinale)); if (m_timerNettoyage == null && C2iAppliServeur.GetValeur(c_cleDesactivationNettoyage) != null) { m_timerNettoyage = new Timer(new TimerCallback(NettoyageTemporaires), null, 1000 * 60 * 30, 1000 * 60 * 30); } result.Data = referenceFinale; break; case CTypeReferenceDocument.TypesReference.LienDirect: //Vérifie que le lien est accessible depuis le serveur CSourceDocumentLienDirect sourceDirecte = source as CSourceDocumentLienDirect; if (sourceDirecte == null) { result.EmpileErreur(I.T("Document type '@1' source not supported|109", source.GetType().Name)); return(result); } CReferenceDocument referenceFinaleLien = new CReferenceDocument(); referenceFinaleLien.NomFichier = sourceDirecte.NomFichier; referenceFinaleLien.CodeTypeReference = CTypeReferenceDocument.TypesReference.LienDirect; referenceFinaleLien.TailleFichier = (int)new FileInfo(sourceDirecte.NomFichier).Length; if (!File.Exists(sourceDirecte.NomFichier)) { result.EmpileErreur("File @1 cannot be stored in EDM, it can not be reached from server|20000", sourceDirecte.NomFichier); return(result); } result.Data = referenceFinaleLien; break; default: result.EmpileErreur(I.T("File reference type @1 not supported|110", typeReference.ToString())); return(result); } } catch (Exception e) { result.EmpileErreur(new CErreurException(e)); result.EmpileErreur(I.T("Error while saving EDM |111")); } return(result); }
/// //////////////////////////////////////////////////////// protected override CResultAErreur MyExecute(CContexteExecutionAction contexte) { CResultAErreur result = CResultAErreur.True; if (ExpressionListeDocuments == null) { result.EmpileErreur(I.T("Document list formula is null|20051")); return(result); } CContexteEvaluationExpression contexteEval = new CContexteEvaluationExpression(contexte.Branche.Process); result = ExpressionListeDocuments.Eval(contexteEval); if (!result) { return(result); } IEnumerable enDocs = result.Data as IEnumerable; string strCle = ""; string strDescriptif = ""; string strLibelle = ""; result = ExpressionCle.Eval(contexteEval); if (result) { strCle = result.Data.ToString(); } else { result.EmpileErreur(I.T("Document key could not be computed|30050")); return(result); } if (enDocs == null) { result.EmpileErreur(I.T("Document list formul returns an incorrect value|20052")); return(result); } List <CDocumentGED> lstDocs = new List <CDocumentGED>(); try { foreach (CDocumentGED doc in enDocs) { if (doc.Cle != strCle) { lstDocs.Add(doc); } } } catch (Exception e) { result.EmpileErreur(new CErreurException(e)); result.EmpileErreur(I.T("Error in document list|20053")); } MemoryStream stream = new MemoryStream(); ZipOutputStream zipStream = new ZipOutputStream(stream); zipStream.SetLevel(9); HashSet <string> lstNomsDocuments = new HashSet <string>(); foreach (CDocumentGED doc in lstDocs) { CContexteEvaluationExpression ctxDoc = new CContexteEvaluationExpression(doc); string strNomFichier = ""; if (ExpressionNomsFichiers != null) { result = ExpressionNomsFichiers.Eval(ctxDoc); if (result && result.Data != null) { strNomFichier = result.Data.ToString(); } } if (strNomFichier == "") { strNomFichier = I.T("File|20054"); } foreach (char c in "\"/\\*?<>|:") { if (strNomFichier.Contains(c.ToString())) { strNomFichier = strNomFichier.Replace(c, '_'); } } if (lstNomsDocuments.Contains(strNomFichier.ToUpper())) { int nIndex = 1; string strTmp = strNomFichier + "_" + nIndex; while (lstNomsDocuments.Contains(strTmp.ToUpper())) { nIndex++; strTmp = strNomFichier + "_" + nIndex; } strNomFichier = strTmp.ToUpper(); } lstNomsDocuments.Add(strNomFichier.ToUpper()); strNomFichier += "." + doc.ReferenceDoc.GetExtension(); using (CProxyGED proxy = new CProxyGED(contexte.IdSession, doc.ReferenceDoc)) { result = proxy.CopieFichierEnLocal(); if (result) { ZipEntry entry = new ZipEntry(ZipEntry.CleanName(strNomFichier)); try { FileStream fstream = new FileStream(proxy.NomFichierLocal, FileMode.Open, FileAccess.Read); entry.DateTime = DateTime.Now; entry.Size = fstream.Length; int nBufLength = 1024 * 1024; byte[] buffer = new byte[nBufLength]; int nRead = 0; zipStream.PutNextEntry(entry); while ((nRead = fstream.Read(buffer, 0, nBufLength)) != 0) { zipStream.Write(buffer, 0, nRead); } fstream.Close(); zipStream.CloseEntry(); } catch (Exception e) { result.EmpileErreur(new CErreurException(e)); return(result); } } } } zipStream.Finish(); stream.Seek(0, SeekOrigin.Begin); CSourceDocumentStream sourceDoc = new CSourceDocumentStream(stream, "zip"); //On a notre stream zippé, création du document result = ExpressionLibelle.Eval(contexteEval); if (result) { strLibelle = result.Data.ToString(); } else { result.EmpileErreur(I.T("Document label could not be computed|30051")); return(result); } result = ExpressionDescriptif.Eval(contexteEval); if (result) { strDescriptif = result.Data.ToString(); } else { result.EmpileErreur(I.T("Document description could not be computed|30052")); return(result); } CDocumentGED docZip = new CDocumentGED(contexte.ContexteDonnee); //Si la clé n'est pas nulle, cherche un document avec cette clé if (strCle.Trim() != "") { CFiltreData filtre = new CFiltreData(CDocumentGED.c_champCle + "=@1", strCle); if (!docZip.ReadIfExists(filtre)) { docZip.CreateNew(); } else { docZip.BeginEdit(); } } else { docZip.CreateNew(); } docZip.Libelle = strLibelle; docZip.Descriptif = strDescriptif; docZip.Cle = strCle; List <CDbKey> lstToCreate = new List <CDbKey>(ListeDbKeysCategoriesStockage); List <CRelationDocumentGED_Categorie> lstToDelete = new List <CRelationDocumentGED_Categorie>(); //Affecte les catégories CListeObjetsDonnees listeCategoriesExistantes = CRelationDocumentGED_Categorie.GetRelationsCategoriesForDocument(docZip); foreach (CRelationDocumentGED_Categorie rel in listeCategoriesExistantes) { if (!lstToCreate.Contains(rel.Categorie.DbKey)) { lstToDelete.Add(rel); } lstToCreate.Remove(rel.Categorie.DbKey); } foreach (CRelationDocumentGED_Categorie rel in lstToDelete) { rel.Delete(); } foreach (CDbKey dbKey in lstToCreate) { CCategorieGED cat = new CCategorieGED(docZip.ContexteDonnee); if (cat.ReadIfExists(dbKey)) { CRelationDocumentGED_Categorie rel = new CRelationDocumentGED_Categorie(docZip.ContexteDonnee); rel.CreateNewInCurrentContexte(); rel.Categorie = cat; rel.Document = docZip; } } result = CDocumentGED.SaveDocument(contexte.IdSession, sourceDoc, sourceDoc.TypeReference, docZip.ReferenceDoc, true); if (sourceDoc != null) { sourceDoc.Dispose(); } zipStream.Close(); zipStream.Dispose(); stream.Dispose(); if (!result) { return(result); } CReferenceDocument refDoc = result.Data as CReferenceDocument; docZip.ReferenceDoc = refDoc; result = docZip.CommitEdit(); if (!result) { return(result); } if (VariableResultat != null) { Process.SetValeurChamp(VariableResultat, docZip); } return(result); }
private CResultAErreur ImportRep(CProjet projetNominal, CProjet projetCandidat, CRepertoire rep, string strPathGed) { CResultAErreur result = CResultAErreur.True; rep.ImportDone = true; strPathGed += "\\" + rep.Nom; CMappingRepToDocSetup map = CMappingRepToDocSetup.GetMapping(rep.Nom); foreach (CFichier fichier in rep.GetChilds <CFichier>()) { if (map == null) { fichier.InfoImport = "No mapping for this directory"; } else { CObjetDonneeAIdNumerique objet = map.GetObjet(projetNominal, projetCandidat, fichier.Nom); if (objet == null) { fichier.InfoImport = "Can not find associated objet for this file"; } else { CCategorieGED cat = map.GetCatégorie(projetNominal.ContexteDonnee); if (cat == null) { fichier.InfoImport = "Can not find EDM category for this file"; } else { string strCode = objet.IdUniversel + "/" + fichier.Nom; CDocumentGED doc = new CDocumentGED(projetNominal.ContexteDonnee); if (!doc.ReadIfExists(new CFiltreData(CDocumentGED.c_champCle + "=@1", strCode))) { doc.CreateNewInCurrentContexte(); } doc.Libelle = fichier.Nom; doc.Cle = strCode; CReferenceDocument refDoc = new CReferenceDocument(); refDoc.TypeReference = new CTypeReferenceDocument(CTypeReferenceDocument.TypesReference.Fichier); refDoc.NomFichier = strPathGed + "\\" + fichier.Nom; doc.ReferenceDoc = refDoc; doc.AddCategory(cat); doc.AssocieA(objet); fichier.SetObjetAssocie(objet); } } } } foreach (CRepertoire child in rep.GetChilds <CRepertoire>()) { result = ImportRep(projetNominal, projetCandidat, child, strPathGed); if (!result) { return(result); } } return(result); }