Пример #1
0
        /// ////////////////////////////////////////////////////////
        protected override CResultAErreur MyExecute(CContexteExecutionAction contexte)
        {
            CResultAErreur result = CResultAErreur.True;

            //Préparation du filtre
            C2iRapportCrystal rapport = new C2iRapportCrystal(contexte.ContexteDonnee);

            if (!rapport.ReadIfExists(IdEtatCrystal))
            {
                result.EmpileErreur(I.T("The report @1 does not exist|30046", IdEtatCrystal.ToString()));
                return(result);
            }
            CContexteEvaluationExpression contexteEvaluation = new CContexteEvaluationExpression(Process);
            CMultiStructureExport         multiStructure     = rapport.MultiStructure;

            if (multiStructure == null)
            {
                result.EmpileErreur(I.T("The report does not have a data structure|30044"));
                return(result);
            }
            foreach (IVariableDynamique variable in multiStructure.ListeVariables)
            {
                if (variable.IsChoixUtilisateur())
                {
                    C2iExpression expressionVariable = GetExpressionForVariableFiltre(variable.IdVariable);
                    if (expressionVariable != null)
                    {
                        result = expressionVariable.Eval(contexteEvaluation);
                        if (!result)
                        {
                            result.EmpileErreur(I.T("Error in variable '@1' assignment|30047", variable.Nom));
                            return(result);
                        }
                        multiStructure.SetValeurChamp(variable, result.Data);
                    }
                }
            }
            ReportDocument report = null;

            try
            {
                result = rapport.CreateFichierExport(multiStructure, m_formatExport, ref report);
                if (!result)
                {
                    result.EmpileErreur(I.T("Error while creating the report|30048"));
                    return(result);
                }
                CFichierLocalTemporaire fichierPDF = (CFichierLocalTemporaire)result.Data;

                #region Impression de l'état
                if (m_bImprimerEtat)
                {
                    CSessionClient            sessionClient = CSessionClient.GetSessionForIdSession(contexte.IdSession);
                    CConfigurationsImpression configuration = sessionClient.ConfigurationsImpression;
                    if (configuration.NomImprimanteSurServeur != "")
                    {
                        report.PrintOptions.PrinterName = configuration.NomImprimanteSurServeur;
                    }
                    try
                    {
                        report.PrintToPrinter(1, false, 0, 0);
                    }
                    catch (Exception e)
                    {
                        result.EmpileErreur(new CErreurException(e));
                        result.EmpileErreur(I.T("Printing error|30049"));
                        return(result);
                    }

                    /*if ( sessionClient != null )
                     * {
                     *      if ( sessionClient.GetInfoUtilisateur().IdUtilisateur == contexte.Branche.IdUtilisateur )
                     *      {
                     *              if ( sessionClient.ConfigurationsImpression.NomImprimanteSurClient != "" )
                     *                      report.PrintOptions.PrinterName = sessionClient.ConfigurationsImpression.NomImprimanteSurClient;
                     *              CServiceSurClient service = sessionClient.GetServiceSurClient ( CActionImprimerEtat.c_idServiceClientImprimerEtat );
                     *              if ( service != null )
                     *              {
                     *                      result = service.RunService ( report );
                     *              }
                     *      }
                     * }*/
                    /*
                     *                      using ( CFichierLocalTemporaire fichierRpt = new CFichierLocalTemporaire("rpt") )
                     *                      {
                     *                              fichierRpt.CreateNewFichier();
                     *                              try
                     *                              {
                     *                                      report.Refresh();
                     *                                      report.SaveAs (fichierRpt.NomFichier, ReportFileFormat.VSNetFileFormat );
                     *                              }
                     *                              catch ( Exception e )
                     *                              {
                     *                                      result.EmpileErreur ( new CErreurException ( e ) );
                     *                              }
                     *                              if ( result )
                     *                              {
                     *                                      //Stocke le fichier dans la ged pour pouvoir l'envoyer sur le client
                     *                                      using ( CProxyGED proxy = new CProxyGED ( Process.IdSession, null ) )
                     *                                      {
                     *                                              proxy.CreateNewFichier();
                     *                                              proxy.AttacheToLocal ( fichierRpt.NomFichier );
                     *
                     *                                              proxy.UpdateGed();
                     *
                     *                                              CReferenceDocument refDoc = proxy.ReferenceAttachee;
                     *                                              result = service.RunService ( refDoc );
                     *                                              if ( !result )
                     *                                              {
                     *                                                      result.EmpileErreur("Erreur à l'impression du document");
                     *                                                      return result;
                     *                                              }
                     *                                      }
                     *                              }
                     *                      }
                     *              }
                     *      }
                     * }*/
                }
                #endregion



                #region Stockage dans la ged

                if (m_bStockerGed)
                {
                    //On a notre fichier PDF, création du document
                    string strCle        = "";
                    string strDescriptif = "";
                    string strLibelle    = "";
                    result = ExpressionCle.Eval(contexteEvaluation);
                    if (result)
                    {
                        strCle = result.Data.ToString();
                    }
                    else
                    {
                        result.EmpileErreur(I.T("Document key could not be evaluated|30050"));
                        return(result);
                    }


                    result = ExpressionLibelle.Eval(contexteEvaluation);
                    if (result)
                    {
                        strLibelle = result.Data.ToString();
                    }
                    else
                    {
                        result.EmpileErreur(I.T("Document label could not be evaluated|30051"));
                        return(result);
                    }

                    result = ExpressionDescriptif.Eval(contexteEvaluation);
                    if (result)
                    {
                        strDescriptif = result.Data.ToString();
                    }
                    else
                    {
                        result.EmpileErreur(I.T("Document description could not be evaluated|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;

                    ArrayList lstToCreate = (ArrayList)ListeIdsCategoriesStockage.Clone();
                    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;
                        }
                    }
                    CProxyGED proxy = new CProxyGED(Process.IdSession, doc.IsNew()?null:doc.ReferenceDoc);
                    proxy.AttacheToLocal(fichierPDF.NomFichier);
                    result = proxy.UpdateGed();
                    if (!result)
                    {
                        return(result);
                    }
                    doc.ReferenceDoc = (CReferenceDocument)result.Data;
                    result           = doc.CommitEdit();
                    fichierPDF.Dispose();
                    if (VariableResultat != null)
                    {
                        Process.SetValeurChamp(VariableResultat, doc);
                    }
                }
                #endregion
            }
            catch (Exception e)
            {
                result.EmpileErreur(new CErreurException(e));
            }
            finally
            {
                if (report != null)
                {
                    report.Close();
                }
            }

            return(result);
        }
Пример #2
0
        /// <summary>
        /// Execute une action
        /// </summary>
        /// <param name="action"></param>
        /// <param name="contexte"></param>
        /// <param name="bIsActionPrincipaleProcess">Si vrai, considère que le process en execution est fermé en sortie,
        /// si non, il s'agit d'une action appelée dans une boucle par exemple</param>
        /// <returns></returns>
        public CResultAErreur ExecuteAction(
            CAction action,
            CContexteExecutionAction contexte,
            object objetCible,
            bool bIsActionPrincipaleProcess)
        {
            CResultAErreur result = CResultAErreur.True;

            m_pile.Add(new CInfoPileExecution(null, action));
            m_nIdActionEnCours = action.IdObjetProcess;
            action.Process.SetValeurChamp(CProcess.c_strIdVariableElement, objetCible);
            bool                      bFermerLaSessionEnSortant = IsModeAsynchrone && bIsActionPrincipaleProcess;
            CSessionClient            sessionClient             = CSessionClient.GetSessionForIdSession(contexte.IdSession);
            CConfigurationsImpression oldConf = null;

            contexte.SetInfoProgression(action.Libelle);
            try
            {
                if (contexte.IndicateurProgression != null && contexte.IndicateurProgression.CancelRequest)
                {
                    result.EmpileErreur(I.T("User cancellation|182"));
                    result.Data = null;
                    return(result);
                }
            }
            catch { }
            if (sessionClient != null)
            {
                oldConf = sessionClient.ConfigurationsImpression;
            }
            try
            {
                if (sessionClient != null)
                {
                    sessionClient.ConfigurationsImpression = ConfigurationImpression;
                }
                action.Process.ContexteExecution = contexte;
                result = action.Execute(contexte);
                while (result.Data != null && result)
                {
                    //retourne un lien : on continue
                    if (result.Data is CLienAction)
                    {
                        m_nIdActionEnCours = action.IdObjetProcess;
                        CLienAction lien = (CLienAction)result.Data;
                        m_pile.Add(new CInfoPileExecution(lien, lien.ActionArrivee));
                        contexte.ProcessEnExecution.LibelleActionEnCours = lien.ActionArrivee.Libelle;
                        if (lien is CLienAsynchrone && !IsModeAsynchrone)
                        {
                            IsModeAsynchrone = true;
                            //Execution de l'action en mode asynchrone et fin
                            m_actionAsynchroneAExecuter = lien.ActionArrivee;
                            m_contexteAsynchrone        = contexte;
                            Thread th = new Thread(new ThreadStart(ExecuteActionAsynchrone));
                            th.Start();
                            bFermerLaSessionEnSortant = false;
                            result.Data = null;
                            return(result);
                        }
                        else
                        {
                            action = ((CLienAction)result.Data).ActionArrivee;
                            action.Process.ContexteExecution = contexte;

                            contexte.SetInfoProgression(action.Libelle);
                            try
                            {
                                if (contexte.IndicateurProgression != null && contexte.IndicateurProgression.CancelRequest)
                                {
                                    result.EmpileErreur(I.T("User cancellation|182"));
                                    result.Data = null;
                                    return(result);
                                }
                            }
                            catch { }

                            result = action.Execute(contexte);
                        }
                    }
                    else if (result.Data is CMetteurDeProcessEnPause)
                    {
                        //Mise en pause du process
                        result      = contexte.ProcessEnExecution.PauseProcess(contexte);
                        result.Data = null;
                        return(result);
                    }
                    else
                    {
                        result.Data = null;
                    }
                }
                if (bIsActionPrincipaleProcess && result)
                {
                    CResultAErreur resultTmp = contexte.ProcessEnExecution.EnProcess(contexte);
                    if (!resultTmp)
                    {
                        result.Erreur += resultTmp.Erreur;
                        result.Result  = false;
                    }
                }
            }
            catch (Exception e)
            {
                result.EmpileErreur(new CErreurException(e));
            }
            finally
            {
                if (sessionClient != null)
                {
                    sessionClient.ConfigurationsImpression = oldConf;
                }
                if (!result && bIsActionPrincipaleProcess)
                {
                    //Pour ne modifier que le process et ne surtout pas faire les sauvegardes autres
                    contexte.ProcessEnExecution.BeginEdit();
                    contexte.ProcessEnExecution.Etat           = EtatProcess.Erreur;
                    contexte.ProcessEnExecution.BrancheEnCours = this;
                    contexte.ProcessEnExecution.InfoEtat       = result.Erreur.ToString();

                    if (IsModeAsynchrone)
                    {
                        //Notifie l'utilisateur qu'un erreur est survenue
                        CBesoinInterventionProcess intervention = new CBesoinInterventionProcess(contexte.ProcessEnExecution.ContexteDonnee);
                        intervention.CreateNewInCurrentContexte();
                        intervention.Libelle     = I.T("@1 action error|259", contexte.ProcessEnExecution.Libelle);
                        intervention.DateDemande = DateTime.Now;
                        //Crée une boite de message pour afficher l'erreur
                        CProcess          process     = contexte.Branche.Process;
                        CActionMessageBox actionNotif = new CActionMessageBox(process);
                        actionNotif.FormuleMessage = new sc2i.expression.C2iExpressionConstante(intervention.Libelle + "\r\n" + result.Erreur.ToString());
                        actionNotif.Libelle        = I.T("Error notification|260");
                        process.AddAction(actionNotif);
                        intervention.IdAction = actionNotif.IdObjetProcess;
                        //TESTDBKEYOK
                        intervention.KeyUtilisateur                = KeyUtilisateur;
                        intervention.ProcessEnExecution            = contexte.ProcessEnExecution;
                        contexte.ProcessEnExecution.BrancheEnCours = contexte.Branche;
                    }
                    contexte.ProcessEnExecution.CommitEdit();
                }
                if (IsModeAsynchrone && bFermerLaSessionEnSortant)
                {
                    //Ferme la session
                    try
                    {
                        CSessionClient session = CSessionClient.GetSessionForIdSession(contexte.IdSession);
                        session.CloseSession();
                    }
                    catch {}
                }
            }
            result.Data = null;
            return(result);
        }
        /// ////////////////////////////////////////////////////////
        protected override CResultAErreur MyExecute(CContexteExecutionAction contexte)
        {
            CResultAErreur result = CResultAErreur.True;

            CContexteEvaluationExpression ctxEval = new CContexteEvaluationExpression(Process);

            ctxEval.AttacheObjet(typeof(CContexteDonnee), contexte.ContexteDonnee);
            string strImprimanteClient  = "";
            string strImprimanteServeur = "";

            if (FormuleImprimanteClient != null)
            {
                result = FormuleImprimanteClient.Eval(ctxEval);
                if (!result)
                {
                    result.EmpileErreur(I.T("Error during the client printer evaluation|127"));
                    return(result);
                }
                strImprimanteClient = result.Data.ToString();
            }
            if (FormuleImprimanteServeur != null)
            {
                result = FormuleImprimanteServeur.Eval(ctxEval);
                if (!result)
                {
                    result.EmpileErreur(I.T("Error during the server printer evaluation|128"));
                    return(result);
                }
                strImprimanteServeur = result.Data.ToString();
            }


            CConfigurationsImpression config;

            if (contexte.Branche.ConfigurationImpression != null)
            {
                config = (CConfigurationsImpression)CCloner2iSerializable.Clone(contexte.Branche.ConfigurationImpression);
            }
            else
            {
                config = new CConfigurationsImpression();
            }
            if (strImprimanteClient != "")
            {
                config.NomImprimanteSurClient = strImprimanteClient;
            }
            if (strImprimanteServeur != "")
            {
                config.NomImprimanteSurServeur = strImprimanteServeur;
            }
            contexte.Branche.ConfigurationImpression = config;

            CSessionClient session = CSessionClient.GetSessionForIdSession(contexte.IdSession);

            if (session != null)
            {
                session.ConfigurationsImpression = config;
            }

            return(result);
        }
Пример #4
0
        /// /////////////////////////////////////
        public CResultAErreur Serialize(C2iSerializer serializer)
        {
            int            nVersion = GetNumVersion();
            CResultAErreur result   = serializer.TraiteVersion(ref nVersion);

            if (!result)
            {
                return(result);
            }
            //TESTDBKEYOK
            if (nVersion < 3)
            {
                serializer.ReadDbKeyFromOldId(ref m_keyUtilisateur, null);
            }
            else
            {
                serializer.TraiteDbKey(ref m_keyUtilisateur);
            }
            serializer.TraiteInt(ref m_nIdActionEnCours);

            //Sérialize les données des actions
            int nNb = m_tableDataAction.Count;

            serializer.TraiteInt(ref nNb);
            switch (serializer.Mode)
            {
            case ModeSerialisation.Ecriture:
                foreach (int nIdAction in m_tableDataAction.Keys)
                {
                    int nIdActionPourRef = nIdAction;
                    serializer.TraiteInt(ref nIdActionPourRef);
                    I2iSerializable donnee = (I2iSerializable)m_tableDataAction[nIdAction];
                    result = serializer.TraiteObject(ref donnee);
                    if (!result)
                    {
                        return(result);
                    }
                }
                break;

            case ModeSerialisation.Lecture:
                m_tableDataAction.Clear();
                for (int nData = 0; nData < nNb; nData++)
                {
                    int nIdAction = 0;
                    serializer.TraiteInt(ref nIdAction);
                    I2iSerializable donnee = null;
                    result = serializer.TraiteObject(ref donnee);
                    if (!result)
                    {
                        return(result);
                    }
                    m_tableDataAction[nIdAction] = donnee;
                }
                break;
            }

            //Sérialize le process
            I2iSerializable objet = m_process;

            result = serializer.TraiteObject(ref objet);
            if (!result)
            {
                return(result);
            }
            m_process = (CProcess)objet;

            //Serialize la trace
            result = serializer.TraiteArrayListOf2iSerializable(m_pile);
            if (!result)
            {
                return(result);
            }

            if (nVersion >= 1)
            {
                objet = m_configurationImpression;
                serializer.TraiteObject(ref objet);
                m_configurationImpression = (CConfigurationsImpression)objet;
            }
            else
            {
                m_configurationImpression = new CConfigurationsImpression();
            }

            if (nVersion >= 2)
            {
                serializer.TraiteBool(ref m_bExecutionSurContexteClient);
            }

            return(result);
        }