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.