To read RBA variable values from custom code you must specify which variables you will be reading and then fetch their values and assign them to local VB variables:

    ' --- declare local variables object ---
    Dim variables As Creo.PWS.Automation.BaseDataModel.Variables = action.Variables
    '
    ' --- identify the variables to read ---
    variables.Reading("$prinergyPrimaryServerName")
    variables.Reading("$BookletPageFactor4")
    variables.Reading("$optionAutomaticCoverProcessing")
    '
    ' --- fetch the values ---
    variables.Fetch


    ' --- assign each fetched values to a local variables ---
    Dim Global_prinergyPrimaryServerName As Creo.PWS.Automation.BaseDataModel.ScalarVariable(Of String)
        = variables("$prinergyPrimaryServerName")
    Dim Global_BookletPageFactor4 As Creo.PWS.Automation.BaseDataModel.ScalarVariable(Of Integer)
        = variables("$BookletPageFactor4")
    Dim Global_optionAutomaticCoverProcessing As Creo.PWS.Automation.BaseDataModel.ScalarVariable(Of Boolean)
        = variables("$optionAutomaticCoverProcessing")

To update RBA variables from custom code you must specify which variables are going to be updated, assign values to the variables, and then, if not being done from within a Set Variables action, indicate you are done updating them:

       ' --- declare variables ---
    Dim variables As Creo.PWS.Automation.BaseDataModel.Variables = action.Variables
    '
    ' --- variables to be updated ---
    variables.Updating("@userDefinedErrorMsg")
    variables.Updating("@userDefinedErrorCode")
    variables.Updating("@emailAdministrator")
    '
    ' --- declare each variable being used for the update ---
    Dim Temp_userDefinedErrorMsg As Creo.PWS.Automation.BaseDataModel.ScalarVariable(Of String)
        = variables("@userDefinedErrorMsg")
    Dim Temp_userDefinedErrorCode As Creo.PWS.Automation.BaseDataModel.ScalarVariable(Of Integer)
        = variables("@userDefinedErrorCode")
    Dim Temp_emailAdministrator As Creo.PWS.Automation.BaseDataModel.ScalarVariable(Of Boolean)
        = variables("@emailAdministrator")
    '
    ' --- Update the temporary variable values with appropriate values ---
    Temp_UserDefinedErrorMsg.Value = "Some error message to be reported to the user"
    Temp_userDefinedErrorCode.Value = 4857
    Temp_emailAdministrator.Value = true
    '
    ' --- Signal that you done updating the variables (not required if being done within a Set Variables action) ---
    variables.AccessDone(action.Context.ToString)   

Variables can be read and updated from the same custom code if all the appropriate Reading, Fetch, Updating, and AccessDone calls are made.