/// ////////////////////////////////////////////////////////
        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);
        }
예제 #2
0
        /// <summary>
        /// Crée une nouvelle entrée d'agenda en utilisant le contexte d'évaluation pour
        /// évaluer les expression.
        /// LE data du result contient le CEntreeAgenda créé.
        /// </summary>
        /// <param name="contexteDonnee"></param>
        /// <param name="contexteEval"></param>
        /// <returns></returns>
        public CResultAErreur CreateEntree(CContexteDonnee contexteDonnee, CContexteEvaluationExpression contexteEval)
        {
            CResultAErreur result = CResultAErreur.True;
            string         strCle = "";

            if (FormuleCle != null)
            {
                result = FormuleCle.Eval(contexteEval);
                if (!result)
                {
                    result.EmpileErreur(I.T("Error during the calculation of Diary Entry Key|322"));
                    return(result);
                }
                if (result.Data != null)
                {
                    strCle = result.Data.ToString();
                }
            }
            CEntreeAgenda entree = new CEntreeAgenda(contexteDonnee);

            if (strCle != "")
            {
                if (!entree.ReadIfExists(new CFiltreData(CEntreeAgenda.c_champCle + "=@1",
                                                         strCle)))
                {
                    entree.CreateNewInCurrentContexte();
                }
            }
            entree.TypeEntree  = TypeEntree;
            entree.Cle         = strCle;
            entree.Etat        = EtatInitial;
            entree.EtatAuto    = EtatAutomatique;
            entree.SansHoraire = SansHoraire;

            if (FormuleLibelle != null)
            {
                result = FormuleLibelle.Eval(contexteEval);
                if (!result)
                {
                    result.EmpileErreur(I.T("Error in label formula|323"));
                    return(result);
                }
                entree.Libelle = result.Data.ToString();
            }

            if (FormuleDateDebut != null)
            {
                result = FormuleDateDebut.Eval(contexteEval);
                if (!result || !(result.Data is DateTime))
                {
                    result.EmpileErreur(I.T("Error in Start Date formula|324"));
                    return(result);
                }
                entree.DateDebut = (DateTime)result.Data;
            }
            else
            {
                result.EmpileErreur(I.T("Incorrect Start Date Formula|325"));
                return(result);
            }

            if (FormuleDateFin != null)
            {
                result = FormuleDateFin.Eval(contexteEval);
                if (!result || !(result.Data is DateTime))
                {
                    result.EmpileErreur(I.T("Error in End Date Formula|326"));
                    return(result);
                }
                entree.DateFin = (DateTime)result.Data;
            }
            else
            {
                result.EmpileErreur(I.T("Incorrect End Date Formula|327"));
                return(result);
            }

            if (FormuleCommentaires != null)
            {
                result = FormuleCommentaires.Eval(contexteEval);
                if (result)
                {
                    entree.Commentaires = result.Data.ToString();
                }
            }

            //Valeurs des champs
            foreach (CParametreRelationEntreeAgenda_ChampCustom parametreChamp in ParametresChamps)
            {
                if (parametreChamp.FormuleValeur != null)
                {
                    result = parametreChamp.FormuleValeur.Eval(contexteEval);
                    if (!result)
                    {
                        result.EmpileErreur(I.T("Error in the field @1 formula|328", parametreChamp.IdChamp.ToString()));
                        return(result);
                    }
                    entree.SetValeurChamp(parametreChamp.IdChamp, result.Data);
                }
            }

            //Valeurs des liens
            foreach (CParametreRelationEntreeAgenda_TypeElement paramLien in ParametresTypesElements)
            {
                if (paramLien.FormuleLien != null && paramLien.Relation != null)
                {
                    result = paramLien.FormuleLien.Eval(contexteEval);
                    if (!result)
                    {
                        result.EmpileErreur(I.T("Error in the link @1 formula|329", paramLien.Relation.Libelle));
                        return(result);
                    }
                    if (result.Data != null)
                    {
                        entree.SetElementsLies(
                            new CObjetDonneeAIdNumerique[] { (CObjetDonneeAIdNumerique)result.Data }, paramLien.Relation);
                    }
                }
            }
            entree.MinutesRappel = m_nMinutesRappel;
            result.Data          = entree;
            return(result);
        }