Example #1
0
        private void finalizeCodeActivity_Finalize_ExecuteCode(object sender, EventArgs e)
        {
            IInlineFunction function = this.GetBinding <IInlineFunction>("NewFunction");

            function.UpdateCodePath();

            string selectedTemplate = this.GetBinding <string>("SelectedTemplate");

            string codeTemplate;

            switch (selectedTemplate)
            {
            case "clean":
                codeTemplate = _cleanTemplate;
                break;

            case "parameter":
                codeTemplate = _parameterTemplate;

                List <ManagedParameterDefinition> parameters = new List <ManagedParameterDefinition>();

                ManagedParameterDefinition parameter1 = new ManagedParameterDefinition();
                parameter1.Id       = Guid.NewGuid();
                parameter1.Name     = "myIntValue";
                parameter1.Label    = "myIntValue";
                parameter1.HelpText = "myIntValue";
                parameter1.Position = 0;
                parameter1.Type     = typeof(int);
                parameter1.TestValueFunctionMarkup = "<f:function xmlns:f=\"http://www.composite.net/ns/function/1.0\" name=\"Composite.Constant.Integer\"><f:param name=\"Constant\" value=\"0\" /></f:function>";
                parameter1.WidgetFunctionMarkup    = "<f:widgetfunction xmlns:f=\"http://www.composite.net/ns/function/1.0\" name=\"Composite.Widgets.Integer.TextBox\" label=\"myIntValue\" bindingsourcename=\"\"><f:helpdefinition xmlns:f=\"http://www.composite.net/ns/function/1.0\" helptext=\"myIntValue\" /></f:widgetfunction>";
                parameters.Add(parameter1);


                ManagedParameterDefinition parameter2 = new ManagedParameterDefinition();
                parameter2.Id       = Guid.NewGuid();
                parameter2.Name     = "myStringValue";
                parameter2.Label    = "myStringValue";
                parameter2.HelpText = "myStringValue";
                parameter2.Position = 1;
                parameter2.Type     = typeof(string);
                parameter2.TestValueFunctionMarkup = "<f:function xmlns:f=\"http://www.composite.net/ns/function/1.0\" name=\"Composite.Constant.String\"><f:param name=\"Constant\" value=\"Hello world!\" /></f:function>";
                parameter2.WidgetFunctionMarkup    = "<f:widgetfunction xmlns:f=\"http://www.composite.net/ns/function/1.0\" name=\"Composite.Widgets.String.TextBox\" label=\"myStringValue\" bindingsourcename=\"\"><f:helpdefinition xmlns:f=\"http://www.composite.net/ns/function/1.0\" helptext=\"myStringValue\" /></f:widgetfunction>";
                parameters.Add(parameter2);

                ManagedParameterManager.Save(function.Id, parameters);
                break;

            case "dataconnection":
                codeTemplate = _dataConnectionTemplate;
                break;

            default:
                throw new NotImplementedException();
            }

            string code = string.Format(codeTemplate, function.Namespace, InlineFunctionHelper.MethodClassContainerName, function.Name);

            code = code.Replace('и', '\t');

            using (TransactionScope transactionScope = TransactionsFacade.CreateNewScope())
            {
                foreach (string assemblyPath in InlineFunctionHelper.DefaultAssemblies)
                {
                    IInlineFunctionAssemblyReference reference = DataFacade.BuildNew <IInlineFunctionAssemblyReference>();
                    reference.Id       = Guid.NewGuid();
                    reference.Function = function.Id;
                    reference.Name     = System.IO.Path.GetFileName(assemblyPath);
                    reference.Location = InlineFunctionHelper.GetAssemblyLocation(assemblyPath);

                    DataFacade.AddNew(reference);
                }

                function.SetFunctinoCode(code);

                function = DataFacade.AddNew(function);

                UserSettings.LastSpecifiedNamespace = function.Namespace;

                transactionScope.Complete();
            }

            this.CloseCurrentView();
            this.CreateAddNewTreeRefresher(this.EntityToken).PostRefreshMesseges(function.GetDataEntityToken());
            this.ExecuteWorklow(function.GetDataEntityToken(), WorkflowFacade.GetWorkflowType("Composite.Workflows.Plugins.Elements.ElementProviders.MethodBasedFunctionProviderElementProvider.EditInlineFunctionWorkflow"));
        }
        private void editCodeActivity_Preview_ExecuteCode(object sender, EventArgs e)
        {
            IInlineFunction functionInfo       = this.GetBinding <IInlineFunction>("Function");
            string          code               = this.GetBinding <string>("FunctionCode");
            List <string>   selectedAssemblies = this.GetBinding <List <string> >("SelectedAssemblies");

            StringInlineFunctionCreateMethodErrorHandler handler = new StringInlineFunctionCreateMethodErrorHandler();

            MethodInfo methodInfo = InlineFunctionHelper.Create(functionInfo, code, handler, selectedAssemblies);

            FlowControllerServicesContainer serviceContainer            = WorkflowFacade.GetFlowControllerServicesContainer(WorkflowEnvironment.WorkflowInstanceId);
            IFormFlowWebRenderingService    formFlowWebRenderingService = serviceContainer.GetService <IFormFlowWebRenderingService>();

            if (handler.HasErrors)
            {
                StringBuilder sb = new StringBuilder();

                if (!string.IsNullOrWhiteSpace(handler.MissingContainerType))
                {
                    AddFormattedTextBlock(sb, handler.MissingContainerType);
                }

                if (!string.IsNullOrWhiteSpace(handler.NamespaceMismatch))
                {
                    AddFormattedTextBlock(sb, handler.NamespaceMismatch);
                }

                if (!string.IsNullOrWhiteSpace(handler.MissionMethod))
                {
                    AddFormattedTextBlock(sb, handler.MissionMethod);
                }

                if (handler.LoadingException != null)
                {
                    AddFormattedTextBlock(sb, handler.LoadingException.ToString());
                }

                foreach (Tuple <int, string, string> compileError in handler.CompileErrors)
                {
                    AddFormattedTextBlock(sb, "{0} : {1} : {2}".FormatWith(compileError.Item1, compileError.Item2, compileError.Item3));
                }

                formFlowWebRenderingService.SetNewPageOutput(new LiteralControl(sb.ToString()));

                return;
            }

            List <ManagedParameterDefinition> parameters = this.GetBinding <List <ManagedParameterDefinition> >("Parameters");

            List <object> parameterValues        = new List <object>();
            bool          parameterErrors        = false;
            StringBuilder parameterErrorMessages = new StringBuilder();

            foreach (ParameterInfo parameterInfo in methodInfo.GetParameters())
            {
                ManagedParameterDefinition parameter = parameters.FirstOrDefault(f => f.Name == parameterInfo.Name);
                if (parameter == null)
                {
                    string message = string.Format(GetText("CSharpInlineFunction.MissingParameterDefinition"), parameterInfo.Name);

                    parameterErrors = true;
                    AddFormattedTextBlock(parameterErrorMessages, message);
                }
                else if (parameter.Type != parameterInfo.ParameterType)
                {
                    string message = string.Format(GetText("CSharpInlineFunction.WrongParameterTestValueType"), parameterInfo.Name, parameterInfo.ParameterType, parameter.Type);

                    parameterErrors = true;
                    AddFormattedTextBlock(parameterErrorMessages, message);
                }
                else
                {
                    string previewValueFunctionMarkup = (string.IsNullOrEmpty(parameter.TestValueFunctionMarkup) ? parameter.DefaultValueFunctionMarkup : parameter.TestValueFunctionMarkup);

                    if (string.IsNullOrEmpty(previewValueFunctionMarkup))
                    {
                        string message = string.Format(GetText("CSharpInlineFunction.MissingParameterTestOrDefaultValue"), parameterInfo.Name, parameterInfo.ParameterType, parameter.Type);

                        parameterErrors = true;
                        AddFormattedTextBlock(parameterErrorMessages, message);
                    }
                    else
                    {
                        try
                        {
                            BaseRuntimeTreeNode treeNode = FunctionFacade.BuildTree(XElement.Parse(previewValueFunctionMarkup));
                            object value      = treeNode.GetValue();
                            object typedValue = ValueTypeConverter.Convert(value, parameter.Type);
                            parameterValues.Add(typedValue);
                        }
                        catch (Exception ex)
                        {
                            string message = string.Format("Error setting '{0}'. {1}", parameterInfo.Name, ex.Message);

                            parameterErrors = true;
                            AddFormattedTextBlock(parameterErrorMessages, message);
                        }
                    }
                }
            }

            if (parameterErrors)
            {
                formFlowWebRenderingService.SetNewPageOutput(new LiteralControl(parameterErrorMessages.ToString()));
                return;
            }

            CultureInfo oldCurrentCulture   = Thread.CurrentThread.CurrentCulture;
            CultureInfo oldCurrentUICulture = Thread.CurrentThread.CurrentUICulture;

            try
            {
                Guid pageId;
                if (this.GetBinding <object>("PageId") == null)
                {
                    pageId = Guid.Empty;
                }
                else
                {
                    pageId = this.GetBinding <Guid>("PageId");
                }
                string      dataScopeName = this.GetBinding <string>("PageDataScopeName");
                string      cultureName   = this.GetBinding <string>("ActiveCultureName");
                CultureInfo cultureInfo   = null;
                if (cultureName != null)
                {
                    cultureInfo = CultureInfo.CreateSpecificCulture(cultureName);
                }

                using (new DataScope(DataScopeIdentifier.Deserialize(dataScopeName), cultureInfo))
                {
                    Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = cultureInfo;

                    IPage page = DataFacade.GetData <IPage>(f => f.Id == pageId).FirstOrDefault();
                    if (page != null)
                    {
                        PageRenderer.CurrentPage = page;
                    }

                    object result = methodInfo.Invoke(null, parameterValues.ToArray());

                    string resultString;

                    try
                    {
                        resultString = PrettyPrinter.Print(result);
                    }
                    catch (Exception ex)
                    {
                        throw new TargetInvocationException(ex);
                    }

                    SetOutput(formFlowWebRenderingService, resultString);
                }
            }
            catch (TargetInvocationException ex)
            {
                SetOutput(formFlowWebRenderingService, ex.InnerException.ToString());
            }
            finally
            {
                Thread.CurrentThread.CurrentCulture   = oldCurrentCulture;
                Thread.CurrentThread.CurrentUICulture = oldCurrentUICulture;
            }
        }
        private void Field_Save()
        {
            if (CurrentlySelectedFieldId == Guid.Empty)
            {
                return;
            }

            if (this.CurrentFields.Count(f => f.Id == this.CurrentlySelectedFieldId) == 0)
            {
                ManagedParameterDefinition newField = new ManagedParameterDefinition {
                    Id   = this.CurrentlySelectedFieldId,
                    Name = this.NameField.Text,
                    Type = this.CurrentlySelectedType
                };
                newField.Position = this.CurrentFields.Count;
                this.CurrentFields.Add(newField);
            }

            if (FieldNameSyntaxValid(this.NameField.Text) == false)
            {
                ShowMessage(this.NameField.ClientID, GetString("FieldNameSyntaxInvalid"));
                return;
            }

            if (this.CurrentFields.Count <ManagedParameterDefinition>(f => f.Name.ToLower() == this.NameField.Text.ToLower() && f.Id != this.CurrentlySelectedFieldId) > 0)
            {
                ShowMessage(this.NameField.ClientID, GetString("CannotSave"));
                return;
            }

            var field = this.CurrentFields.Single(f => f.Id == this.CurrentlySelectedFieldId);

            if (field.Name != this.NameField.Text)
            {
                nameChanged = true;
            }

            field.Name = this.NameField.Text;
            field.Type = this.CurrentlySelectedType;

            bool   generateLabel = (this.LabelField.Text == "" && this.NameField.Text.StartsWith(_defaultFieldNamePrefix) == false);
            string label         = (generateLabel ? this.NameField.Text : this.LabelField.Text);

            field.Label    = label;
            field.HelpText = this.HelpField.Text;

            if (!btnWidgetFunctionMarkup.Value.IsNullOrEmpty())
            {
                XElement functionElement = XElement.Parse(btnWidgetFunctionMarkup.Value);
                if (functionElement.Name.Namespace != Namespaces.Function10)
                {
                    functionElement = functionElement.Elements().First();
                }

                field.WidgetFunctionMarkup = functionElement.ToString(SaveOptions.DisableFormatting);
            }
            else
            {
                field.WidgetFunctionMarkup = "";
            }


            if (!btnDefaultValueFunctionMarkup.Value.IsNullOrEmpty())
            {
                XElement functionElement = XElement.Parse(btnDefaultValueFunctionMarkup.Value);
                if (functionElement.Name.Namespace != Namespaces.Function10)
                {
                    functionElement = functionElement.Elements().First();
                }

                field.DefaultValueFunctionMarkup = functionElement.ToString(SaveOptions.DisableFormatting);
            }
            else
            {
                field.DefaultValueFunctionMarkup = null;
            }


            if (!btnTestValueFunctionMarkup.Value.IsNullOrEmpty())
            {
                XElement functionElement = XElement.Parse(btnTestValueFunctionMarkup.Value);
                if (functionElement.Name.Namespace != Namespaces.Function10)
                {
                    functionElement = functionElement.Elements().First();
                }

                field.TestValueFunctionMarkup = functionElement.ToString(SaveOptions.DisableFormatting);
            }
            else
            {
                field.TestValueFunctionMarkup = null;
            }


            int newPosition = int.Parse(this.PositionField.SelectedValue);

            if (newPosition == -1)
            {
                newPosition = this.CurrentFields.Count - 1;
            }

            if (field.Position != newPosition)
            {
                this.CurrentFields.Remove(field);

                foreach (ManagedParameterDefinition laterField in this.CurrentFields.Where(f => f.Position > field.Position))
                {
                    laterField.Position--;
                }

                foreach (ManagedParameterDefinition laterField in this.CurrentFields.Where(f => f.Position >= newPosition))
                {
                    laterField.Position++;
                }

                field.Position = newPosition;
                this.CurrentFields.Insert(newPosition, field);
            }
        }