Guidelines for variables

You must be aware of the guidelines for PowerShell and Perl variables in OnCommand Workflow Automation (WFA) when you create a command or a data source type.

PowerShell variables

Guidelines Example
For script input parameters:
  • Use Pascal case.
  • Do not use underscores.
  • Do not use abbreviations.

$VolumeName

$AutoDeleteOptions

$Size

For script internal variables:
  • Use Camel case.
  • Do not use underscores.
  • Do not use abbreviations.

$newVolume

$qtreeName

$time

For functions:
  • Use Pascal case.
  • Do not use underscores.
  • Do not use abbreviations.
GetVolumeSize
Variable names are not case-sensitive. However, to improve readability, you should not use different capitalization for the same name. $variable is the same as $Variable.
Variable names should be in plain English and should be related to the functionality of the script. Use $name and not $a.
Declare the data type for each variable, explicitly.

[string]name

[int]size

Do not use special characters (! @ # & % , .) and spaces. None
Do not use PowerShell reserved keywords. None
Group the input parameters by placing the mandatory parameters first followed by the optional parameters.
param(
[parameter(Mandatory=$true)]
[string]$Type,
	
[parameter(Mandatory=$true)]
[string]$Ip,

[parameter(Mandatory=$false)]
[string]$VolumeName
)
Comment all input variables using HelpMessage annotation with a meaningful help message.
[parameter(Mandatory=$false,HelpMessage="LUN to map")]
[string]$LUNName
Do not use Filer as a variable name; use Array instead. None
Use ValidateSet annotation in cases where the argument gets enumerated values. This automatically translates to Enum data type for the parameter.
[parameter(Mandatory=$false,HelpMessage="Volume state")]
[ValidateSet("online","offline","restricted")]
[string]$State
Add an alias to a parameter that ends with “_Capacity” to indicate that the parameter is of capacity type. The Create Volume command uses aliases as follows:
[parameter(Mandatory=$false,HelpMessage="Volume increment size in MB")]
[Alias("AutosizeIncrementSize_Capacity")]
[int]$AutosizeIncrementSize
Add an alias to a parameter that ends with “_Password” to indicate that the parameter is of password type.
param (
  [parameter(Mandatory=$false, HelpMessage="In order to create an Active Directory machine account for the CIFS server or setup CIFS service for Storage Virtual Machine, you must supply the password of a Windows account with sufficient privileges")]  [Alias("Pwd_Password")]  [string]$ADAdminPassword
)

Perl variables

Guidelines Example
For script input parameters:
  • Use Pascal case.
  • Do not use underscores.
  • Do not use abbreviations.

$VolumeName

$AutoDeleteOptions

$Size

Do not use abbreviations for script internal variables.

$new_volume

$qtree_name

$time

Do not use abbreviations for functions. get_volume_size
Variable names are case-sensitive.

To improve readability, you should not use different capitalization for the same name.

$variable is not the same as $Variable.
Variable names should be in plain English and should be related to the functionality of the script. Use $name and not $a.
Group the input parameters by placing the mandatory parameters first, followed by the optional parameters. None
In GetOptions function, explicitly declare the data type of each variable for input parameters.
GetOptions(
	"Name=s"=>\$Name,
	"Size=i"=>\$Size
)
Do not use Filer as a variable name; use Array instead. None
Perl does not include the ValidateSet annotation for enumerated values. Use explicit if statements for cases where argument gets enumerated values.
if
(defined$SpaceGuarantee&&!($SpaceGuaranteeeq'none'||$SpaceGuaranteeeq'volume'||$SpaceGuaranteeeq'file'))
{
	die'Illegal SpaceGuarantee argument: \''.$SpaceGuarantee.'\'';
}
All Perl WFA commands must use the strict pragma to discourage the use of unsafe constructs for variables, references, and subroutines.
use strict;
# the above is equivalent to
use strictvars;
use strictsubs;
use strictrefs;
All Perl WFA commands must use the following Perl modules:
  • Getopt

    This is used for specifying input parameters.

  • WFAUtil

    This is used for utility functions that are provided for command logging, reporting command progress, connecting to array controllers, and so on.

use Getopt::Long;
use NaServer;
use WFAUtil;