void QueueMessage(MessageInfo mi, NativeActivityContext context) { if (mi == null) { return; } var process = Process.GetProcessFromContext(context); IMessaging messaging = context.GetExtension <IMessaging>(); var qm = messaging.CreateQueuedMessage(); qm.Template = mi.Template; qm.Key = mi.Key; qm.TargetId = mi.TargetId; qm.Immediately = mi.Immediately; qm.Source = $"SendMessage"; qm.Environment.Add("ProcessId", process.Id); qm.Parameters.Append(mi.Parameters, replaceExisiting: true); Int64 msgId = messaging.QueueMessage(qm); context.TrackRecord($"Message queued successfully {{Id: {msgId}}}"); }
void ContinueAt(NativeActivityContext context, Bookmark bookmark, Object obj) { if (!(obj is RequestResult)) { throw new WorkflowException("Invalid ResponseType. Must be RequestResult"); } IDbContext dbContext = context.GetExtension <IDbContext>(); Process process = Process.GetProcessFromContext(context); var rr = obj as RequestResult; Inbox inbox = Inbox.Get <Inbox>(context); inbox.Resumed(dbContext, rr.InboxId, rr.UserId, rr.Answer); context.TrackRecord($"Inbox resumed {{Id: {rr.InboxId}, UserId: {rr.UserId}) Result:'{rr.Answer}'}}"); // track after var trAfter = TrackAfter.Get <TrackRecord>(context); if (trAfter != null) { trAfter = trAfter.Clone(); trAfter.UserId = rr.UserId; trAfter.Message = rr.Resolve(trAfter.Message); context.DoTrack(dbContext, trAfter); } // send after SendMessage(SendAfter.Get <MessageInfo>(context), inbox, context); // state after context.DoModelState(dbContext, StateAfter.Get <ModelStateInfo>(context), rr.InboxId, rr.UserId); this.Result.Set(context, rr); }
public static void DoTrack(this NativeActivityContext context, IDbContext dbContext, TrackRecord record) { if (record == null) { return; } var process = Process.GetProcessFromContext(context); record.ProcessId = process.Id; record.Update(dbContext); context.TrackRecord($"TrackRecord written successfully {{Id:{record.Id}}}"); }
protected override void Execute(NativeActivityContext context) { var process = Process.GetProcessFromContext(context); var wfResult = context.GetExtension <WorkflowResult>(); Inbox inbox = Inbox.Get <Inbox>(context); IDbContext dbContext = context.GetExtension <IDbContext>(); inbox.Create(dbContext, process.Id); InboxId.Set(context, inbox.Id); wfResult.InboxIds.Add(inbox.Id); // track before context.DoTrack(dbContext, TrackBefore.Get <TrackRecord>(context)); // send before SendMessage(SendBefore.Get <MessageInfo>(context), inbox, context); // state before context.DoModelState(dbContext, StateBefore.Get <ModelStateInfo>(context), inbox.Id); context.TrackRecord($"Inbox created {{Id: {inbox.Id}}}."); context.CreateBookmark(inbox.Bookmark, new BookmarkCallback(this.ContinueAt)); }