示例#1
0
        /// //////////////////////////////////////////////////////
        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);
        }
示例#2
0
        /// //////////////////////////////////////////////////////
        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);
        }
示例#3
0
 /// //////////////////////////////////////////////////////
 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;
         }
     }
 }
示例#4
0
        //--------------------------------------------------------------------------------
        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);
        }
示例#5
0
        //-------------------------------------------------------------------
        /// <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);
        }
示例#7
0
        /// ////////////////////////////////////////////////////////
        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);
        }
示例#8
0
        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);
        }
示例#9
0
 public CReferenceTemporaire(CReferenceDocument reference)
 {
     Reference = reference;
 }
示例#10
0
        //-------------------------------------------------------------------
        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);
        }
示例#11
0
        /// ////////////////////////////////////////////////////////
        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);
        }
示例#12
0
        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);
        }