private void WriterNodes(IFlow flow, StreamWriter xmlwriter) { IEnumerator iter = flow.Logs.GetEnumerator(); while (iter.MoveNext()) { ILog eventLog = (ILog)iter.Current; xmlwriter.WriteLine("id->" + eventLog.Id); if (eventLog.EventType == EventType.FORK) { IEnumerator flowIter = eventLog.GetObjectReferences("Flow").GetEnumerator(); while (flowIter.MoveNext()) { ObjectReferenceImpl objectReference = (ObjectReferenceImpl)flowIter.Current; DbSession session = OpenSession(); objectReference.Resolve(session); session.Close(); IFlow subFlow = (IFlow)objectReference.GetObject(); xmlwriter.WriteLine("subflow" + subFlow + " ->" + subFlow); WriterNodes(subFlow, xmlwriter); } } else if (eventLog.EventType == EventType.SUB_PROCESS_INSTANCE_START) { IObjectReference objectReference = (IObjectReference)eventLog.GetObjectReferences("ProcessInstance").GetEnumerator().Current; IProcessInstance subProcessInstance = (IProcessInstance)objectReference.GetObject(); WriterNodes(subProcessInstance.RootFlow, xmlwriter); } } }
private void AddDetail(ILogDetail logDetail) { if (logDetail is IAttributeUpdate) { IAttributeUpdate attributeUpdate = (IAttributeUpdate)logDetail; AddDetail("Attribute update", "[" + attributeUpdate.Attribute.Name + "]</b> to <b>[" + attributeUpdate.GetValue() + "]"); } else if (logDetail is IMessage) { IMessage message = (IMessage)logDetail; AddDetail("Message", message.MessageText); } else if (logDetail is IDelegateCall) { IDelegateCall delegateCall = (IDelegateCall)logDetail; // FIXME: why this could be null? if (delegateCall.GetInterface() != null) { AddDetail("Action handler", delegateCall.GetInterface().FullName); } } else if (logDetail is IExceptionReport) { IExceptionReport exceptionReport = (IExceptionReport)logDetail; AddDetail("<font color=red>Exception</font>", "<font color=red>" + exceptionReport.ExceptionMessage + "</font>"); } else if (logDetail is IObjectReference) { IObjectReference objectReference = (IObjectReference)logDetail; System.Object object_Renamed = objectReference.GetObject(); if (object_Renamed is IActivityState) { IActivityState activityState = (IActivityState)object_Renamed; AddDetail("Activitystate", activityState.Name); } else { log.Warn("unknown object reference type : " + object_Renamed); } } else { log.Warn("unknown log-detail type : " + logDetail); } }
private void WriteFlowEvent(TextWriter logDetail, ILog eventLog, IFlow flow) { logDetail.Write(" <tr>" + "\r\n"); logDetail.Write(" <td bgcolor=#ffffff>" + "\r\n"); logDetail.Write(" <table border=0 cellspacing=0 cellpadding=0 width=100%>" + "\r\n"); logDetail.Write(" <tr><th class=tableEventLogCell width=100% colspan=2 nowrap>" + eventLog.EventType + "</th></tr>" + "\r\n"); logDetail.Write(" <tr>" + "\r\n"); logDetail.Write(" <td> </td>" + "\r\n"); logDetail.Write(" <td width=100%>" + "\r\n"); this.details = new System.Collections.ArrayList(); AddDetail("Time", eventLog.Date.ToString()); IActor actor = eventLog.GetActor(); if (actor != null) { AddDetail("Actor", actor.Name); } if (eventLog.EventType == EventType.FORK) { logDetail.Write(" <table border=0 cellpadding=0 cellspacing=5>" + "\r\n"); logDetail.Write(" <tr>" + "\r\n"); IEnumerator iter = eventLog.GetObjectReferences("Flow").GetEnumerator(); while (iter.MoveNext()) { IObjectReference objectReference = (IObjectReference)iter.Current; IFlow subFlow = (IFlow)objectReference.GetObject(); subFlow = GetFlow(subFlow.Id); logDetail.Write(" <td valign=top height=100%>" + "\r\n"); WriteFlow(logDetail, subFlow); logDetail.Write(" </td>" + "\r\n"); } logDetail.Write(" </tr>" + "\r\n"); logDetail.Write(" </table>" + "\r\n"); } else if (eventLog.EventType == EventType.SUB_PROCESS_INSTANCE_START) { IObjectReference objectReference = (IObjectReference)eventLog.GetObjectReferences("ProcessInstance").GetEnumerator().Current; IProcessInstance subProcessInstance = (IProcessInstance)objectReference.GetObject(); IFlow subFlow = GetFlow(subProcessInstance.RootFlow.Id); WriteFlow(logDetail, subFlow); } else { // if it is no fork or subprocess, log the details IEnumerator iter = eventLog.Details.GetEnumerator(); while (iter.MoveNext()) { AddDetail((ILogDetail)iter.Current); } WriteDetails(logDetail); } logDetail.Write(" </td>" + "\r\n"); logDetail.Write(" </tr>" + "\r\n"); logDetail.Write(" <tr><td> </td></tr>" + "\r\n"); logDetail.Write(" </table>" + "\r\n"); logDetail.Write(" </td>" + "\r\n"); logDetail.Write(" </tr>" + "\r\n"); }