public static void FlushPendingActivityEvent(int activityId, out int processedEvents) { if (activityId == 0) { processedEvents = 0; return; } processedEvents = 0; int eId = 0; int eActivityId = 0; string eDataId = ""; using (Transaction trans = DatabaseAccess.ForSystemDatabase.GetCommitableTransaction()) { using (IDataReader reader = DBRuntimePlatform.Instance.DequeueNormalEvent(trans, 1, "", activityId)) { if (reader.Read()) { eId = reader.SafeGet <int>("Id"); eActivityId = reader.SafeGet <int>("Activity_Id"); eDataId = reader.SafeGet <string>("Data_Id"); } } trans.Commit(); } if (eId == 0) { // No pending event return; } try{ string url; int tenantId; int processId; ActivityKind activityKind; string activityName; string SSKey; BPMRuntime.GetActivityDataForWS(eActivityId, out processId, out activityKind, out activityName, out SSKey, out url, out tenantId); int timeoutInSecs = 0; if (Debugger.IsRunning) { timeoutInSecs = Debugger.REQUEST_TIMEOUT_IN_SECONDS; } else { using (Transaction trans = DatabaseAccess.ForSystemDatabase.GetCommitableTransaction()) { timeoutInSecs = Settings.GetInt(Settings.Configs.Scheduler_ActivitiesTimeout, trans); } } using (IActivityHandler activityHandler = ActivityHandlerFactory.Current.GetActivityHandler(url)) { activityHandler.Timeout = (int)(1.2 * timeoutInSecs) * 1000; activityHandler.ExecuteOnEvent(SSKey, eActivityId, processId, tenantId, eDataId, /*advanceProcess*/ true); } using (Transaction trans = DatabaseAccess.ForSystemDatabase.GetCommitableTransaction()) { DBRuntimePlatform.Instance.DeleteEvent(trans, eId); processedEvents = 1; trans.Commit(); } } catch { using (Transaction trans = DatabaseAccess.ForSystemDatabase.GetCommitableTransaction()) { DBRuntimePlatform.Instance.RequeueEvent(trans, eId, true); trans.Commit(); } } }