/// //////////////////////////////////////////////////////// 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); }
/// <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); }