/// <summary>
 ///     Resolves the dependencies by means of persisting all models that this model is referencing.
 /// </summary>
 protected override void ResolveGeneratedDependency()
 {
     base.ResolveGeneratedDependency();
     if (_screenObject != null)
     {
         _screenObject.Save();
         this.ModifiedData.ObjId = _screenObject.Id;
     }
 }
예제 #2
0
        /// <summary>
        ///     Updates the page configuration.
        /// </summary>
        public void Update(String url, ArrayList controls)
        {
            foreach (Dictionary <String, Object> control in controls)
            {
                // Get the screen object for the control
                LocalScreenObjectModel screenObject = this.Provider.UserInterface.ScreenObject.FetchAll().FirstOrDefault(obj => String.Equals(obj.Url, url, StringComparison.OrdinalIgnoreCase) && String.Equals(obj.Control, control["ControlId"].ConvertTo <String>(), StringComparison.OrdinalIgnoreCase));

                if (control.ContainsKey("DeleteMe") && control["DeleteMe"].ToString() == "1")
                {
                    if (screenObject != null)
                    {
                        screenObject.Delete();
                    }
                }
                else
                {
                    if (screenObject == null)
                    {
                        screenObject = this.Provider.UserInterface.ScreenObject.Create();
                    }

                    // Apply the configuration
                    Dictionary <String, Dictionary <String, Object> > configuration = (control["Configuration"] as Dictionary <String, Object>).ToDictionary(pair => pair.Key, pair => pair.Value as Dictionary <String, Object>);
                    if (configuration.ContainsKey("Icon"))
                    {
                        screenObject.Icon = configuration["Icon"]["ConfiguredValue"].ConvertTo <String>().TrimOrNullify();
                    }
                    if (configuration.ContainsKey("Title"))
                    {
                        screenObject.Title = configuration["Title"]["ConfiguredValue"].ConvertTo <String>().TrimOrNullify();
                    }
                    if (configuration.ContainsKey("DefaultValue"))
                    {
                        screenObject.Default = configuration["DefaultValue"]["ConfiguredValue"].ConvertTo <String>().TrimOrNullify();
                    }
                    if (configuration.ContainsKey("Requirement"))
                    {
                        screenObject.Requirement = configuration["Requirement"]["ConfiguredValue"].ConvertTo <ScreenObjectRequirement>();
                    }
                    if (configuration.ContainsKey("OnText"))
                    {
                        screenObject.OnText = configuration["OnText"]["ConfiguredValue"].ConvertTo <String>().TrimOrNullify();
                    }
                    if (configuration.ContainsKey("OnColour"))
                    {
                        screenObject.OnColour = configuration["OnColour"]["ConfiguredValue"].ConvertTo <String>().TrimOrNullify();
                    }
                    if (configuration.ContainsKey("OffText"))
                    {
                        screenObject.OffText = configuration["OffText"]["ConfiguredValue"].ConvertTo <String>().TrimOrNullify();
                    }
                    if (configuration.ContainsKey("OffColour"))
                    {
                        screenObject.OffColour = configuration["OffColour"]["ConfiguredValue"].ConvertTo <String>().TrimOrNullify();
                    }
                    if (configuration.ContainsKey("ValidatorCritical"))
                    {
                        screenObject.ValidatorCritical = configuration["ValidatorCritical"]["ConfiguredValue"].ConvertTo <Boolean>();
                    }
                    if (configuration.ContainsKey("ValidatorMessage"))
                    {
                        screenObject.ValidatorMessage = configuration["ValidatorMessage"]["ConfiguredValue"].ConvertTo <String>().TrimOrNullify();
                    }
                    if (configuration.ContainsKey("ValidatorExpression"))
                    {
                        screenObject.ValidatorExpression = configuration["ValidatorExpression"]["ConfiguredValue"].ConvertTo <String>().TrimOrNullify();
                    }
                    if (configuration.ContainsKey("MaximumLength"))
                    {
                        screenObject.MaximumLength = configuration["MaximumLength"]["ConfiguredValue"].ConvertTo <Int32>();
                    }
                    if (configuration.ContainsKey("IsHidden") && configuration["IsHidden"]["ConfiguredValue"].ConvertTo <Boolean>())
                    {
                        screenObject.Visibility = ScreenObjectVisibility.Hidden;
                    }
                    else if (configuration.ContainsKey("IsReadOnly") && configuration["IsReadOnly"]["ConfiguredValue"].ConvertTo <Boolean>())
                    {
                        screenObject.Visibility = ScreenObjectVisibility.ReadOnly;
                    }
                    else
                    {
                        screenObject.Visibility = ScreenObjectVisibility.Visible;
                    }

                    // Apply the n-1 configuration items
                    if (configuration.ContainsKey("Columns"))
                    {
                        this.UpdateColumns(screenObject, control, "Columns");
                    }
                    if (configuration.ContainsKey("Items"))
                    {
                        this.UpdateItems(screenObject, control, "Items");
                    }
                    if (configuration.ContainsKey("Security"))
                    {
                        this.UpdateSecurity(screenObject, control, "Security");
                    }

                    // When creating a new screen object record, ensure that the page url and control ID are set
                    if (!screenObject.IsPersisted && (screenObject.IsModified || screenObject.Entries.Any(ent => ent.IsModified) || screenObject.DisplayRules.Any(rule => rule.IsModified) || screenObject.Columns.Any(rule => rule.IsModified)))
                    {
                        screenObject.Control = control["ControlId"].ConvertTo <String>();
                        screenObject.Url     = url;
                    }
                    screenObject.Save();
                }
            }
        }