Beispiel #1
0
        public void OnPreHandlerTelemetryCreatedWithinRequestScopeIsRequestChild()
        {
            var context = HttpModuleHelper.GetFakeHttpContext(new Dictionary <string, string>
            {
                ["Request-Id"]          = "|guid1.1",
                ["Correlation-Context"] = "k=v"
            });

            var config = this.CreateDefaultConfig(context);
            var module = this.RequestTrackingTelemetryModuleFactory(config);

            module.OnBeginRequest(context);

            // simulate losing call context by cleaning up activity
            ActivityHelpers.CleanOperationContext();

            // CallContext was lost after OnBegin, so OnPreRequestHandlerExecute will set it
            module.OnPreRequestHandlerExecute(context);

            // if OnPreRequestHandlerExecute set a CallContext, child telemetry will be properly filled
            var telemetryClient = new TelemetryClient(config);

            var trace = new TraceTelemetry();

            telemetryClient.TrackTrace(trace);
            var requestTelemetry = context.GetRequestTelemetry();

            Assert.Equal(requestTelemetry.Context.Operation.Id, trace.Context.Operation.Id);
            Assert.Equal(requestTelemetry.Id, trace.Context.Operation.ParentId);
            Assert.Equal("v", trace.Context.Properties["k"]);
        }
        private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            var options = new DynamicArgumentDesignerOptions
            {
                Title = string.Format("Параметры")
            };

            // получаем параметры из активити
            var parameters = GetParametersProperty();

            // дополняем параметрами из класса
            foreach (var propertyDescriptor in _eventDetailProperties)
            {
                if (parameters.ContainsKey(propertyDescriptor.Name))
                {
                    continue;
                }
                parameters.Add(propertyDescriptor.Name, ActivityHelpers.CreateDefaultValue(propertyDescriptor.PropertyType, ArgumentDirection.In));
            }

            using (var change = parameters.BeginEdit("ObjectEditing"))
            {
                if (DynamicArgumentDialog.ShowDialog(ModelItem, parameters, Context, ModelItem.View, options))
                {
                    change.Complete();
                }
                else
                {
                    change.Revert();
                }
            }
        }
Beispiel #3
0
        protected override void CacheMetadata(NativeActivityMetadata metadata)
        {
            ActivityHelpers.AcivityUseTypeValidator(metadata, typeof(T));

            var collection = new Collection <RuntimeArgument>();

            foreach (var key in Properties.Keys)
            {
                var argument        = Properties[key];
                var runtimeArgument = new RuntimeArgument(key, argument.ArgumentType, argument.Direction);
                metadata.Bind(argument, runtimeArgument);
                collection.Add(runtimeArgument);
            }

            var aToType = typeof(object);

            if (Object != null)
            {
                aToType = Object.ArgumentType;
            }
            var aTo = new RuntimeArgument("Object", aToType, ArgumentDirection.In, true);

            metadata.Bind(Object, aTo);
            collection.Add(aTo);

            metadata.SetArgumentsCollection(collection);
        }
        /// <summary>
        /// Handles movie searches.
        /// </summary>
        /// <param name="stepContext">The step context.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>Task&lt;DialogTurnResult&gt;.</returns>
        private async Task <DialogTurnResult> HandleMovieSearch(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            var userProfile = await Accessors.GetAsync(stepContext.Context, () => new UserProfile(), cancellationToken);

            var client = new TMDbClient(Settings.ApiSettings.MovieDatabaseApiKey);
            var result = await client.SearchMovieAsync(userProfile.MovieDownload.Title, cancellationToken : cancellationToken);

            if (result.TotalResults == 0)
            {
                var noResultsActivity = MessageFactory.Text(Resources.MovieDialog_ImdbSearch_NoResults);

                await stepContext.Context.SendActivityAsync(noResultsActivity, cancellationToken);

                return(await stepContext.ReplaceDialogAsync(TitleWaterFall, cancellationToken : cancellationToken));
            }
            else
            {
                var options = result.Results.Select(resultItem =>
                                                    new AttachmentOption
                {
                    ImageUrl = ActivityHelpers.FormatTmdbPosterPath(resultItem.PosterPath),
                    Value    = resultItem.Id.ToString(),
                    Title    = resultItem.Title
                }).ToList();

                userProfile.MovieDownload.SearchOptions = options;

                var activity = ActivityHelpers.GetCardChoicesFromOptions(Resources.MovieDialog_SelectMovie_Message, options, AttachmentLayoutTypes.Carousel, true);
                return(await stepContext.PromptAsync(TextPromptDialog, new PromptOptions
                {
                    Prompt = activity
                }, cancellationToken));
            }
        }
Beispiel #5
0
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            var options = new DynamicArgumentDesignerOptions
            {
                Title = string.Format("Параметры метода {0}", _methodInfo.Name)
            };

            var modelParameters = GetParametersProperty();

            foreach (var p in _methodParameters)
            {
                if (modelParameters.ContainsKey(p.Name ?? ResultParamName))
                {
                    continue;
                }

                var direction = (p.IsOut || p.IsRetval || string.IsNullOrEmpty(p.Name)) ? ArgumentDirection.Out : ArgumentDirection.In;
                modelParameters.Add(p.Name ?? ResultParamName, ActivityHelpers.CreateDefaultValue(p.ParameterType, direction));
            }

            using (ModelEditingScope change = modelParameters.BeginEdit("ObjectEditing"))
            {
                if (DynamicArgumentDialog.ShowDialog(ModelItem, modelParameters, Context, ModelItem.View, options))
                {
                    change.Complete();
                }
                else
                {
                    change.Revert();
                }
            }
        }
        protected override void CacheMetadata(NativeActivityMetadata metadata)
        {
            var collection = new Collection <RuntimeArgument>();
            var type       = GetType();

            ActivityHelpers.AddCacheMetadata(collection, metadata, TeCode, type.ExtractPropertyName(() => TeCode));
            ActivityHelpers.AddCacheMetadata(collection, metadata, PlaceCode, type.ExtractPropertyName(() => PlaceCode));
            ActivityHelpers.AddCacheMetadata(collection, metadata, IsPack, type.ExtractPropertyName(() => IsPack));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Length, type.ExtractPropertyName(() => Length));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Width, type.ExtractPropertyName(() => Width));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Height, type.ExtractPropertyName(() => Height));
            ActivityHelpers.AddCacheMetadata(collection, metadata, TareWeight, type.ExtractPropertyName(() => TareWeight));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Weight, type.ExtractPropertyName(() => Weight));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Mandants, type.ExtractPropertyName(() => Mandants));
            ActivityHelpers.AddCacheMetadata(collection, metadata, TeTypeCode, type.ExtractPropertyName(() => TeTypeCode));
            ActivityHelpers.AddCacheMetadata(collection, metadata, AutoTeType, type.ExtractPropertyName(() => AutoTeType));
            ActivityHelpers.AddCacheMetadata(collection, metadata, OutTe, type.ExtractPropertyName(() => OutTe));
            ActivityHelpers.AddCacheMetadata(collection, metadata, ExceptionResult, type.ExtractPropertyName(() => ExceptionResult));
            ActivityHelpers.AddCacheMetadata(collection, metadata, FontSize, type.ExtractPropertyName(() => FontSize));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Exist, type.ExtractPropertyName(() => Exist));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Filter, type.ExtractPropertyName(() => Filter));
            ActivityHelpers.AddCacheMetadata(collection, metadata, SuspendNotifyCollectionChanged, type.ExtractPropertyName(() => SuspendNotifyCollectionChanged));

            metadata.SetArgumentsCollection(collection);
        }
        /// <summary>
        /// Implements on PreRequestHandlerExecute callback of http module
        /// that is executed right before the handler and restores any execution context
        /// if it was lost in native/managed thread switches.
        /// </summary>
        public void OnPreRequestHandlerExecute(HttpContext context)
        {
            if (this.telemetryClient == null)
            {
                if (!this.initializationErrorReported)
                {
                    this.initializationErrorReported = true;
                    WebEventSource.Log.InitializeHasNotBeenCalledOnModuleYetError();
                }
                else
                {
                    WebEventSource.Log.InitializeHasNotBeenCalledOnModuleYetVerbose();
                }

                return;
            }

            if (context == null)
            {
                WebEventSource.Log.NoHttpContextWarning();
                return;
            }

            ActivityHelpers.RestoreOperationContextIfLost(context);
        }
        public void OperationContextIsSetForNonRequestTelemetry()
        {
            var source = new TestableOperationCorrelationTelemetryInitializer(new Dictionary <string, string>
            {
                ["Request-Id"]          = "|guid.1",
                ["Correlation-Context"] = "k1=v1,k2=v2,k1=v3"
            });

            // simulate OnBegin behavior:
            // create telemetry and start activity for children
            var requestTelemetry = source.FakeContext.CreateRequestTelemetryPrivate();

            // lost Acitivity / call context
            ActivityHelpers.CleanOperationContext();

            var exceptionTelemetry = new ExceptionTelemetry();

            source.Initialize(exceptionTelemetry);

            Assert.AreEqual(requestTelemetry.Context.Operation.Id, exceptionTelemetry.Context.Operation.Id);
            Assert.AreEqual(requestTelemetry.Id, exceptionTelemetry.Context.Operation.ParentId);

            Assert.AreEqual(2, exceptionTelemetry.Context.Properties.Count);

            // undefined behavior for duplicates
            Assert.IsTrue(exceptionTelemetry.Context.Properties["k1"] == "v3" || exceptionTelemetry.Context.Properties["k1"] == "v1");
            Assert.AreEqual("v2", exceptionTelemetry.Context.Properties["k2"]);
        }
Beispiel #9
0
        public void TelemetryCreatedWithinRequestScopeIsRequestChildWhenActivityIsLost()
        {
            var context = HttpModuleHelper.GetFakeHttpContext(new Dictionary <string, string>
            {
                ["Request-Id"]          = "|guid1.1",
                ["Correlation-Context"] = "k=v"
            });

            var config = this.CreateDefaultConfig(context);
            var module = this.RequestTrackingTelemetryModuleFactory(config);

            module.OnBeginRequest(context);

            // simulate losing call context by cleaning up activity
            ActivityHelpers.CleanOperationContext();

            var telemetryClient = new TelemetryClient(config);

            var trace = new TraceTelemetry();

            telemetryClient.TrackTrace(trace);
            var requestTelemetry = context.GetRequestTelemetry();

            Assert.Equal(requestTelemetry.Context.Operation.Id, trace.Context.Operation.Id);
            Assert.Equal(requestTelemetry.Id, trace.Context.Operation.ParentId);
            Assert.Equal("v", trace.Context.Properties["k"]);
        }
        protected override void CacheMetadata(NativeActivityMetadata metadata)
        {
            var collection = new Collection <RuntimeArgument>();
            var type       = GetType();

            ActivityHelpers.AddCacheMetadata(collection, metadata, FontSize, type.ExtractPropertyName(() => FontSize));
            metadata.SetArgumentsCollection(collection);
        }
        internal static RequestTelemetry CreateRequestTelemetryPrivate(
            this HttpContext platformContext)
        {
            if (platformContext == null)
            {
                throw new ArgumentNullException(nameof(platformContext));
            }

            var result          = new RequestTelemetry();
            var currentActivity = Activity.Current;
            var requestContext  = result.Context.Operation;

            if (currentActivity == null)
            {
                // if there was no BeginRequest, ASP.NET HttpModule did not have a chance to set current activity (and will never do it).
                currentActivity = new Activity(ActivityHelpers.RequestActivityItemName);

                if (ActivityHelpers.IsW3CTracingEnabled)
                {
                    ActivityHelpers.ExtractW3CContext(platformContext.Request, currentActivity);
                    ActivityHelpers.ExtractTracestate(platformContext.Request, currentActivity, result);
                    // length enforced in SetW3CContext
                    currentActivity.SetParentId(currentActivity.GetTraceId());
                    W3COperationCorrelationTelemetryInitializer.UpdateTelemetry(result, currentActivity, true);

                    SetLegacyContextIds(platformContext.Request, result);
                }
                else if (currentActivity.Extract(platformContext.Request.Headers))
                {
                    requestContext.ParentId = currentActivity.ParentId;
                }
                else if (ActivityHelpers.TryParseCustomHeaders(platformContext.Request, out var rootId, out var parentId))
                {
                    currentActivity.SetParentId(rootId);
                    if (!string.IsNullOrEmpty(parentId))
                    {
                        currentActivity.SetParentId(rootId);
                        if (!string.IsNullOrEmpty(parentId))
                        {
                            requestContext.ParentId = parentId;
                        }
                    }
                }
                else
                {
                    // As a first step in supporting W3C protocol in ApplicationInsights,
                    // we want to generate Activity Ids in the W3C compatible format.
                    // While .NET changes to Activity are pending, we want to ensure trace starts with W3C compatible Id
                    // as early as possible, so that everyone has a chance to upgrade and have compatibility with W3C systems once they arrive.
                    // So if there is no current Activity (i.e. there were no Request-Id header in the incoming request), we'll override ParentId on
                    // the current Activity by the properly formatted one. This workaround should go away
                    // with W3C support on .NET https://github.com/dotnet/corefx/issues/30331
                    currentActivity.SetParentId(StringUtilities.GenerateTraceId());
                    // end of workaround
                }

                currentActivity.Start();
            }
        protected override void CacheMetadata(NativeActivityMetadata metadata)
        {
            var collection = new Collection <RuntimeArgument>();
            var type       = GetType();

            ActivityHelpers.AddCacheMetadata(collection, metadata, Context, type.ExtractPropertyName(() => Context));

            metadata.SetArgumentsCollection(collection);
            metadata.AddImplementationChild(_terminateWorkflow);
        }
        protected override void CacheMetadata(NativeActivityMetadata metadata)
        {
            var collection = new Collection <RuntimeArgument>();
            var type       = GetType();

            ActivityHelpers.AddCacheMetadata(collection, metadata, WorkflowCode, type.ExtractPropertyName(() => WorkflowCode));
            ActivityHelpers.AddCacheMetadata(collection, metadata, InnerBpContext, type.ExtractPropertyName(() => InnerBpContext));

            metadata.SetArgumentsCollection(collection);
        }
        private string GetWorkflowXaml(string wfDialogWorkerDateTill)
        {
            if (_wfCache.ContainsKey(wfDialogWorkerDateTill))
            {
                return(_wfCache[wfDialogWorkerDateTill]);
            }

            _wfCache[wfDialogWorkerDateTill] = ActivityHelpers.GetWorkflowXaml(wfDialogWorkerDateTill);
            return(_wfCache[wfDialogWorkerDateTill]);
        }
Beispiel #15
0
        public void Cleanup()
        {
#if NET452
            while (Activity.Current != null)
            {
                Activity.Current.Stop();
            }
#else
            ActivityHelpers.CleanOperationContext();
#endif
        }
Beispiel #16
0
        protected override void CacheMetadata(NativeActivityMetadata metadata)
        {
            var collection = new Collection <RuntimeArgument>();
            var type       = GetType();

            ActivityHelpers.AddCacheMetadata(collection, metadata, Source, type.ExtractPropertyName(() => Source));
            ActivityHelpers.AddCacheMetadata(collection, metadata, DialogResult, type.ExtractPropertyName(() => DialogResult));
            ActivityHelpers.AddCacheMetadata(collection, metadata, SelectedKitCode, type.ExtractPropertyName(() => SelectedKitCode));

            metadata.SetArgumentsCollection(collection);
        }
Beispiel #17
0
        protected override void CacheMetadata(NativeActivityMetadata metadata)
        {
            var collection = new Collection <RuntimeArgument>();
            var type       = GetType();

            ActivityHelpers.AddCacheMetadata(collection, metadata, Title, type.ExtractPropertyName(() => Title));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Message, type.ExtractPropertyName(() => Message));
            ActivityHelpers.AddCacheMetadata(collection, metadata, ErrorList, type.ExtractPropertyName(() => ErrorList));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Error, type.ExtractPropertyName(() => Error));

            metadata.SetArgumentsCollection(collection);
        }
Beispiel #18
0
        private void Application_PreRequestHandlerExecute(object sender, EventArgs e)
        {
            var httpApplication = (HttpApplication)sender;

            if (httpApplication == null)
            {
                WebEventSource.Log.NoHttpApplicationWarning();
                return;
            }

            TraceCallback(nameof(this.Application_PreRequestHandlerExecute), httpApplication);
            ActivityHelpers.RestoreActivityIfNeeded(httpApplication.Context?.Items);
        }
        protected override void CacheMetadata(NativeActivityMetadata metadata)
        {
            var collection = new Collection <RuntimeArgument>();
            var type       = GetType();

            ActivityHelpers.AddCacheMetadata(collection, metadata, FontSize, type.ExtractPropertyName(() => FontSize));
            ActivityHelpers.AddCacheMetadata(collection, metadata, WorkerId, type.ExtractPropertyName(() => WorkerId));
            ActivityHelpers.AddCacheMetadata(collection, metadata, WorkerFullName, type.ExtractPropertyName(() => WorkerFullName));
            ActivityHelpers.AddCacheMetadata(collection, metadata, WfDialogWorkerDateTill, type.ExtractPropertyName(() => WfDialogWorkerDateTill));
            ActivityHelpers.AddCacheMetadata(collection, metadata, ExcludedOperations, type.ExtractPropertyName(() => ExcludedOperations));

            metadata.SetArgumentsCollection(collection);
        }
Beispiel #20
0
        protected override void CacheMetadata(NativeActivityMetadata metadata)
        {
            var collection = new Collection <RuntimeArgument>();
            var type       = GetType();

            ActivityHelpers.AddCacheMetadata(collection, metadata, FontSize, type.ExtractPropertyName(() => FontSize));
            ActivityHelpers.AddCacheMetadata(collection, metadata, DialogTitle, type.ExtractPropertyName(() => DialogTitle));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Message, type.ExtractPropertyName(() => Message));
            ActivityHelpers.AddCacheMetadata(collection, metadata, DateFrom, type.ExtractPropertyName(() => DateFrom));
            ActivityHelpers.AddCacheMetadata(collection, metadata, TimerOffset, type.ExtractPropertyName(() => TimerOffset));
            ActivityHelpers.AddCacheMetadata(collection, metadata, TimerValue, type.ExtractPropertyName(() => TimerValue));

            metadata.SetArgumentsCollection(collection);
        }
Beispiel #21
0
        protected override void CacheMetadata(NativeActivityMetadata metadata)
        {
            var collection = new Collection <RuntimeArgument>();
            var type       = GetType();

            ActivityHelpers.AddCacheMetadata(collection, metadata, FontSize, type.ExtractPropertyName(() => FontSize));
            ActivityHelpers.AddCacheMetadata(collection, metadata, SKU, type.ExtractPropertyName(() => SKU));
            ActivityHelpers.AddCacheMetadata(collection, metadata, OperationCode, type.ExtractPropertyName(() => OperationCode));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Entity, type.ExtractPropertyName(() => Entity));
            ActivityHelpers.AddCacheMetadata(collection, metadata, MaxRowsOnPage, type.ExtractPropertyName(() => MaxRowsOnPage));
            ActivityHelpers.AddCacheMetadata(collection, metadata, HistoryPropertyValue, type.ExtractPropertyName(() => HistoryPropertyValue));

            metadata.SetArgumentsCollection(collection);
        }
Beispiel #22
0
        protected override void CacheMetadata(NativeActivityMetadata metadata)
        {
            var collection = new Collection <RuntimeArgument>();
            var type       = GetType();

            ActivityHelpers.AddCacheMetadata(collection, metadata, DialogResult, type.ExtractPropertyName(() => DialogResult));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Source, type.ExtractPropertyName(() => Source));
            ActivityHelpers.AddCacheMetadata(collection, metadata, DialogWidth, type.ExtractPropertyName(() => DialogWidth));
            ActivityHelpers.AddCacheMetadata(collection, metadata, DialogHeight, type.ExtractPropertyName(() => DialogHeight));
            ActivityHelpers.AddCacheMetadata(collection, metadata, WorkingProp, type.ExtractPropertyName(() => WorkingProp));
            ActivityHelpers.AddCacheMetadata(collection, metadata, ActionWorkflowCode, type.ExtractPropertyName(() => ActionWorkflowCode));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Title, type.ExtractPropertyName(() => Title));
            metadata.SetArgumentsCollection(collection);
        }
        /// <summary>
        /// FTPs the NZB.
        /// </summary>
        /// <param name="stepContext">The step context.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>Task&lt;DialogTurnResult&gt;.</returns>
        private async Task <DialogTurnResult> FtpNzb(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            var userProfile = await Accessors.GetAsync(stepContext.Context, () => new UserProfile(), cancellationToken);

            var stringResult = stepContext.Result.ToString();

            var item  = userProfile.MovieDownload.NzbOptions.FirstOrDefault(r => r.Title == stringResult);
            var bytes = await GetNzb(item.Value);

            await ActivityHelpers.FtpBytes(bytes, item.Title);

            userProfile.MovieDownload.QualitySet = false;

            return(await stepContext.EndDialogAsync(cancellationToken : cancellationToken));
        }
Beispiel #24
0
        protected override void CacheMetadata(NativeActivityMetadata metadata)
        {
            var collection = new Collection <RuntimeArgument>();
            var type       = GetType();

            ActivityHelpers.AddCacheMetadata(collection, metadata, Host, type.ExtractPropertyName(() => Host));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Port, type.ExtractPropertyName(() => Port));
            ActivityHelpers.AddCacheMetadata(collection, metadata, From, type.ExtractPropertyName(() => From));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Recipients, type.ExtractPropertyName(() => Recipients));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Subject, type.ExtractPropertyName(() => Subject));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Body, type.ExtractPropertyName(() => Body));
            ActivityHelpers.AddCacheMetadata(collection, metadata, IsBodyHtml, type.ExtractPropertyName(() => IsBodyHtml));

            metadata.SetArgumentsCollection(collection);
        }
        protected override void CacheMetadata(NativeActivityMetadata metadata)
        {
            var collection = new Collection <RuntimeArgument>();
            var type       = GetType();

            ActivityHelpers.AddCacheMetadata(collection, metadata, Model, type.ExtractPropertyName(() => Model));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Source, type.ExtractPropertyName(() => Source));
            ActivityHelpers.AddCacheMetadata(collection, metadata, IsMenuVisible, type.ExtractPropertyName(() => IsMenuVisible));
            ActivityHelpers.AddCacheMetadata(collection, metadata, MenuItems, type.ExtractPropertyName(() => MenuItems));
            ActivityHelpers.AddCacheMetadata(collection, metadata, DialogResult, type.ExtractPropertyName(() => DialogResult));
            ActivityHelpers.AddCacheMetadata(collection, metadata, DialogResultWithMenu, type.ExtractPropertyName(() => DialogResultWithMenu));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Layout, type.ExtractPropertyName(() => Layout));

            metadata.SetArgumentsCollection(collection);
        }
Beispiel #26
0
        public void Cleanup()
        {
            while (this.sentTelemetry.TryDequeue(out _))
            {
            }

#if NET45
            while (Activity.Current != null)
            {
                Activity.Current.Stop();
            }
#else
            ActivityHelpers.CleanOperationContext();
#endif
        }
        protected override void CacheMetadata(NativeActivityMetadata metadata)
        {
            var collection = new Collection <RuntimeArgument>();
            var type       = GetType();

            ActivityHelpers.AddCacheMetadata(collection, metadata, Title, type.ExtractPropertyName(() => Title));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Model, type.ExtractPropertyName(() => Model));
            ActivityHelpers.AddCacheMetadata(collection, metadata, DialogResult, type.ExtractPropertyName(() => DialogResult));
            ActivityHelpers.AddCacheMetadata(collection, metadata, DialogWidth, type.ExtractPropertyName(() => DialogWidth));
            ActivityHelpers.AddCacheMetadata(collection, metadata, DialogHeight, type.ExtractPropertyName(() => DialogHeight));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Layout, type.ExtractPropertyName(() => Layout));
            ActivityHelpers.AddCacheMetadata(collection, metadata, InsertFromAvailableItems, type.ExtractPropertyName(() => InsertFromAvailableItems));

            metadata.SetArgumentsCollection(collection);
        }
        protected override void Execute(NativeActivityContext context)
        {
            var ext          = ActivityHelpers.GetTraceExtension(context);
            var workflowXaml = GetWorkflowXaml(context);
            var bpContext    = InnerBpContext.Get(context);

            var parentWwfinstanceId = ext == null
                ? null
                : ext.Get <Guid?>(TraceExtension.ParentWfInstanceIdPropertyName);

            if (parentWwfinstanceId.HasValue && bpContext != null)
            {
                _parentWwfinstanceId = parentWwfinstanceId;
                _canInduceIdle       = true;
                _bookmark            = context.CreateBookmark("ExecuteWorkflowActivityBookmark_" + Guid.NewGuid(), OnBookmarkResume);

                var executionContext = new ExecutionContext(string.Empty,
                                                            new Dictionary <string, object>
                {
                    { BpContext.BpContextArgumentName, bpContext }
                });
                var engine = IoC.Instance.Resolve <IProcessExecutorEngine>(WorkflowProcessExecutorConstants.Workflow);
                engine.Run(workflowXaml: workflowXaml, context: executionContext, completedHandler: ctx =>
                {
                    ctx.ParentInstanceId     = _parentWwfinstanceId;
                    ctx.ShouldResumeBookmark = _bookmark.Name;
                });
            }
            else
            {
                DynamicActivity activity;
                using (var reader = new StringReader(workflowXaml))
                    activity = (DynamicActivity)ActivityXamlServices.Load(reader);

                if (bpContext == null)
                {
                    WorkflowInvoker.Invoke(activity);
                }
                else
                {
                    var inputs = new Dictionary <string, object> {
                        { BpContext.BpContextArgumentName, bpContext }
                    };
                    WorkflowInvoker.Invoke(activity, inputs);
                    InnerBpContext.Set(context, bpContext);
                }
            }
        }
Beispiel #29
0
        /// <summary>
        /// Restores Activity before each pipeline step if it was lost.
        /// </summary>
        /// <param name="context">HttpContext instance.</param>
        /// <param name="step">Step to be executed.</param>
        private static void OnExecuteRequestStep(HttpContextBase context, Action step)
        {
            if (context == null)
            {
                WebEventSource.Log.NoHttpContextWarning();
                return;
            }

            TraceCallback(nameof(OnExecuteRequestStep), context.ApplicationInstance);
            if (context.CurrentNotification == RequestNotification.ExecuteRequestHandler && !context.IsPostNotification)
            {
                ActivityHelpers.RestoreActivityIfNeeded(context.Items);
            }

            step();
        }
        protected override void CacheMetadata(NativeActivityMetadata metadata)
        {
            var collection = new Collection <RuntimeArgument>();
            var type       = GetType();

            ActivityHelpers.AddCacheMetadata(collection, metadata, ShowErorDialog, type.ExtractPropertyName(() => ShowErorDialog));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Title, type.ExtractPropertyName(() => Title));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Message, type.ExtractPropertyName(() => Message));
            ActivityHelpers.AddCacheMetadata(collection, metadata, ForceError, type.ExtractPropertyName(() => ForceError));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Error, type.ExtractPropertyName(() => Error));
            ActivityHelpers.AddCacheMetadata(collection, metadata, IsActivitiesStackIncluded, type.ExtractPropertyName(() => IsActivitiesStackIncluded));
            ActivityHelpers.AddCacheMetadata(collection, metadata, IsSendMail, type.ExtractPropertyName(() => IsSendMail));
            ActivityHelpers.AddCacheMetadata(collection, metadata, Rethrow, type.ExtractPropertyName(() => Rethrow));

            metadata.SetArgumentsCollection(collection);
        }