SQABasic "DDVariableStore" Library

 MODULE DESCRIPTION:

 Provides named variable storage and retrieval for the framework.
 The variable names are NOT case-sensitive and are stored as ALL upper case.


Declarations Constants Global Variables User-Defined Types Routine Details

User Dependencies:

(stuff the developer's library/script $INCLUDES at compile time.)
(Note: The order of items may matter and may be different for your code.)

Internal Dependencies:

(stuff this library needs at compile time.)

Exported Declarations

   Sub   InitSAFSConstants       BasicLib DDVariableStore 
Function DDVGetVariableValue     BasicLib DDVariableStore 
Function DDVSetVariableValue     BasicLib DDVariableStore 
   Sub   DDVClearAllVariables    BasicLib DDVariableStore 
Function DDVSubstituteVariables  BasicLib DDVariableStore 
Function DDVExtractVariables     BasicLib DDVariableStore 
Function DDVProcessExpression    BasicLib DDVariableStore 
Function DDVProcessFieldExpressions  BasicLib DDVariableStore 

Constants

' Framework constants
Const SAFS_PROJECT_DIRECTORY    = "SAFSPROJECTDIRECTORY"
Const SAFS_DATAPOOL_DIRECTORY   = "SAFSDATAPOOLDIRECTORY"
Const SAFS_BENCH_DIRECTORY      = "SAFSBENCHDIRECTORY"
Const SAFS_TEST_DIRECTORY       = "SAFSTESTDIRECTORY"
Const SAFS_DIF_DIRECTORY        = "SAFSDIFDIRECTORY"
Const SAFS_LOGS_DIRECTORY       = "SAFSLOGSDIRECTORY"
Const SAFS_RUNTIME_REPOSITORY   = "SAFSRUNTIMEREPOSITORY"

Const SAFS_SYSTEM_USERID        = "SAFSSYSTEMUSERID"


Globals

                                
                                
    (none)

User-Defined Types


Type DDVariable

    name     As String      'name of the variable
    value    As Variant     'value of the variable
    
End Type


Routine Details



   Sub InitSAFSConstants ()

 DESCRIPTION:

     Store all the deduced constants for the Driver into DDVariables.
     This includes key directory paths and names, etc...

 PARAMETERS:

     (none)

 ERRORS:

       none

 Orig Author: Carl Nagle
 Orig   Date: DEC 15, 2003
 History:

      DEC 15, 2003    Original Release
      APR 26, 2004    (Carl Nagle) Added SAFSystemUSERID to precanned variables
      DEC 07, 2006    (Carl Nagle) Bypass DDVariableStore if SAFS available




  Function DDVGetVariableValue (varname As String, varvalue As Variant) As Integer

 DESCRIPTION:

      Locate the variable varname value and return it in the varvalue Variant.
      If the variable does not exist, we will attempt lookthru to the current
      Application Map FALLBACK LOOKUP SECTION as set or defaulted in
      DDGUIUtilties.DDGGetDefaultAppMapSection.

      Items successfully retrieved via lookthru to the Application Map are NOT
      set as variables here.  They remain as items stored in the Application Map
      retrieved via the DDGUIUtilities.DDGGetGUIID call.

      If the variable is still not found, then this call creates it and gives
      it the default value as may be provided in the varvalue Variant.

 PARAMETERS:

      varname     Case-insensitive name of the variable to retrieve the
                  value of.

      varvalue    Variant to hold the retrieved value of the variable.
                  This input Variant will not be modified if the variable name
                  does not exist in storage or is not found via lookthru in
                  the current Application Map(if any).

                  Thus, you can preset the Variant to contain a default
                  (non-empty) value for the call.  The variable will then be
                  stored with this default (non-empty) value and sqaSuccess
                  will be returned.

 RETURNS:

       0  (sqaSuccess) if the variable name exists and we set the varvalue
                       (or accepted the default value provided).

      -1  If the variable was not found to exist and could not be defaulted.

 ERRORS:

       none

 Orig Author: Carl Nagle
 Orig   Date: JUL 18, 2000
 History:

      JUL 18, 2000    Original Release
      MAR 15, 2001    (Carl Nagle) Added lookthru to the Application Map
      AUG 03, 2001    (Carl Nagle) Converted to DDVariableStore.DLL
      DEC 07, 2006    (Carl Nagle) Bypass DDVariableStore if SAFS available




  Function DDVSetVariableValue (varname As String, varvalue As Variant) As Integer

 DESCRIPTION:

      Set a named variable to the given value.  If the variable already exists
      then overwrite the existing value.  If not, create it.

 PARAMETERS:

      varname     Case-insensitive name of the variable to set.

      varvalue    Variant containing the value to assign the variable.

 RETURNS:

       0  (sqaSuccess) if the variable name & value was set.
       -1 if the varname or varvalue are invalid values (null)

 ERRORS:

       none

 Orig Author: Carl Nagle
 Orig   Date: JUL 18, 2000
 History:

      JUL 18, 2000    Original Release
      AUG 03, 2001    (Carl Nagle) Converted to DDVariableStore.DLL
      JUN 16, 2003    (Carl Nagle) Corrected return code doc.
      DEC 07, 2006    (Carl Nagle) Bypass DDVariableStore if SAFS available




  Sub DDVClearAllVariables ()

 DESCRIPTION:

      Clear out and Reset our DDVariableStore

 PARAMETERS:

      none

 ERRORS:

      none

 Orig Author: Carl Nagle
 Orig   Date: JUL 18, 2000
 History:

      JUL 18, 2000    Original Release
      AUG 03, 2001    (Carl Nagle) Converted to DDVariableStore.DLL
      DEC 07, 2006    (Carl Nagle) Bypass DDVariableStore if SAFS available




  Function DDVSubstituteVariables (inputRecord As String, fieldID As Integer,
                                   delimiters As String) As String

 DESCRIPTION:

      Given an inputRecord, delimiters, and a fieldID into the record to
      start with; attempt to locate references to stored variables and substitute
      the values of those variables enclosed in quotes in place of the references
      (in a copy of the inputRecord).

      Variable references are identified by a leading caretd (^) immediately
      followed by the name of the variable.  The name of the variable itself
      cannot contain any whitespace, quotes, additional carets, equality
      symbols (=), or any field delimiters that might be used during the
      life of the variable.  The routine will successfully ignore variable
      assignment references (Ex: ^var1 = "some value")

      Examples of variable references (delimited by commas):

          ^ID , ^employee.name , ^employee.address1 , ^employee.address2

      On exit the above example would now contain the values of the variables:
      but it will substitute them in place like this:

          "6422","John Smith","124 Main St.","LidsVille USA"

      Use StringUtilities.GetTrimmedQuotedField to extract the value of the
      field from the new record.

      Note: For runtime optimizations, no error detection is performed on
      the input parameters.  This should be handled prior to calling this
      routine.

 PARAMETERS:

      inputRecord     delimited record of fields possibly containing references
                      to variables.  This String will not be modified by
                      this routine.  A copy will be created, modified, and
                      returned.

      fieldID         the index to begin processing the inputRecord.  Normally,
                      we would process from the very beginning, which is field 1.

      delimiters      A String of the delimiters that possibly separates
                      the fields in the inputRecord.  Any one character acts
                      like a delimiter.

 RETURNS:

      String          A copy of the inputRecord with any variable references
                      converted to their actual values.

 ERRORS:

       none

 Orig Author: Carl Nagle
 Orig   Date: JUL 19, 2000
 History:

      JUL 19, 2000    Original Release
      SEP 29, 2000    (Carl Nagle) Optimizations




  Function DDVExtractVariables (inputRecord As String, fieldID As Integer,
                                   delimiters As String) As String

 DESCRIPTION:

      Given an inputRecord, delimiters, and a fieldID into the record to
      start with; attempt to locate variable assignment references and store
      the variable with its assigned value.  Once the assignments are complete
      replace the assignment field in the record with the value of the
      assignment enclosed in quotes to preserve an leading or trailing spaces.

      Variable assignment references are identified by a leading caret (^)
      immediately followed by the name of the variable, an equal sign (=),
      and the value to assign to that variable. Whitespace can exist on either
      side of the equal sign.

      If the proposed value is NOT another variable reference then the proposed
      value will be trimmed of leading and trailing whitespace via
      StringUtilities.GetTrimmedQuotedString.
      And, yes, a variable can be assigned the value of another variable.

      The name of the variable itself cannot contain any whitespace, quotes,
      additional carets, equality symbols (=), or any field delimiters
      that might be used during the life of the variable.

      Examples of variable assignment references (delimited by commas):

          AddEmployee, ^ID=6422, ^employee.name = "John Smith" , ^payID = ^ID

      On exit the above example would not only store the values of the variables,
      but it will substitute them in place like this:

          AddEmployee,"6422","John Smith","6422"

      Note: For runtime optimizations, no error detection is performed on
      the input parameters.  This should be handled prior to calling this
      routine.

      Additionally, if there field values which need to begin with an caret(^)
      that are not to be considered as variables they should be enclosed
      in quotes.

 PARAMETERS:

      inputRecord     delimited record of fields possibly containing references
                      to variables.  This String will not be modified by
                      this routine.  A copy will be created and modified for
                      return.

      fieldID         the index to begin processing the inputRecord.  Normally,
                      we would process from the very beginning, which is field 1.


      delimiters      A String of the delimiters that possibly separates
                      the fields in the inputRecord.  Any one character acts
                      like a delimiter.

 RETURNS:

      String          A copy of the inputRecord with any variable assignments
                      converted to their actual values.

 ERRORS:

       none

 Orig Author: Carl Nagle
 Orig   Date: JUL 19, 2000
 History:

      JUL 19, 2000    Original Release
      SEP 29, 2000    (Carl Nagle) Optimizations




  Function DDVProcessExpression (expression As String) As String

 DESCRIPTION:

      Process the provided expression using our global DDVariableStore.

      The routine uses StringUtilities.ProcessExpression


 PARAMETERS:

      expression      the String expression to process.


 RETURNS:

      String          The results of the expression conversion.


 ERRORS:

       none

 Orig Author: Carl Nagle
 Orig   Date: SEP 28, 2001
 History:

      SEP 28, 2001    Original Release
      DEC 07, 2006    (Carl Nagle) Bypass DDVariableStore if SAFS available




  Function DDVProcessFieldExpressions (inputRecord As String, fieldID As Integer,
                                  delimiters As String) As String

 DESCRIPTION:

      Given an inputRecord, delimiters, and a fieldID into the record to
      start with--attempt to process expressions in fieldID and each
      subsequent field.

      The routine uses StringUtilities.ProcessFieldExpressions.


 PARAMETERS:

      inputRecord     delimited record of fields possibly containing references
                      to variables.  This String will not be modified by
                      this routine.  A copy will be created and modified for
                      return.

      fieldID         the index to begin processing the inputRecord.  Normally,
                      we would process from the very beginning, which is field 1.

      delimiters      A String of the delimiters that possibly separates
                      the fields in the inputRecord.  Any one character acts
                      like a delimiter.

 RETURNS:

      String          A copy of the inputRecord with expressions
                      converted to their actual values.
                      Some fields may not be converted if there are errors
                      with the parameters or syntax.

 ERRORS:

       none

 Orig Author: Carl Nagle
 Orig   Date: SEP 28, 2001
 History:

      SEP 28, 2001    Original Release
      DEC 07, 2006    (Carl Nagle) Bypass DDVariableStore if SAFS available


Copyright (C) SAS Institute
GNU General Public License: http://www.opensource.org/licenses/gpl-license.php 
==============================================================================