Esempio n. 1
0
        public string GetNextValue(object source)
        {
            C2iExpression formule = FormuleCle;
            string        strCle  = "";

            if (formule != null)
            {
                Type typeSource = TypeSource;
                CContexteEvaluationExpression ctx = null;
                if (typeSource != null)
                {
                    //Vérifie que la source est du bon type
                    if (source == null || !typeSource.IsAssignableFrom(source.GetType()))
                    {
                        throw new Exception(I.T("Source type is invalide for sequence @1 (@2)",
                                                Libelle,
                                                source == null?"Null":source.GetType().ToString()));
                    }
                    ctx = new CContexteEvaluationExpression(source);
                }
                else
                {
                    ctx = new CContexteEvaluationExpression(null);
                }
                CResultAErreur result = formule.Eval(ctx);
                if (!result)
                {
                    throw new Exception(I.T("Error while evaluating key formula for sequence @1|20131",
                                            Libelle));
                }
                if (result.Data != null)
                {
                    strCle = result.Data.ToString();
                }
                else
                {
                    strCle = "";
                }
            }
            //Cherche la dernière valeur pour cette clé
            CValeurSequenceNumerotation valeur = new CValeurSequenceNumerotation(ContexteDonnee);

            if (!valeur.ReadIfExists(new CFiltreData(CValeurSequenceNumerotation.c_champCle + "=@1 and " +
                                                     CSequenceNumerotation.c_champId + "=@2",
                                                     strCle,
                                                     Id)))
            {
                valeur.CreateNewInCurrentContexte();
                valeur.SequenceNumerotation = this;
                valeur.DerniereValeur       = ValeurDepart;
                valeur.Cle = strCle;
            }
            else
            {
                valeur.DerniereValeur++;
            }
            string strValeur = strCle + FormatNumerotation.GetReference(valeur.DerniereValeur).Data.ToString();

            return(strValeur);
        }
Esempio n. 2
0
        /// <summary>
        /// Permet de vérifier la validité d'une référence
        /// </summary>
        /// <param name="strRef">référence à valider (la référence donnée doit être une référence
        /// complete (avec les préfixes (et co) parametrés par les
        /// <see ref="CRelationSystemeCoordonnees_FormatNumerotation">Relation Systeme Coordonnées / Format Numérotation</see></param>
        /// <returns>Vrai si la référence est possible</returns>
        public CResultAErreur ReferencePossible(string strRef)
        {
            CResultAErreur result = CResultAErreur.True;

            strRef = RelationSysCoor_FormatNum.IsolerReference(strRef);

            result = FormatNumerotation.GetIndex(strRef);

            if (result.Result)
            {
                if ((int)result.Data > DernierIndice)
                {
                    result.EmpileErreur(I.T("Reference @1 is beyond the last reference (@2)|194", strRef, DerniereReference));
                }
                else if ((int)result.Data < PremierIndice)
                {
                    result.EmpileErreur(I.T("Reference @1 is underneath first reference (@2)|195", strRef, PremiereReference));
                }
            }
            return(result);
        }