System.Mom.BackwardCompatibility.VarSetAction (WriteActionModuleType)

Element properties:

TypeWriteActionModuleType
IsolationAny
AccessibilityInternal
RunAsDefault
InputTypeSystem.Mom.BackwardCompatibility.ResponseContext.Data
OutputTypeSystem.Mom.BackwardCompatibility.ResponseContext.Data

Member Modules:

ID Module Type TypeId RunAs 
ScriptWriteAction WriteAction System.Mom.BackwardCompatibility.ScriptWriteAction Default

Source Code:

<WriteActionModuleType ID="System.Mom.BackwardCompatibility.VarSetAction" Accessibility="Internal">
<Configuration>
<xsd:element name="Operation">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Increment"/>
<xsd:enumeration value="Decrement"/>
<xsd:enumeration value="SetValue"/>
<xsd:enumeration value="SetNumber"/>
<xsd:enumeration value="LastNValues"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="Name" type="xsd:string"/>
<xsd:element name="Value" type="xsd:string"/>
<xsd:element name="Occurrences" type="xsd:integer" minOccurs="0" maxOccurs="1"/>
</Configuration>
<ModuleImplementation>
<Composite>
<MemberModules>
<WriteAction TypeID="System.Mom.BackwardCompatibility.ScriptWriteAction" ID="ScriptWriteAction">
<Body><Script>

Option Explicit

' Get the Values from script parameters, stored here to allow $Data/&lt;property&gt;$ syntax
Dim Name
Dim Value
Dim Occurrences
Name = ScriptContext.Parameters.Get("Name")
Value = ScriptContext.Parameters.Get("Value")
Occurrences = ScriptContext.Parameters.Get("Occurrences")

If "$Config/Operation$" = "Increment" Then
call State.Put(Name, State.Get(Name) + 1)
ElseIf "$Config/Operation$" = "Decrement" Then
call State.Put(Name, State.Get(Name) - 1)
ElseIf "$Config/Operation$" = "SetValue" Then
call State.Put(Name, Value)
ElseIf "$Config/Operation$" = "SetNumber" Then
call State.Put(Name, CInt(Value))
ElseIf "$Config/Operation$" = "LastNValues" Then
Dim First
Dim Last

' This call will fail if Occurrences is not set
If IsEmpty(Occurrences) Or IsNull(Occurrences) Then
ScriptContext.Echo "LastN Varset Actions require the number of Occurrences to be set"
ScriptContext.Quit
End If

call State.Put(Name &amp; ".size", CInt(Occurrences))
First = State.Get(Name &amp; ".first")
Last = State.Get(Name &amp; ".last")

' If this is the first access
If IsEmpty(First) Then
call State.Put(Name &amp; ".first", 1)
First = 1
Last = 0
End If

' If we have used all of the availiable slots
If Last = CInt(Occurrences) Then
Dim I
' Copy each slot back one and drop the first one off of the bottom
For I = First+1 To Last
Dim Current
Current = State.Get(Name &amp; "." &amp; I)
call State.Put(Name &amp; "." &amp; (I-1), Current)
Next
Else
' Set the last up by 1 and save it
Last = Last + 1
call State.Put(Name &amp; ".last", Last)
End If

' Save the current value
call State.Put(Name &amp; "." &amp; Last, Value)
End If
</Script></Body>
<Language>VBScript</Language>
<Name/>
<Parameters>
<Parameter>
<Name>Name</Name>
<Value>$Config/Name$</Value>
</Parameter>
<Parameter>
<Name>Value</Name>
<Value>$Config/Value$</Value>
</Parameter>
<Parameter>
<Name>Occurrences</Name>
<Value>$Config/Occurrences$</Value>
</Parameter>
</Parameters>
</WriteAction>
</MemberModules>
<Composition>
<Node ID="ScriptWriteAction"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System.Mom.BackwardCompatibility.ResponseContext.Data</OutputType>
<InputType>System.Mom.BackwardCompatibility.ResponseContext.Data</InputType>
</WriteActionModuleType>