' This file implements the code-behind class for EditPersonalId1.aspx. ' App_Code\EditPersonalId1.Controls.vb contains the Table, Row and Record control classes ' for the page. Best practices calls for overriding methods in the Row or Record control classes. #Region "Imports statements" Option Strict On Imports System Imports System.Data Imports System.Collections Imports System.Collections.Generic Imports System.ComponentModel Imports System.Web.UI Imports System.Web.UI.WebControls Imports BaseClasses Imports BaseClasses.Utils Imports BaseClasses.Utils.StringUtils Imports BaseClasses.Data Imports BaseClasses.Data.SqlProvider Imports BaseClasses.Data.OrderByItem.OrderDir Imports BaseClasses.Data.BaseFilter Imports BaseClasses.Data.BaseFilter.ComparisonOperator Imports BaseClasses.Web.UI.WebControls Imports Persons.Business Imports Persons.Data #End Region Namespace Persons.UI Public Partial Class EditPersonalId1 Inherits BaseApplicationPage ' Code-behind class for the EditPersonalId1 page. ' Place your customizations in Section 1. Do not modify Section 2. #Region "Section 1: Place your customizations here." Public Sub LoadData() ' LoadData reads database data and assigns it to UI controls. ' Customize by adding code before or after the call to LoadData_Base() ' or replace the call to LoadData_Base(). LoadData_Base() End Sub Public Overrides Sub SaveData() Me.SaveData_Base() End Sub #Region "Ajax Functions" ' _ ' Public Shared Function GetRecordFieldValue(ByVal tableName As String, _ ' ByVal recordID As String, _ ' ByVal columnName As String, _ ' ByVal title As String, _ ' ByVal persist As Boolean, _ ' ByVal popupWindowHeight As Integer, _ ' ByVal popupWindowWidth As Integer, _ ' ByVal popupWindowScrollBar As Boolean _ ' ) As Object() ' ' GetRecordFieldValue gets the pop up window content from the column specified by ' ' columnName in the record specified by the recordID in data base table specified by tableName. ' ' Customize by adding code before or after the call to GetRecordFieldValue_Base() ' ' or replace the call to GetRecordFieldValue_Base(). ' Return GetRecordFieldValue_Base(tableName, recordID, columnName, title, persist, popupWindowHeight, popupWindowWidth, popupWindowScrollBar) ' End Function _ Public Shared Function GetImage(ByVal tableName As String, _ ByVal recordID As String, _ ByVal columnName As String, _ ByVal title As String, _ ByVal persist As Boolean, _ ByVal popupWindowHeight As Integer, _ ByVal popupWindowWidth As Integer, _ ByVal popupWindowScrollBar As Boolean _ ) As Object() ' GetImage gets the Image url for the image in the column "columnName" and ' in the record specified by recordID in data base table specified by tableName. ' Customize by adding code before or after the call to GetImage_Base() ' or replace the call to GetImage_Base(). Return GetImage_Base(tableName, recordID, columnName, title, persist, popupWindowHeight, popupWindowWidth, popupWindowScrollBar) End Function ' Protected Overloads Overrides Sub BasePage_PreRender(ByVal sender As Object, ByVal e As EventArgs) ' MyBase.BasePage_PreRender(sender, e) ' Base_RegisterPostback() ' End Sub #End Region ' Page Event Handlers - buttons, sort, links Public Sub CancelButton_Click(ByVal sender As Object, ByVal args As EventArgs) ' Click handler for CancelButton. ' Customize by adding code before the call or replace the call to the Base function with your own code. CancelButton_Click_Base(sender, args) ' NOTE: If the Base function redirects to another page, any code here will not be executed. End Sub Public Sub SaveButton_Click(ByVal sender As Object, ByVal args As EventArgs) ' Click handler for SaveButton. ' Customize by adding code before the call or replace the call to the Base function with your own code. SaveButton_Click_Base(sender, args) ' NOTE: If the Base function redirects to another page, any code here will not be executed. End Sub 'Public Sub Button_Click(ByVal sender As Object, ByVal args As EventArgs) ' ' Try ' ' 'This method is initially empty to implement custom click handler. ' Dim cls As New CrPdf ' Dim param(0) As String ' param(0) = "PID," & Me.PersonalId.Text ' cls.GetCr(Me, "../Reports/report1.rpt", param) ' ' ' Catch ex As Exception ' Me.ErrorOnPage = True ' ' ' Report the error message to the end user ' Utils.MiscUtils.RegisterJScriptAlert(Me, "BUTTON_CLICK_MESSAGE", ex.Message) ' Finally ' ' End Try ' ' ' NOTE: If the Base function redirects to another page, any code here will not be executed. ' End Sub #Region "CrystalReport" ''' '''Override the CrystalReportButton_Click and call DisplayReportAsPDF_CrystalReportButton function ''' Public Sub CrystalReportButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Dim crReportDocument As CrystalDecisions.CrystalReports.Engine.ReportDocument = New CrystalDecisions.CrystalReports.Engine.ReportDocument Dim fileName As String = "..\Reports\PersonalDetail1.rpt" Try If fileName.Substring(1).StartsWith(":\") Then crReportDocument.Load(fileName) Else crReportDocument.Load(Me.Page.MapPath(fileName)) End If Catch ex As Exception Dim errMsg As String = ex.Message.Replace(Chr(13).ToString(), "").Replace(Chr(10).ToString(), "") errMsg += " Please make sure the dlls for Crystal Report are compatible with the Crystal Report file." BaseClasses.Utils.MiscUtils.RegisterJScriptAlert(Me, "BUTTON_CLICK_MESSAGE", errMsg) End Try Try '************If you see a "Missing Parameter Value" error message or if your Crystal Report file requires paarameters, '************please uncomment this section & specify appropriate values. Dim paramValue As CrystalDecisions.Shared.ParameterDiscreteValue = New CrystalDecisions.Shared.ParameterDiscreteValue() paramValue.Value = "3160101741051" crReportDocument.SetParameterValue("PID", paramValue) '********************************************** '************If you see a 'Logon Failed' error message or if your database requires authentication, '************please uncomment this section & specify appropriate values. ''define and locate required objects for db login Dim db As CrystalDecisions.CrystalReports.Engine.Database = crReportDocument.Database Dim tables As CrystalDecisions.CrystalReports.Engine.Tables = db.Tables Dim tableLoginInfo As CrystalDecisions.Shared.TableLogOnInfo = New CrystalDecisions.Shared.TableLogOnInfo() ''define connection information Dim dbConnInfo As CrystalDecisions.Shared.ConnectionInfo = New CrystalDecisions.Shared.ConnectionInfo() dbConnInfo.UserID = "wpc-mtc" dbConnInfo.Password = "Mtc#01" dbConnInfo.ServerName = "(local)" dbConnInfo.DatabaseName = "Persons" ''apply connection information to each table ' Dim table As CrystalDecisions.CrystalReports.Engine.Table ' For Each table In tables ' tableLoginInfo = table.LogOnInfo ' tableLoginInfo.ConnectionInfo = dbConnInfo ' table.ApplyLogOnInfo(tableLoginInfo) ' Next '********************************************** DisplayReportAsPDF_CrystalReportButton(crReportDocument) Catch ex As Exception Dim errMsg As String = ex.Message.Replace(Chr(13).ToString(), "").Replace(Chr(10).ToString(), "") errMsg += " If this is a deployment machine, make sure network service has permissions to read or write to the windows\temp folder." BaseClasses.Utils.MiscUtils.RegisterJScriptAlert(Me, "BUTTON_CLICK_MESSAGE", errMsg) End Try End Sub #End Region #Region "CrystalReport" ''' '''Override the CrystalReportButton_Click and call DisplayReportAsPDF_CrystalReportButton function ''' Private Sub DisplayReportAsPDF_CrystalReportButton(ByVal reportObject As CrystalDecisions.CrystalReports.Engine.ReportDocument) Try ' Export as a stream Dim stream As System.IO.Stream = reportObject.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat) Dim content() As Byte = New Byte(Convert.ToInt32(stream.Length)){} stream.Read(content, 0, content.Length) 'output as an attachment BaseClasses.Utils.NetUtils.WriteResponseBinaryAttachment(Me.Page.Response, "report.pdf", content, 0, True) Catch ex As Exception Dim errMsg As String = ex.Message.Replace(Chr(13).ToString(), "").Replace(Chr(10).ToString(), "") errMsg += " Please modify the button click function in your code-behind." BaseClasses.Utils.MiscUtils.RegisterJScriptAlert(Me, "BUTTON_CLICK_MESSAGE", errMsg) End Try End Sub #End Region Protected Overloads Overrides Sub BasePage_PreRender(ByVal sender As Object, ByVal e As EventArgs) MyBase.BasePage_PreRender(sender, e) Base_RegisterPostback() End Sub _ Public Shared Function GetRecordFieldValue(ByVal tableName As String, _ ByVal recordID As String, _ ByVal columnName As String, _ ByVal fieldName As String, _ ByVal title As String, _ ByVal persist As Boolean, _ ByVal popupWindowHeight As Integer, _ ByVal popupWindowWidth As Integer, _ ByVal popupWindowScrollBar As Boolean _ ) As Object() ' GetRecordFieldValue gets the pop up window content from the column specified by ' columnName in the record specified by the recordID in data base table specified by tableName. ' Customize by adding code before or after the call to GetRecordFieldValue_Base() ' or replace the call to GetRecordFieldValue_Base(). Return GetRecordFieldValue_Base(tableName, recordID, columnName, fieldName, title, persist, popupWindowHeight, popupWindowWidth, popupWindowScrollBar) End Function Public Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit 'Override call to PreInit_Base() here to change top level master page used by this page. 'For example for SharePoint applications uncomment next line to use Microsoft SharePoint default master page 'If Not Me.Master Is Nothing Then Me.Master.MasterPageFile = Microsoft.SharePoint.SPContext.Current.Web.MasterUrl 'You may change here assignment of application theme Try Me.PreInit_Base() Catch ex As Exception End Try End Sub Public Overrides Sub SetChartControl(ByVal chartCtrlName As String) Me.SetChartControl_Base(chartCtrlName) End Sub Public Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender Me.Page_PreRender_Base(sender,e) End Sub Protected Overrides Function SaveViewState() As Object Return SaveViewState_Base() End Function Protected Overrides Sub LoadViewState(ByVal savedState As Object) LoadViewState_Base(savedState) End Sub Protected Overrides Sub ClearControlsFromSession() ClearControlsFromSession_Base() End Sub Protected Overrides Sub SaveControlsToSession() SaveControlsToSession_Base() End Sub Public Sub Page_InitializeEventHandlers(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Init ' Handles MyBase.Init. ' Register the Event handler for any Events. Me.Page_InitializeEventHandlers_Base(sender,e) End Sub Private Function EvaluateFormula(ByVal formula As String, ByVal dataSourceForEvaluate as BaseClasses.Data.BaseRecord, ByVal format As String, ByVal variables As System.Collections.Generic.IDictionary(Of String, Object), ByVal includeDS as Boolean) As String Return EvaluateFormula_Base(formula, dataSourceForEvaluate, format, variables, includeDS) End Function Public Sub SetPageFocus() 'load scripts to all controls on page so that they will retain focus on PostBack Me.LoadFocusScripts(Me.Page) 'To set focus on page load to a specific control pass this control to the SetStartupFocus method. To get a hold of a control 'use FindControlRecursively method. For example: 'Dim controlToFocus As System.Web.UI.WebControls.TextBox = DirectCast(Me.FindControlRecursively("ProductsSearch"), System.Web.UI.WebControls.TextBox) 'Me.SetFocusOnLoad(controlToFocus) 'If no control is passed or control does not exist this method will set focus on the first focusable control on the page. Me.SetFocusOnLoad() End Sub #End Region #Region "Section 2: Do not modify this section." Protected Sub Page_InitializeEventHandlers_Base(ByVal sender As Object, ByVal e As System.EventArgs) ' This page does not have FileInput control inside repeater which requires "multipart/form-data" form encoding, but it might 'include ascx controls which in turn do have FileInput controls inside repeater. So check if they set Enctype property. If Not String.IsNullOrEmpty(Me.Enctype) Then Me.Page.Form.Enctype = Me.Enctype ' the following code for accordion is necessary or the Me.{ControlName} will return Nothing ' Register the Event handler for any Events. ' Setup the pagination events. AddHandler Me.CancelButton.Button.Click, AddressOf CancelButton_Click AddHandler Me.SaveButton.Button.Click, AddressOf SaveButton_Click Me.SaveButton.Button.Attributes.Add("onclick", "SubmitHRefOnce(this, """ & Me.GetResourceValue("Txt:SaveRecord", "Persons") & """);") Me.ClearControlsFromSession() End Sub Private Sub Base_RegisterPostback() Me.RegisterPostBackTrigger(MiscUtils.FindControlRecursively(Me,"SaveButton")) End Sub ' Handles MyBase.Load. Read database data and put into the UI controls. ' If you need to, you can add additional Load handlers in Section 1. Protected Overridable Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.SetPageFocus() ' Check if user has access to this page. Redirects to either sign-in page ' or 'no access' page if not. Does not do anything if role-based security ' is not turned on, but you can override to add your own security. Me.Authorize("NOT_ANONYMOUS") If (Not Me.IsPostBack) Then ' Setup the header text for the validation summary control. Me.ValidationSummary1.HeaderText = GetResourceValue("ValidationSummaryHeaderText", "Persons") End If 'set value of the hidden control depending on the postback. It will be used by SetFocus script on the client side. Dim clientSideIsPostBack As System.Web.UI.HtmlControls.HtmlInputHidden = DirectCast(Me.FindControlRecursively("_clientSideIsPostBack"), System.Web.UI.HtmlControls.HtmlInputHidden) If Not clientSideIsPostBack Is Nothing Then If Me.IsPostBack AndAlso Not Me.Request("__EVENTTARGET") = "ChildWindowPostBack" Then clientSideIsPostBack.Value = "Y" Else clientSideIsPostBack.Value = "N" End If End If ' Load data only when displaying the page for the first time or if postback from child window If (Not Me.IsPostBack OrElse Me.Request("__EVENTTARGET") = "ChildWindowPostBack") Then ' Read the data for all controls on the page. ' To change the behavior, override the DataBind method for the individual ' record or table UI controls. Me.LoadData() End If Page.Title = GetResourceValue("Title:Edit") + " Personal ID" End Sub Public Shared Function GetRecordFieldValue_Base(ByVal tableName As String, _ ByVal recordID As String, _ ByVal columnName As String, _ ByVal fieldName As String, _ ByVal title As String, _ ByVal persist As Boolean, _ ByVal popupWindowHeight As Integer, _ ByVal popupWindowWidth As Integer, _ ByVal popupWindowScrollBar As Boolean _ ) As Object() If Not IsNothing(recordID) Then recordID = System.Web.HttpUtility.UrlDecode(recordID) End If Dim content as String = BaseClasses.Utils.MiscUtils.GetFieldData(tableName, recordID, columnName) content = NetUtils.EncodeStringForHtmlDisplay(content) 'returnValue is an array of string values. 'returnValue(0) represents title of the pop up window 'returnValue(1) represents content of the pop up window ' retrunValue(2) represents whether pop up window should be made persistant ' or it should closes as soon as mouse moved out. ' returnValue(5) represents whether pop up window should contain scroll bar. ' returnValue(3), (4) represents pop up window height and width respectivly ' (0),(2),(3),(4) and (5) is initially set as pass through attribute. ' They can be modified by going to Attribute tab of the properties window of the control in aspx page. Dim returnValue(6) As Object returnValue(0) = title returnValue(1) = content returnValue(2) = persist returnValue(3) = popupWindowWidth returnValue(4) = popupWindowHeight returnValue(5) = popupWindowScrollBar Return returnValue End Function Public Shared Function GetImage_Base(ByVal tableName As String, _ ByVal recordID As String, _ ByVal columnName As String, _ ByVal title As String, _ ByVal persist As Boolean, _ ByVal popupWindowHeight As Integer, _ ByVal popupWindowWidth As Integer, _ ByVal popupWindowScrollBar As Boolean _ ) As Object() Dim content As String = "" 'returnValue is an array of string values. 'returnValue(0) represents title of the pop up window. 'returnValue(1) represents content ie, image url. ' retrunValue(2) represents whether pop up window should be made persistant ' or it should closes as soon as mouse moved out. ' returnValue(3), (4) represents pop up window height and width respectivly ' returnValue(5) represents whether pop up window should contain scroll bar. ' (0),(2),(3),(4) and (5) is initially set as pass through attribute. ' They can be modified by going to Attribute tab of the properties window of the control in aspx page. Dim returnValue(6) As Object returnValue(0) = title returnValue(1) = content returnValue(2) = persist returnValue(3) = popupWindowWidth returnValue(4) = popupWindowHeight returnValue(5) = popupWindowScrollBar Return returnValue End Function Public Sub SetChartControl_Base(ByVal chartCtrlName As String) ' Load data for each record and table UI control. End Sub Public Sub SaveData_Base() Me.PersonalIdRecordControl.SaveData() Me.ReportPropertiesTableControl.SaveData() End Sub Protected Sub SaveControlsToSession_Base() MyBase.SaveControlsToSession() End Sub Protected Sub ClearControlsFromSession_Base() MyBase.ClearControlsFromSession() End Sub Protected Sub LoadViewState_Base(ByVal savedState As Object) MyBase.LoadViewState(savedState) End Sub Protected Function SaveViewState_Base() As Object Return MyBase.SaveViewState() End Function Public Sub PreInit_Base() 'If it is SharePoint application this function performs dynamic Master Page assignment. End Sub Public Sub Page_PreRender_Base(ByVal sender As Object, ByVal e As System.EventArgs) ' Load data for each record and table UI control. ' Data bind for each chart UI control. End Sub ' Load data from database into UI controls. ' Modify LoadData in Section 1 above to customize. Or override DataBind() in ' the individual table and record controls to customize. Public Sub LoadData_Base() Try If (Not Me.IsPostBack OrElse Me.Request("__EVENTTARGET") = "ChildWindowPostBack") Then ' Must start a transaction before performing database operations DbUtils.StartTransaction() End If Me.DataBind() ' Load and bind data for each record and table UI control. Me.PersonalIdRecordControl.LoadData() Me.PersonalIdRecordControl.DataBind() Me.ReportPropertiesTableControl.LoadData() Me.ReportPropertiesTableControl.DataBind() ' Load data for chart. ' initialize aspx controls 'Set the corresponding menu item to be highlighted for this page Dim pageMaster As System.Web.UI.MasterPage = Me.Master If Not pageMaster is Nothing Then Dim menuComponent As IMenuComponent = CType(Me.Master.FindControl("_Menu"), IMenuComponent) If Not menuComponent is Nothing Then menuComponent.HiliteSettings = "ประว_ต_ท__วไปMenuItem" End If End If Catch ex As Exception ' An error has occured so display an error message. Utils.RegisterJScriptAlert(Me, "Page_Load_Error_Message", ex.Message) Finally If (Not Me.IsPostBack OrElse Me.Request("__EVENTTARGET") = "ChildWindowPostBack") Then ' End database transaction DbUtils.EndTransaction() End If End Try End Sub Public EvaluateFormulaDelegate As BaseClasses.Data.DataSource.EvaluateFormulaDelegate = New BaseClasses.Data.DataSource.EvaluateFormulaDelegate(AddressOf Me.EvaluateFormula) Public Overridable Function EvaluateFormula_Base(ByVal formula As String, ByVal dataSourceForEvaluate As BaseClasses.Data.BaseRecord, ByVal format As String, ByVal variables As System.Collections.Generic.IDictionary(Of String, Object), ByVal includeDS As Boolean) As String Dim e As FormulaEvaluator = New FormulaEvaluator() ' add variables for formula evaluation If variables IsNot Nothing Then Dim enumerator As System.Collections.Generic.IEnumerator(Of System.Collections.Generic.KeyValuePair(Of String, Object)) = variables.GetEnumerator() While enumerator.MoveNext() e.Variables.Add(enumerator.Current.Key, enumerator.Current.Value) End While End If If includeDS End If e.CallingControl = Me e.DataSource = dataSourceForEvaluate Dim resultObj As Object = e.Evaluate(formula) If resultObj Is Nothing Then Return "" End If If Not String.IsNullOrEmpty(format) AndAlso (String.IsNullOrEmpty(formula) OrElse formula.IndexOf("Format(") < 0) Then Return FormulaUtils.Format(resultObj, format) Else Return resultObj.ToString() End If End Function Public Function EvaluateFormula(ByVal formula As String, ByVal dataSourceForEvaluate As BaseClasses.Data.BaseRecord, ByVal format As String, ByVal variables As System.Collections.Generic.IDictionary(Of String, Object)) As String Return EvaluateFormula(formula, dataSourceForEvaluate, format, variables, True) End Function Private Function EvaluateFormula(ByVal formula As String, ByVal dataSourceForEvaluate As BaseClasses.Data.BaseRecord) As String Return EvaluateFormula(formula, dataSourceForEvaluate, Nothing, Nothing, True) End Function Public Function EvaluateFormula(ByVal formula As String, ByVal includeDS As Boolean) As String Return EvaluateFormula(formula, Nothing, Nothing, Nothing, includeDS) End Function Public Function EvaluateFormula(ByVal formula As String) As String Return EvaluateFormula(formula, Nothing, Nothing, Nothing, True) End Function ' Write out the Set methods ' Write out the DataSource properties and methods ' Write out event methods for the page events ' event handler for Button with Layout Public Sub CancelButton_Click_Base(ByVal sender As Object, ByVal args As EventArgs) Dim shouldRedirect As Boolean = True Dim TargetKey As String = Nothing Dim DFKA As String = TargetKey Dim id As String = DFKA Dim value As String = id Try TargetKey = Me.Page.Request.QueryString.Item("Target") If Not TargetKey Is Nothing Then shouldRedirect = False End If Catch ex As Exception shouldRedirect = False Me.ErrorOnPage = True ' Report the error message to the end user Utils.MiscUtils.RegisterJScriptAlert(Me, "BUTTON_CLICK_MESSAGE", ex.Message) Finally End Try If shouldRedirect Then Me.ShouldSaveControlsToSession = True Me.RedirectBack() ElseIf Not TargetKey Is Nothing AndAlso _ Not shouldRedirect Then Me.ShouldSaveControlsToSession = True Me.CloseWindow(True) End If End Sub ' event handler for Button with Layout Public Sub SaveButton_Click_Base(ByVal sender As Object, ByVal args As EventArgs) Dim shouldRedirect As Boolean = True Dim TargetKey As String = Nothing Dim DFKA As String = TargetKey Dim id As String = DFKA Dim value As String = id Try ' Enclose all database retrieval/update code within a Transaction boundary DbUtils.StartTransaction If (Not Me.IsPageRefresh) Then Me.SaveData() End If Me.CommitTransaction(sender) TargetKey = Me.Page.Request.QueryString.Item("Target") If Not TargetKey Is Nothing Then DFKA = NetUtils.GetUrlParam(Me, "DFKA", false) If Not Me.PersonalIdRecordControl Is Nothing AndAlso Not Me.PersonalIdRecordControl.DataSource Is Nothing Then id = Me.PersonalIdRecordControl.DataSource.PersonalId.ToString If not String.IsNullOrEmpty(DFKA) then If DFKA.Trim().StartsWith("=") then Dim variables as System.Collections.Generic.IDictionary(Of String, Object) = new System.Collections.Generic.Dictionary(Of String, Object)() variables.Add(Me.PersonalIdRecordControl.DataSource.TableAccess.TableDefinition.TableCodeName, Me.PersonalIdRecordControl.DataSource) value = EvaluateFormula(DFKA, Me.PersonalIdRecordControl.DataSource, Nothing,variables) Else value = Me.PersonalIdRecordControl.DataSource.GetValue(Me.PersonalIdRecordControl.DataSource.TableAccess.TableDefinition.ColumnList.GetByAnyName(DFKA)).ToString End If End If If value is Nothing Then value = id End If Dim Formula As String = Me.Page.Request.QueryString.Item("Formula") If Not Formula Is Nothing Then Dim variables as System.Collections.Generic.IDictionary(Of String, Object) = new System.Collections.Generic.Dictionary(Of String, Object)() variables.Add(Me.PersonalIdRecordControl.DataSource.TableAccess.TableDefinition.TableCodeName, Me.PersonalIdRecordControl.DataSource) value = EvaluateFormula(formula, Me.PersonalIdRecordControl.DataSource, Nothing,variables) End If BaseClasses.Utils.MiscUtils.RegisterAddButtonScript(Me, TargetKey, id, value) End If shouldRedirect = False End If Catch ex As Exception ' Upon error, rollback the transaction Me.RollBackTransaction(sender) shouldRedirect = False Me.ErrorOnPage = True ' Report the error message to the end user Utils.MiscUtils.RegisterJScriptAlert(Me, "BUTTON_CLICK_MESSAGE", ex.Message) Finally DbUtils.EndTransaction End Try If shouldRedirect Then Me.ShouldSaveControlsToSession = True Me.RedirectBack() ElseIf Not TargetKey Is Nothing AndAlso _ Not shouldRedirect Then Me.ShouldSaveControlsToSession = True Me.CloseWindow(True) End If End Sub #End Region End Class End Namespace