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