Example #1
0
        public SubmitResult SetViewParams(ViewParamsSetter setter)
        {
            var ps = new List <Page>();

            if (setter.PageName != null)
            {
                ps = Repository.Find(d => d.TenantId == setter.TenantId && d.Name == setter.PageName);
            }
            else if (setter.TemplateName != null)
            {
                ps = Repository.Find(d => d.TenantId == setter.TenantId && d.PageCategory.Name == setter.TemplateName);
            }
            else
            {
                throw new ArgumentException("PageName or TemplateName must be provided");
            }

            if (!ps.Any())
            {
                throw new ArgumentOutOfRangeException("not found");
            }

            foreach (var p in ps)
            {
                var vp = new ViewParams();
                if (p.ViewParams != null)
                {
                    vp = p.ViewParams.FromJson <ViewParams>();
                }

                if (vp.Other == null)
                {
                    vp.Other = new Dictionary <string, string>();
                }

                if (setter.Fields != null)
                {
                    vp.Fields = setter.Fields;
                }

                foreach (var kv in setter.Data)
                {
                    if (kv.Key.ToLower().StartsWith("other."))
                    {
                        string key = kv.Key.GetAfterFirst(".");
                        if (kv.Value.ToLower() == "default")
                        {
                            vp.Other.Remove(key);
                        }
                        else
                        {
                            vp.Other[key] = kv.Value;
                        }
                    }
                    else
                    {
                        var prop = typeof(ViewParams).GetProperty(kv.Key);
                        if (prop != null)
                        {
                            prop.SetValue(vp, kv.Value);
                        }
                    }
                }
                p.ViewParams = vp.ToJson();
            }

            return(Unit.SaveChanges());
        }