Example #1
0
 void ValidateWorkflow(WorkflowInstanceExtensionManager extensionManager)
 {
     if (!WorkflowDefinition.IsRuntimeReady)
     {
         LocationReferenceEnvironment localEnvironment = this.hostEnvironment;
         if (localEnvironment == null)
         {
             LocationReferenceEnvironment parentEnvironment = null;
             if (extensionManager != null && extensionManager.SymbolResolver != null)
             {
                 parentEnvironment = extensionManager.SymbolResolver.AsLocationReferenceEnvironment();
             }
             localEnvironment = new ActivityLocationReferenceEnvironment(parentEnvironment);
         }
         IList <ValidationError> validationErrors = null;
         ActivityUtilities.CacheRootMetadata(WorkflowDefinition, localEnvironment, ProcessActivityTreeOptions.FullCachingOptions, null, ref validationErrors);
         ActivityValidationServices.ThrowIfViolationsExist(validationErrors);
     }
 }
        private static bool RequiresCompilation(IDynamicActivity dynamicActivity, LocationReferenceEnvironment environment, out string language)
        {
            language = null;

            if (!((Activity)dynamicActivity).IsMetadataCached)
            {
                IList <ValidationError> validationErrors = null;
                if (environment == null)
                {
                    environment = new ActivityLocationReferenceEnvironment {
                        CompileExpressions = true
                    };
                }

                try
                {
                    ActivityUtilities.CacheRootMetadata((Activity)dynamicActivity, environment, ProcessActivityTreeOptions.FullCachingOptions, null, ref validationErrors);
                }
                catch (Exception e)
                {
                    if (Fx.IsFatal(e))
                    {
                        throw;
                    }
                    throw FxTrace.Exception.AsError(new InvalidOperationException(SR.CompiledExpressionsCacheMetadataException(dynamicActivity.Name, e.ToString())));
                }
            }

            DynamicActivityVisitor vistor = new DynamicActivityVisitor();

            vistor.Visit((Activity)dynamicActivity, true);

            if (!vistor.RequiresCompilation)
            {
                return(false);
            }
            if (vistor.HasLanguageConflict)
            {
                throw FxTrace.Exception.AsError(new InvalidOperationException(SR.DynamicActivityMultipleExpressionLanguages(vistor.GetConflictingLanguages().AsCommaSeparatedValues())));
            }
            language = vistor.Language;
            return(true);
        }