예제 #1
0
        /// <summary>
        /// 获取表单引用的视图
        /// </summary>
        /// <param name="systemForm"></param>
        /// <returns></returns>
        public static List <Guid> GetQueryViewIds(this Domain.SystemForm systemForm)
        {
            var         form   = new FormDescriptor().DeserializeFromJson(systemForm.FormConfig);
            List <Guid> result = new List <Guid>();

            if (form.Panels.NotEmpty())
            {
                //tabs
                foreach (var tab in form.Panels)
                {
                    foreach (var sec in tab.Sections)
                    {
                        foreach (var row in sec.Rows)
                        {
                            foreach (var cell in row.Cells)
                            {
                                if (cell.Control.ControlType == FormControlType.SubGrid)
                                {
                                    result.Add(new Guid((cell.Control.Parameters as SubGridParameters).ViewId));
                                }
                            }
                        }
                    }
                }
            }
            return(result);
        }
        public void Initialize(object instance, FormDescriptor form)
        {
            foreach (var field in FieldProvider.GetAllFor(form.Id))
            {
                if (field.IsSortable)
                {
                    PropertySetter.SetProperty(form.Type, instance, field.Id, Activator.CreateInstance(typeof(List <>).MakeGenericType(field.Type)));

                    continue;
                }

                var nestedForm = FormProvider.Get(field.Type);

                if (nestedForm == null)
                {
                    continue;
                }

                var value = Activator.CreateInstance(field.Type);

                Initialize(value, nestedForm);

                PropertySetter.SetProperty(form.Type, instance, field.Id, value);
            }
        }
        public void Deserializes()
        {
            var form         = new FormDescriptor("lorem", typeof(FormA));
            var formProvider = Mock.Of <IFormProvider>();

            Mock.Get(formProvider).Setup(p => p.GetAll()).Returns(new List <FormDescriptor> {
                form
            });
            Mock.Get(formProvider).Setup(p => p.Get("lorem")).Returns(form);

            var sut    = new PolymorphicFormConverter(Mock.Of <ILogger <PolymorphicFormConverter> >(), formProvider);
            var result = JsonConvert.DeserializeObject <ContentTypeA>("{ form: { formId: 'lorem', value: { property: 'ipsum' } } }", sut);

            Assert.IsType <FormA>(result.Form);
            Assert.Equal("ipsum", ((FormA)result.Form).Property);
        }
        public void Serializes()
        {
            var form         = new FormDescriptor("lorem", typeof(FormA));
            var formProvider = Mock.Of <IFormProvider>();

            Mock.Get(formProvider).Setup(p => p.GetAll()).Returns(new List <FormDescriptor> {
                form
            });
            Mock.Get(formProvider).Setup(p => p.Get("lorem")).Returns(form);
            Mock.Get(formProvider).Setup(p => p.Get(typeof(FormA))).Returns(form);

            var sut    = new PolymorphicFormConverter(Mock.Of <ILogger <PolymorphicFormConverter> >(), formProvider);
            var result = JsonConvert.SerializeObject(new ContentTypeA {
                Form = new FormA {
                    Property = "ipsum"
                }
            }, sut);

            Assert.Equal("{\"Form\":{\"FormId\":\"lorem\",\"Value\":{\"Property\":\"ipsum\"}}}", result);
        }
예제 #5
0
        public void FindsForms()
        {
            var contentTypeProvider = Mock.Of <IContentTypeProvider>();

            Mock.Get(contentTypeProvider).Setup(p => p.GetAll()).Returns(new List <ContentTypeDescriptor> {
            });

            var formA        = new FormDescriptor("lorem", typeof(FormA));
            var formB        = new FormDescriptor("ipsum", typeof(FormB));
            var formProvider = Mock.Of <IFormProvider>();

            Mock.Get(formProvider).Setup(p => p.GetAll()).Returns(new List <FormDescriptor> {
                formA, formB
            });

            var result = new PolymorphicFormFinder(contentTypeProvider, formProvider).FindFor(typeof(FormInterface));

            Assert.Equal(new List <string> {
                "lorem"
            }, result);
        }
예제 #6
0
        public static Task <IHtmlContent> FormTwoColumnsAsync <TModel>(this IHtmlHelper <TModel> helper, FormDescriptor descriptor)
        {
            var dictionary = new ViewDataDictionary(helper.ViewData)
            {
                new KeyValuePair <string, object>(FormDescriptor.DescriptorName, descriptor)
            };

            return(helper.PartialAsync("_FormTwoColumns", helper.ViewData.Model, dictionary));
        }
예제 #7
0
        public void DeleteOriginalLabels(Domain.SystemForm original)
        {
            var         oldForm   = new FormDescriptor().DeserializeFromJson(original.FormConfig);
            List <Guid> objectIds = new List <Guid>();

            if (oldForm.Header != null && oldForm.Header.Rows.NotEmpty())
            {
                //header
                foreach (var row in oldForm.Header.Rows)
                {
                    foreach (var cell in row.Cells)
                    {
                        if (!cell.Id.Equals(Guid.Empty) && cell.Label.IsNotEmpty())
                        {
                            objectIds.Add(cell.Id);
                        }
                    }
                }
            }
            if (oldForm.NavGroups.NotEmpty())
            {
                //navs
                foreach (var navg in oldForm.NavGroups)
                {
                    if (!navg.Id.Equals(Guid.Empty) && navg.Label.IsNotEmpty())
                    {
                        objectIds.Add(navg.Id);
                    }
                    foreach (var item in navg.NavItems)
                    {
                        if (!item.Id.Equals(Guid.Empty) && item.Label.IsNotEmpty())
                        {
                            objectIds.Add(item.Id);
                        }
                    }
                }
            }
            if (oldForm.Panels.NotEmpty())
            {
                //tabs
                foreach (var tab in oldForm.Panels)
                {
                    if (!tab.Id.Equals(Guid.Empty) && tab.Label.IsNotEmpty())
                    {
                        objectIds.Add(tab.Id);
                    }
                    foreach (var sec in tab.Sections)
                    {
                        if (!sec.Id.Equals(Guid.Empty) && sec.Label.IsNotEmpty())
                        {
                            objectIds.Add(sec.Id);
                        }
                        foreach (var row in sec.Rows)
                        {
                            foreach (var cell in row.Cells)
                            {
                                if (!cell.Id.Equals(Guid.Empty) && cell.Label.IsNotEmpty())
                                {
                                    objectIds.Add(cell.Id);
                                }
                            }
                        }
                    }
                }
            }
            if (oldForm.Footer != null && oldForm.Footer.Rows.NotEmpty())
            {
                //footer
                foreach (var row in oldForm.Footer.Rows)
                {
                    foreach (var cell in row.Cells)
                    {
                        if (!cell.Id.Equals(Guid.Empty) && cell.Label.IsNotEmpty())
                        {
                            objectIds.Add(cell.Id);
                        }
                    }
                }
            }
            if (objectIds.NotEmpty())
            {
                _localizedLabelService.DeleteById(objectIds.ToArray());
            }
        }
예제 #8
0
        /// <summary>
        /// 生成默认表单
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public (Domain.SystemForm DefaultForm, List <Dependency.Domain.Dependency> Dependents) Get(Schema.Domain.Entity entity)
        {
            Domain.SystemForm form = new Domain.SystemForm
            {
                CanBeDeleted = false,
                CreatedBy    = entity.CreatedBy,
                CreatedOn    = DateTime.Now,
                Description  = _loc["form_default"],
                EntityId     = entity.EntityId,
                FormType     = (int)FormType.Main,
                Name         = entity.LocalizedName,
                StateCode    = RecordState.Enabled,
                SystemFormId = Guid.NewGuid(),
                IsDefault    = true
            };

            var            nameAttribute = _defaultAttributeProvider.GetSysAttributes(entity).Find(x => x.Name.IsCaseInsensitiveEqual("name"));
            FormDescriptor formObj       = new FormDescriptor();

            formObj.Name      = entity.LocalizedName;
            formObj.IsShowNav = false;
            formObj.Panels    = new List <PanelDescriptor>
            {
                new PanelDescriptor()
                {
                    Name = _loc["form_information"]
                    ,
                    Label = _loc["form_information"]
                    ,
                    IsExpanded = true
                    ,
                    IsShowLabel = true
                    ,
                    IsVisible = true
                    ,
                    Sections = new List <SectionDescriptor>()
                    {
                        new SectionDescriptor()
                        {
                            IsShowLabel = false
                            , IsVisible = true
                            , Label     = _loc["form_information"]
                            , Columns   = 2
                            , Rows      = new List <RowDescriptor>()
                            {
                                new RowDescriptor()
                                {
                                    IsVisible = true
                                    , Cells   = new List <CellDescriptor>()
                                    {
                                        new CellDescriptor()
                                        {
                                            IsShowLabel = true, IsVisible = true, Label = nameAttribute.LocalizedName, Control = new ControlDescriptor()
                                            {
                                                EntityName = entity.Name, Name = "name", ControlType = FormControlType.Standard
                                            }
                                        }
                                        , new CellDescriptor()
                                        {
                                            Control = new ControlDescriptor()
                                            {
                                                ControlType = FormControlType.None
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            };
            form.FormConfig = formObj.SerializeToJson(false);
            var dp = new Dependency.Domain.Dependency();

            //dp.DependentComponentType = DependencyComponentTypes.Get(FormDefaults.ModuleName);
            dp.DependentObjectId = form.SystemFormId;
            //dp.RequiredComponentType = DependencyComponentTypes.Get(AttributeDefaults.ModuleName);
            dp.RequiredObjectId = nameAttribute.AttributeId;
            var dependents = new List <Dependency.Domain.Dependency>()
            {
                dp
            };

            return(form, dependents);
        }