RunTimeExceptions werden in PrimeFact nicht protokolliert. Klar kann man sagen, das merkt man bereits in der Entwicklungsphase. Ist das Material aber erst mal produktiv, ist der Entwickler raus. Das Problem sind wie immer die seiteneffekte. Wie PrimeFact Update, Stammdatenänderungen, oder auch Sourcecodeänderungen. Solche Fehler tauchen im Produktiven Protokoll nicht auf, noch meldet sich der Endanwender. Das kann fatale folgen haben, da PrimeFact solche RunTimeExceptions nur anzeigt wenn der Profilparameter: „ShowExceptions“ auf „true“ steht.

Es gibt aber einen kleinen Trick, um auch diese Fehlermeldungen zu protokollieren.

Einfach einen LogonJob erstellen, in dem man sich auf das Event ObjectEvaluated registriert. Dort hat man die Möglichkeit solche Fehler abzufangen.

Hier der Sourcecode den man einfach in AnmeldeJob hineinkopieren kann:

	Session.ObjectEvaluated += Session_ObjectEvaluated;
}

/// <summary>
/// PrimeFact Event. Wenn das Objekt Evaluiert. Wird beim starten vom Client mittels LogOnJob registriert
/// </summary>
/// <param name="obj"></param>
/// <param name="thread"></param>
public static void Session_ObjectEvaluated(PrimeFact5.PrimeFrame.Core.Data.PFObject obj, System.Threading.Thread thread)
{
    if (obj != null)
    {
        var lstExcep = obj.RunTimeExceptions;
        if (lstExcep != null)
        {
            foreach (Exception ex in lstExcep)
            {
                obj.Session.LogException(ex);
            }
        }

        foreach(PrimeFact5.PrimeFrame.Core.Data.MDField mdf in obj.MetaData.Fields)
        {
            PrimeFact5.PrimeFrame.Core.Data.PFField fld = mdf.GetPFField(obj);
            if (fld.RunTimeException != null)
                obj.Session.LogException(fld.RunTimeException);
        }
    }

Hier mal ein Beispiel. Man hat einen Parameter in einem Material, hier wurde eine Methode gescripted, diese schlägt aber durch irgendwas fehl. Am Beispiel simulieren wir das mal einfach mit einem throw new Exception(„Test“)

/// <summary>
/// Berechnet den String, aber wirft einfach mal eine Fehlmeldung.. ;-)
/// </summary>
string CalcTempString()
{
	string x = "";

	throw new Exception("Test");
	
	return x;
}

Testet man das Material dann, stellt man fest, das der Fehler unten links angezeigt wird. So wie erwartet. Auch im Protokoll oder wer das Kibana oder ein anderes Externes Protokolliertool hat, wird dort die Meldung erscheinen.