Example #1
0
        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);
        }
Example #2
0
        void ContinueAt(NativeActivityContext context, Bookmark bookmark, Object obj)
        {
            String result = String.Empty;

            if (obj != null)
            {
                result = obj.ToString();
            }
            this.Result.Set(context, result);
            IDbContext dbContext = context.GetExtension <IDbContext>();

            context.DoModelState(dbContext, StateAfter.Get <ModelStateInfo>(context));
            context.DoTrack(dbContext, TrackAfter.Get <TrackRecord>(context));
        }
Example #3
0
        protected override void Execute(NativeActivityContext context)
        {
            Boolean          waitComplete = WaitComplete.Get <Boolean>(context);
            IDbContext       dbContext    = context.GetExtension <IDbContext>();
            var              messaging    = context.GetExtension <IMessaging>();
            IApplicationHost host         = context.GetExtension <IApplicationHost>();

            context.DoTrack(dbContext, TrackBefore.Get <TrackRecord>(context));
            context.DoModelState(dbContext, StateBefore.Get <ModelStateInfo>(context));

            var pi = ProcessInfo.Get <StartProcessInfo>(context);

            String bookmark = null;
            var    process  = Process.GetProcessFromContext(context);

            if (waitComplete)
            {
                bookmark = Guid.NewGuid().ToString();
                var wfResult = context.GetExtension <WorkflowResult>();
                // TODO: WAIT COMPLETE FOR CHILDREN
                //Int64 pid = process.CreateChildren(dbContext, kind, docId, bookmark, Mark.Get<String>(context));
            }

            var sfi = new StartWorkflowInfo()
            {
                UserId     = process.Owner,
                Source     = pi.Workflow,
                DataSource = pi.DataSource,
                Schema     = pi.Schema,
                Model      = pi.ModelName,
                ModelId    = pi.ModelId,
                ActionBase = pi.ActionBase,
                Parent     = process.Id
            };

            var task = AppWorkflow.StartWorkflow(host, dbContext, messaging, sfi);

            task.Wait();
            WorkflowResult result = task.Result;

            if (waitComplete)
            {
                context.CreateBookmark(bookmark, new BookmarkCallback(this.ContinueAt));
            }
            else
            {
                Result.Set(context, String.Empty);
            }
        }
Example #4
0
        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));
        }