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