示例#1
0
    /// <summary>
    // Processes the form - saves the data.
    /// </summary>
    private void Process()
    {
        // Check manage permissions
        if (!CheckPermissions("CMS.ABTest", PERMISSION_MANAGE))
        {
            return;
        }

        // Validate the form
        if (Validate())
        {
            // Ensure the info object
            if (VariantObj == null)
            {
                VariantObj = new ABVariantInfo();
                VariantObj.ABVariantTestID = TestID;
                VariantObj.ABVariantSiteID = CMSContext.CurrentSiteID;
            }

            // Initialize object
            VariantObj.ABVariantDisplayName = txtABVariantDisplayName.Text.Trim();
            VariantObj.ABVariantName        = txtABVariantName.Text.Trim();
            VariantObj.ABVariantPath        = ucPath.Value.ToString().Trim();

            // Save object data to database
            ABVariantInfoProvider.SetABVariantInfo(VariantObj);

            ItemID = VariantObj.ABVariantID;
            RaiseOnSaved();

            // Set the info message
            ShowChangesSaved();
        }
    }
示例#2
0
    /// <summary>
    /// Creates new AB variant if AB test filled in.
    /// </summary>
    /// <param name="newDocument">Newly created document</param>
    /// <returns>True if new variant is successfully created or if AB test is not defined.</returns>
    private bool CreateABVariant(TreeNode newDocument)
    {
        // If ABTest selected - create new variant
        int abTestID = ValidationHelper.GetInteger(ucABTestSelector.Value, 0);

        if (abTestID <= 0)
        {
            return(true);
        }

        // If no test found, handle it as no test was specified
        ABTestInfo abTest = ABTestInfoProvider.GetABTestInfo(abTestID);

        if (abTest == null)
        {
            return(true);
        }

        string        defaultCodeName = TextHelper.LimitLength(ValidationHelper.GetCodeName(newDocument.NodeAlias), 45, String.Empty);
        string        codeName        = defaultCodeName;
        ABVariantInfo info            = ABVariantInfoProvider.GetABVariantInfo(codeName, abTest.ABTestName, SiteContext.CurrentSiteName);

        // Find non existing variant code name
        int index = 0;

        while (info != null)
        {
            index++;
            codeName = defaultCodeName + "-" + index;
            info     = ABVariantInfoProvider.GetABVariantInfo(codeName, abTest.ABTestName, SiteContext.CurrentSiteName);
        }

        // Save AB Variant
        ABVariantInfo variantInfo = new ABVariantInfo();

        variantInfo.ABVariantTestID      = abTestID;
        variantInfo.ABVariantPath        = newDocument.NodeAliasPath;
        variantInfo.ABVariantName        = codeName;
        variantInfo.ABVariantDisplayName = newDocument.NodeAlias;
        variantInfo.ABVariantSiteID      = SiteContext.CurrentSiteID;

        try
        {
            ABVariantInfoProvider.SetABVariantInfo(variantInfo);
        }
        catch (InfoObjectException ex)
        {
            newDocument.Delete(true, true);
            ShowError(ex.Message);
            return(false);
        }
        return(true);
    }
示例#3
0
    /// <summary>
    /// Creates a new AB variant that should be created by default to given AB test
    /// </summary>
    private void CreateDefaultVariant(ABTestInfo info)
    {
        // Create instance of AB variant
        ABVariantInfo variant = new ABVariantInfo();

        // Set properties
        variant.ABVariantPath        = info.ABTestOriginalPage;
        variant.ABVariantTestID      = info.ABTestID;
        variant.ABVariantDisplayName = GetString("abtesting.originalvariantdisplayname");
        variant.ABVariantName        = "Original";
        variant.ABVariantSiteID      = info.ABTestSiteID;

        // Save to the storage
        ABVariantInfoProvider.SetABVariantInfo(variant);
    }
示例#4
0
    /// <summary>
    /// Validates the form. If validation succeeds returns true, otherwise returns false.
    /// </summary>
    private bool Validate()
    {
        // Validate required fields
        string errorMessage = new Validator()
                              .NotEmpty(txtABVariantDisplayName.Text.Trim(), rfvABVariantDisplayName.ErrorMessage)
                              .NotEmpty(txtABVariantName.Text.Trim(), rfvABVariantName.ErrorMessage)
                              .IsCodeName(txtABVariantName.Text.Trim(), GetString("general.invalidcodename")).Result;

        string abTestName = string.Empty;
        string siteName   = CMSContext.CurrentSiteName;

        // Get AB test info object
        ABTestInfo abti = ABTestInfoProvider.GetABTestInfo(TestID);

        if (abti != null)
        {
            abTestName = abti.ABTestName;
        }

        // Test unique codename
        ABVariantInfo info = ABVariantInfoProvider.GetABVariantInfo(txtABVariantName.Text.Trim(), abTestName, siteName);

        if ((info != null) && ((VariantObj == null) || (info.ABVariantID != VariantObj.ABVariantID)))
        {
            errorMessage = GetString("general.codenameexists");
        }

        if (String.IsNullOrEmpty(ucPath.Value.ToString()))
        {
            errorMessage = GetString("abtesting.entertestpage");
        }

        // Set the error message
        if (!String.IsNullOrEmpty(errorMessage))
        {
            ShowError(errorMessage);
            return(false);
        }

        return(true);
    }
示例#5
0
    /// <summary>
    /// Creates document.
    /// </summary>
    /// <param name="createAnother">If false user will be redirected to created document</param>
    public int Save(bool createAnother)
    {
        // Validate input data
        string message = new Validator().NotEmpty(txtDocumentName.Text.Trim(), GetString("om.enterdocumentname")).Result;

        if (message == String.Empty)
        {
            if (node != null)
            {
                // Select parent node
                TreeNode parent = tree.SelectSingleNode(CMSContext.CurrentSiteName, ucPath.Value.ToString(), TreeProvider.ALL_CULTURES, false, null, false);
                if (parent != null)
                {
                    // Check security
                    if (!CMSContext.CurrentUser.IsAuthorizedToCreateNewDocument(parent.NodeID, node.NodeClassName))
                    {
                        RedirectToAccessDenied(GetString("cmsdesk.notauthorizedtocreatedocument"));
                        return(0);
                    }
                    TreeNode newNode = ProcessAction(node, parent, "copynode", false, true, true);

                    if (newNode != null)
                    {
                        newNode.SetValue("DocumentMenuItemHideInNavigation", !chkShowInNavigation.Checked);
                        newNode.SetValue("DocumentShowInSiteMap", chkShowInSiteMap.Checked);
                        newNode.SetValue("DocumentSearchExcluded", chkExcludeFromSearch.Checked);
                        // Limit length to 100 characters
                        string nodeAlias = TextHelper.LimitLength(txtDocumentName.Text.Trim(), 100, String.Empty);
                        newNode.NodeAlias    = nodeAlias;
                        newNode.DocumentName = nodeAlias;

                        // Update menu item name
                        newNode.SetDocumentNameSource(nodeAlias);

                        newNode.Update();

                        // If ABTest selected - create new variant
                        int abTestID = ValidationHelper.GetInteger(ucABTestSelector.Value, 0);
                        if (abTestID != 0)
                        {
                            ABTestInfo abTest = ABTestInfoProvider.GetABTestInfo(abTestID);
                            if (abTest != null)
                            {
                                string        defaultCodeName = TextHelper.LimitLength(ValidationHelper.GetCodeName(newNode.GetDocumentName()), 45, String.Empty);
                                string        codeName        = defaultCodeName;
                                ABVariantInfo info            = ABVariantInfoProvider.GetABVariantInfo(codeName, abTest.ABTestName, CMSContext.CurrentSiteName);

                                // Find non existing variant code name
                                int index = 0;
                                while (info != null)
                                {
                                    index++;
                                    codeName = defaultCodeName + "-" + index;
                                    info     = ABVariantInfoProvider.GetABVariantInfo(codeName, abTest.ABTestName, CMSContext.CurrentSiteName);
                                }

                                // Save AB Variant
                                ABVariantInfo variantInfo = new ABVariantInfo();
                                variantInfo.ABVariantTestID      = abTestID;
                                variantInfo.ABVariantPath        = newNode.NodeAliasPath;
                                variantInfo.ABVariantName        = codeName;
                                variantInfo.ABVariantDisplayName = newNode.GetDocumentName();
                                variantInfo.ABVariantSiteID      = CMSContext.CurrentSiteID;

                                ABVariantInfoProvider.SetABVariantInfo(variantInfo);
                            }
                        }

                        // Get the page mode
                        if (CMSContext.ViewMode != ViewModeEnum.EditLive)
                        {
                            CMSContext.ViewMode = ViewModeEnum.EditForm;
                        }

                        txtDocumentName.Text = String.Empty;
                        return(newNode.NodeID);
                    }
                }
                else
                {
                    message = GetString("om.pathdoesnotexists");
                }
            }
        }

        if (message != String.Empty)
        {
            lblError.Visible = true;
            lblError.Text    = message;
        }
        return(0);
    }
    /// <summary>
    /// Creates document.
    /// </summary>
    /// <param name="createAnother">If false user will be redirected to created document</param>
    public int Save(bool createAnother)
    {
        // Validate input data
        string message = new Validator().NotEmpty(txtDocumentName.Text.Trim(), GetString("om.enterdocumentname")).Result;

        if (message == String.Empty)
        {
            if (node != null)
            {
                string path = ucPath.Value.ToString();
                // Select parent node
                TreeNode parent = tree.SelectSingleNode(CMSContext.CurrentSiteName, ucPath.Value.ToString(), "##ALL##", false);
                if (parent != null)
                {
                    // Check security
                    if (!CMSContext.CurrentUser.IsAuthorizedToCreateNewDocument(parent.NodeID, node.NodeClassName))
                    {
                        RedirectToAccessDenied(GetString("cmsdesk.notauthorizedtocreatedocument"));
                        return 0;
                    }
                    TreeNode newNode = null;
                    newNode = ProcessAction(node, parent, "copynode", false, true, true);

                    if (newNode != null)
                    {

                        newNode.SetValue("DocumentMenuItemHideInNavigation", !chkShowInNavigation.Checked);
                        newNode.SetValue("DocumentShowInSiteMap", chkShowInSiteMap.Checked);
                        newNode.SetValue("DocumentSearchExcluded", chkExcludeFromSearch.Checked);
                        // Limit length to 100 characters
                        string nodeAlias = TextHelper.LimitLength(txtDocumentName.Text.Trim(), 100, String.Empty);
                        newNode.NodeAlias = nodeAlias;
                        newNode.DocumentName = nodeAlias;

                        // Update menu item name
                        DataClassInfo classInfo = DataClassInfoProvider.GetDataClass(node.NodeClassName);
                        if ((classInfo != null) && (!string.IsNullOrEmpty(classInfo.ClassNodeNameSource)))
                        {
                            newNode.SetValue(classInfo.ClassNodeNameSource, nodeAlias);
                        }

                        newNode.Update();

                        // If ABTest selected - create new variant
                        int abTestID = ValidationHelper.GetInteger(ucABTestSelector.Value, 0);
                        if (abTestID != 0)
                        {
                            ABTestInfo abTest = ABTestInfoProvider.GetABTestInfo(abTestID);
                            if (abTest != null)
                            {
                                string defaultCodeName = TextHelper.LimitLength(ValidationHelper.GetCodeName(newNode.DocumentName), 95, String.Empty);
                                string codeName = defaultCodeName;
                                ABVariantInfo info = ABVariantInfoProvider.GetABVariantInfo(codeName, abTest.ABTestName, CMSContext.CurrentSiteName);

                                // Find non existing variant code name
                                int index = 0;
                                while (info != null)
                                {
                                    index++;
                                    codeName = defaultCodeName + "-" + index;
                                    info = ABVariantInfoProvider.GetABVariantInfo(codeName, abTest.ABTestName, CMSContext.CurrentSiteName);
                                }

                                // Save AB Variant
                                ABVariantInfo variantInfo = new ABVariantInfo();
                                variantInfo.ABVariantTestID = abTestID;
                                variantInfo.ABVariantPath = newNode.NodeAliasPath;
                                variantInfo.ABVariantName = codeName;
                                variantInfo.ABVariantDisplayName = newNode.DocumentName;
                                variantInfo.ABVariantSiteID = CMSContext.CurrentSiteID;

                                ABVariantInfoProvider.SetABVariantInfo(variantInfo);
                            }
                        }

                        // Get the page mode
                        CMSContext.ViewMode = ViewModeEnum.EditForm;

                        txtDocumentName.Text = String.Empty;
                        return newNode.NodeID;
                    }
                }
                else
                {
                    message = GetString("om.pathdoesnotexists");
                }
            }
        }

        if (message != String.Empty)
        {
            lblError.Visible = true; ;
            lblError.Text = message;
        }
        return 0;
    }
示例#7
0
 /// <summary>
 /// Displays info label about the winner of the test.
 /// </summary>
 /// <param name="winner">AB test winner</param>
 private void DisplayWinnerInformation(ABVariantInfo winner)
 {
     ShowInformation(String.Format(GetString("abtesting.winningvariantselected"), HTMLHelper.HTMLEncode(ResHelper.LocalizeString(winner.ABVariantDisplayName))));
 }
 /// <summary>
 /// Displays info label about the winner of the test.
 /// </summary>
 /// <param name="winner">AB test winner</param>
 private void DisplayWinnerInformation(ABVariantInfo winner)
 {
     ShowInformation(String.Format(GetString("abtesting.winningvariantselected"), HTMLHelper.HTMLEncode(ResHelper.LocalizeString(winner.ABVariantDisplayName))));
 }
    /// <summary>
    // Processes the form - saves the data.
    /// </summary>
    private void Process()
    {
        // Check manage permissions
        if (!CheckPermissions("CMS.ABTest", PERMISSION_MANAGE))
        {
            return;
        }

        // Validate the form
        if (Validate())
        {
            // Ensure the info object
            if (VariantObj == null)
            {
                VariantObj = new ABVariantInfo();
                VariantObj.ABVariantTestID = TestID;
                VariantObj.ABVariantSiteID = CMSContext.CurrentSiteID;
            }

            // Initialize object
            VariantObj.ABVariantDisplayName = txtABVariantDisplayName.Text.Trim();
            VariantObj.ABVariantName = txtABVariantName.Text.Trim();
            VariantObj.ABVariantPath = ucPath.Value.ToString().Trim();

            // Save object data to database
            ABVariantInfoProvider.SetABVariantInfo(VariantObj);

            ItemID = VariantObj.ABVariantID;
            RaiseOnSaved();

            // Set the info message
            ShowChangesSaved();
        }
    }
示例#10
0
 /// <summary>
 ///     Constructs proper statistics code name for the A/B hit.
 /// </summary>
 private static string GetAbHitCodename(string statisticsType, ABTestInfo abTest, ABVariantInfo variant) =>
 statisticsType + ";" + abTest.ABTestName + ";" + variant.ABVariantName;
    /// <summary>
    /// Creates a new AB variant that should be created by default to given AB test
    /// </summary>
    private void CreateDefaultVariant(ABTestInfo info)
    {
        // Create instance of AB variant
        ABVariantInfo variant = new ABVariantInfo();

        // Set properties
        variant.ABVariantPath = info.ABTestOriginalPage;
        variant.ABVariantTestID = info.ABTestID;
        variant.ABVariantDisplayName = GetString("abtesting.originalvariantdisplayname");
        variant.ABVariantName = "Original";
        variant.ABVariantSiteID = info.ABTestSiteID;

        // Save to the storage
        ABVariantInfoProvider.SetABVariantInfo(variant);
    }
示例#12
0
    /// <summary>
    // Processes the form - saves the data.
    /// </summary>
    private void Process()
    {
        // Check manage permissions
        if (!CheckPermissions("CMS.ABTest", CMSAdminControl.PERMISSION_MANAGE))
        {
            return;
        }

        // Validate the form
        if (Validate())
        {
            bool isNew = false;

            // Ensure the info object
            if (this.AbTestObj == null)
            {
                this.AbTestObj = new ABTestInfo();
                if (AliasPath != String.Empty)
                {
                    this.AbTestObj.ABTestOriginalPage = AliasPath;
                }

                isNew = true;
            }

            // Initialize object
            String newName = this.txtABTestName.Text.Trim();
            this.AbTestObj.ABTestDisplayName = this.txtABTestDisplayName.Text.Trim();
            this.AbTestObj.ABTestDescription = this.txtABTestDescription.Text.Trim();
            this.AbTestObj.ABTestMaxConversions = ValidationHelper.GetInteger(this.txtABTestMaxConversions.Text.Trim(), 0);
            this.AbTestObj.ABTestOpenFrom = this.dtpABTestOpenFrom.SelectedDateTime;
            this.AbTestObj.ABTestOpenTo = this.dtpABTestOpenTo.SelectedDateTime;
            this.AbTestObj.ABTestCulture = this.ucCultureSelector.Value.ToString();
            this.AbTestObj.ABTestEnabled = this.chkABTestEnabled.Checked;
            this.AbTestObj.ABTestSiteID = CMSContext.CurrentSiteID;

            // Name has changed. Change analytics statistics data for existing object
            if ((this.AbTestObj.ABTestID != 0) && (this.AbTestObj.ABTestName != newName))
            {
                ABTestInfoProvider.RenameABTestStatistics(this.AbTestObj.ABTestName, newName, CMSContext.CurrentSiteID);
            }
            this.AbTestObj.ABTestName = newName;

            // Store conversion type
            TargetConversionType conversionType = TargetConversionType.Total;
            if (radAnyVariant.Checked)
            {
                conversionType = TargetConversionType.AnyVariant;
            }
            this.AbTestObj.ABTestTargetConversionType = conversionType;

            if (ShowAliasPath)
            {
                this.AbTestObj.ABTestOriginalPage = this.ucPath.Value.ToString().Trim();
            }

            // Save object data to database
            ABTestInfoProvider.SetABTestInfo(this.AbTestObj);

            this.ItemID = this.AbTestObj.ABTestID;

            // For new A/B test create default variant
            if (isNew)
            {
                // Create instance of ab variant
                ABVariantInfo variant = new ABVariantInfo();

                // Set properties
                variant.ABVariantPath = this.AbTestObj.ABTestOriginalPage;
                variant.ABVariantTestID = this.AbTestObj.ABTestID;
                variant.ABVariantDisplayName = this.AbTestObj.ABTestDisplayName + " " + GetString("om.variant");
                variant.ABVariantName = this.AbTestObj.ABTestName;
                variant.ABVariantSiteID = this.AbTestObj.ABTestSiteID;

                // Save to the storage
                ABVariantInfoProvider.SetABVariantInfo(variant);
            }

            this.RaiseOnSaved();

            // Set the info message
            this.lblInfo.Text = GetString("general.changessaved");

        }
    }
示例#13
0
    /// <summary>
    // Processes the form - saves the data.
    /// </summary>
    private void Process()
    {
        // Check manage permissions
        if (!CheckPermissions("CMS.ABTest", CMSAdminControl.PERMISSION_MANAGE))
        {
            return;
        }

        // Validate the form
        if (Validate())
        {
            // Ensure the info object
            if (this.VariantObj == null)
            {
                this.VariantObj = new ABVariantInfo();
                this.VariantObj.ABVariantTestID = TestID;
                this.VariantObj.ABVariantSiteID = CMSContext.CurrentSiteID;
            }

            // Initialize object
            this.VariantObj.ABVariantDisplayName = this.txtABVariantDisplayName.Text.Trim();
            this.VariantObj.ABVariantName = this.txtABVariantName.Text.Trim();
            this.VariantObj.ABVariantPath = this.ucPath.Value.ToString().Trim();

            // Save object data to database
            ABVariantInfoProvider.SetABVariantInfo(this.VariantObj);

            this.ItemID = this.VariantObj.ABVariantID;
            this.RaiseOnSaved();

            // Set the info message
            this.lblInfo.Text = GetString("general.changessaved");
        }
    }
    /// <summary>
    /// Creates new AB variant if AB test filled in.
    /// </summary>
    /// <param name="newDocument">Newly created document</param>
    /// <returns>True if new variant is successfully created or if AB test is not defined.</returns>
    private bool CreateABVariant(TreeNode newDocument)
    {
        // If ABTest selected - create new variant
        int abTestID = ValidationHelper.GetInteger(ucABTestSelector.Value, 0);
        if (abTestID <= 0)
        {
            return true;
        }

        // If no test found, handle it as no test was specified
        ABTestInfo abTest = ABTestInfoProvider.GetABTestInfo(abTestID);
        if (abTest == null)
        {
            return true;
        }

        string defaultCodeName = TextHelper.LimitLength(ValidationHelper.GetCodeName(newDocument.NodeAlias), 45, String.Empty);
        string codeName = defaultCodeName;
        ABVariantInfo info = ABVariantInfoProvider.GetABVariantInfo(codeName, abTest.ABTestName, SiteContext.CurrentSiteName);

        // Find non existing variant code name
        int index = 0;
        while (info != null)
        {
            index++;
            codeName = defaultCodeName + "-" + index;
            info = ABVariantInfoProvider.GetABVariantInfo(codeName, abTest.ABTestName, SiteContext.CurrentSiteName);
        }

        // Save AB Variant
        ABVariantInfo variantInfo = new ABVariantInfo();
        variantInfo.ABVariantTestID = abTestID;
        variantInfo.ABVariantPath = newDocument.NodeAliasPath;
        variantInfo.ABVariantName = codeName;
        variantInfo.ABVariantDisplayName = newDocument.NodeAlias;
        variantInfo.ABVariantSiteID = SiteContext.CurrentSiteID;

        try
        {
            ABVariantInfoProvider.SetABVariantInfo(variantInfo);
        }
        catch (InfoObjectException ex)
        {
            newDocument.Delete(true, true, true);
            ShowError(ex.Message);
            return false;
        }
        return true;
    }
示例#15
0
    /// <summary>
    // Processes the form - saves the data.
    /// </summary>
    private void Process()
    {
        // Check manage permissions
        if (!CheckPermissions("CMS.ABTest", CMSAdminControl.PERMISSION_MANAGE))
        {
            return;
        }

        // Validate the form
        if (Validate())
        {
            bool isNew = false;

            // Ensure the info object
            if (this.AbTestObj == null)
            {
                this.AbTestObj = new ABTestInfo();
                if (AliasPath != String.Empty)
                {
                    this.AbTestObj.ABTestOriginalPage = AliasPath;
                }

                isNew = true;
            }

            // Initialize object
            String newName = this.txtABTestName.Text.Trim();
            this.AbTestObj.ABTestDisplayName    = this.txtABTestDisplayName.Text.Trim();
            this.AbTestObj.ABTestDescription    = this.txtABTestDescription.Text.Trim();
            this.AbTestObj.ABTestMaxConversions = ValidationHelper.GetInteger(this.txtABTestMaxConversions.Text.Trim(), 0);
            this.AbTestObj.ABTestOpenFrom       = this.dtpABTestOpenFrom.SelectedDateTime;
            this.AbTestObj.ABTestOpenTo         = this.dtpABTestOpenTo.SelectedDateTime;
            this.AbTestObj.ABTestCulture        = this.ucCultureSelector.Value.ToString();
            this.AbTestObj.ABTestEnabled        = this.chkABTestEnabled.Checked;
            this.AbTestObj.ABTestSiteID         = CMSContext.CurrentSiteID;

            // Name has changed. Change analytics statistics data for existing object
            if ((this.AbTestObj.ABTestID != 0) && (this.AbTestObj.ABTestName != newName))
            {
                ABTestInfoProvider.RenameABTestStatistics(this.AbTestObj.ABTestName, newName, CMSContext.CurrentSiteID);
            }
            this.AbTestObj.ABTestName = newName;

            // Store conversion type
            TargetConversionType conversionType = TargetConversionType.Total;
            if (radAnyVariant.Checked)
            {
                conversionType = TargetConversionType.AnyVariant;
            }
            this.AbTestObj.ABTestTargetConversionType = conversionType;

            if (ShowAliasPath)
            {
                this.AbTestObj.ABTestOriginalPage = this.ucPath.Value.ToString().Trim();
            }

            // Save object data to database
            ABTestInfoProvider.SetABTestInfo(this.AbTestObj);

            this.ItemID = this.AbTestObj.ABTestID;

            // For new A/B test create default variant
            if (isNew)
            {
                // Create instance of ab variant
                ABVariantInfo variant = new ABVariantInfo();

                // Set properties
                variant.ABVariantPath        = this.AbTestObj.ABTestOriginalPage;
                variant.ABVariantTestID      = this.AbTestObj.ABTestID;
                variant.ABVariantDisplayName = this.AbTestObj.ABTestDisplayName + " " + GetString("om.variant");
                variant.ABVariantName        = this.AbTestObj.ABTestName;
                variant.ABVariantSiteID      = this.AbTestObj.ABTestSiteID;

                // Save to the storage
                ABVariantInfoProvider.SetABVariantInfo(variant);
            }

            this.RaiseOnSaved();

            // Set the info message
            this.lblInfo.Text = GetString("general.changessaved");
        }
    }