Sample scripts with APIs for strong data types

This topic presents two sample scripts that use API strong data types. The first is a sample form script. The second is a sample global script.

Sample form script

Public Sub TestDatesNumbersScriptAPIs()
 Application.ShowMessage("TestDatesNumbersScriptAPIs()")
 Dim PropertyName As String = "MyProperty"
 Dim MyInt As Integer = 555
 Dim MyString As String = "123"
 Dim MyBoolean As Boolean = True
 Dim MyDecimal As Decimal = 555
 Dim MyLong As Long = 555
 Dim MyDate As Date = Date.Today
 Dim MyColl As IWSIDOCollection = ThisForm.PrimaryIDOCollection
 MyColl.First()
 If Not MyColl.IsEOF Then
 Application.ShowMessage("Testing row-independent Property APIs...")
 For MyPropNumber As Integer = 0 To MyColl.GetNumProperties - 1
 PropertyName = MyColl.GetPropertyName(MyPropNumber)
 'If PropertyName = String.Empty Then Exit For
 'Application.ShowMessage(String.Format("Working on Property: {0}", PropertyName))
 Dim MyProp As IWSIDOProperty = MyColl.Items(0).Properties(PropertyName)
 If MyProp.GetDefault <> MyColl.GetPropertyDefault(PropertyName) Then _
 MsgBox(String.Format("Problem with GetDefault of {0}", PropertyName))
 If MyProp.GetLabel(False) <> MyColl.GetLabelForProperty(PropertyName, False) Then _
 MsgBox(String.Format("Problem with GetLabel of {0}", PropertyName))
 If MyProp.GetLength <> MyColl.GetPropertyLength(PropertyName) Then _
 MsgBox(String.Format("Problem with GetLength of {0}", PropertyName))
 If MyProp.IsIdentity <> MyColl.IsPropertyIdentity(PropertyName) Then _
 MsgBox(String.Format("Problem with IsIdentity of {0}", PropertyName))
 If MyProp.IsKey <> MyColl.IsPropertyKey(PropertyName) Then _
 MsgBox(String.Format("Problem with IsKey of {0}", PropertyName))
 If MyProp.IsLinkBy <> MyColl.IsPropertyLinkBy(PropertyName) Then _
 MsgBox(String.Format("Problem with IsLinkBy of {0}", PropertyName))
 If MyProp.IsNullable <> MyColl.IsPropertyNullable(PropertyName) Then _
 MsgBox(String.Format("Problem with IsNullable of {0}", PropertyName))
 If MyProp.IsNumeric <> MyColl.IsPropertyNumeric(PropertyName) Then _
 MsgBox(String.Format("Problem with IsNumeric of {0}", PropertyName))
 If MyProp.IsNumSortedChar <> MyColl.IsPropertyNumSortedChar(PropertyName) Then _
 MsgBox(String.Format("Problem with IsNumSortedChar of {0}", PropertyName))
 If MyProp.IsProtected <> MyColl.IsPropertyProtected(PropertyName) Then _
 MsgBox(String.Format("Problem with IsProtected of {0}", PropertyName))
 If MyProp.IsQuotable <> MyColl.IsPropertyQuotable(PropertyName) Then _
 MsgBox(String.Format("Problem with IsQuotable of {0}", PropertyName))
 If MyProp.IsReadOnly <> MyColl.IsPropertyReadOnly(PropertyName) Then _
 MsgBox(String.Format("Problem with IsReadOnly of {0}", PropertyName))
 If MyProp.IsRequired <> MyColl.IsPropertyRequired(PropertyName) Then _
 MsgBox(String.Format("Problem with IsRequired of {0}", PropertyName))
 If MyProp.IsUppercase <> MyColl.IsPropertyUppercase(PropertyName) Then _
 MsgBox(String.Format("Problem with IsUppercase of {0}", PropertyName))
 If MyProp.IsBoundByComponent(False) <> MyColl.IsPropertyBoundByComponent(PropertyName, False) Then _
 MsgBox(String.Format("Problem with IsBoundByComponent of {0}", PropertyName))
 MyPropNumber = MyPropNumber + 1
 Next
 Application.ShowMessage("Testing row-dependent Property APIs...")
 For Row As Integer = 0 To MyColl.GetNumEntries - 1
 For MyPropNumber As Integer = 0 To MyColl.GetNumProperties - 1
 PropertyName = MyColl.GetPropertyName(MyPropNumber)
 If Not PropertyName.StartsWith("_") Then
 Dim MyProp As IWSIDOProperty = MyColl(Row)(PropertyName)
 If MyProp.GetBinaryLength <> MyColl.GetObjectPropertyBinaryLength(PropertyName, Row) Then _
 MsgBox(String.Format("Problem with GetBinaryLength of {0} in Row {1}", PropertyName, Row))
 If MyProp.Modified <> MyColl.IsObjectPropertyModified(PropertyName, Row) Then _
 MsgBox(String.Format("Problem with Modified of {0} in Row {1}", PropertyName, Row))
 If MyProp.Value <> MyColl.GetObjectPropertyInternal(PropertyName, Row) Then _
 MsgBox(String.Format("Problem with Value of {0} in Row {1}", PropertyName, Row))
 ThisForm.PrimaryIDOCollection(Row)(PropertyName).Modified = MyBoolean
 Try
 MyDecimal = ThisForm.PrimaryIDOCollection(0)(PropertyName).GetValue(Of Decimal)()
 Catch ex As System.Exception
 MsgBox(String.Format("Failed GetValue for {0} [{1}]", PropertyName, MyProp.Value))
 End Try
 Try
 MyLong = MyProp.GetValueOfLong(MyLong)
 Catch ex As System.Exception
 If ex.Message <> "Object reference not set to an instance of an object." Then
 MsgBox(String.Format("Caught Exception during GetValueOfLong(555): {0}", ex.Message))
 End If
 End Try
 Try
 Dim MyNullableInt As Nullable(Of Integer)
 MyNullableInt = ThisForm.PrimaryIDOCollection(0)(PropertyName).GetNullableValue(Of Integer)()
 Catch ex As System.Exception
 MsgBox(String.Format("Failed GetNullableValue for {0} [{1}]", PropertyName, MyProp.Value))
 End Try
 'Exit For
 ThisForm.PrimaryIDOCollection(Row)(PropertyName).SetValue(MyLong)
 ThisForm.PrimaryIDOCollection(Row)(PropertyName).SetValue(MyDate)
 ThisForm.PrimaryIDOCollection(Row)(PropertyName).SetValuePlusModifyRefresh(MyDecimal)
 ThisForm.PrimaryIDOCollection(Row)(PropertyName).SetValuePlusModifyRefreshInternal(MyInt)
 ThisForm.PrimaryIDOCollection(Row)(PropertyName).Value = MyString
 End If
 Next
 Next
 MyColl.Last()
 MyColl.CurrentItem(PropertyName).Value = String.Empty
 If MyColl.CurrentItem(PropertyName).IsNull Then
 MyColl.CurrentItem(PropertyName).SetValue(MyDate)
 Try
 Dim MyDate2 As Date
 MyDate2 = ThisForm.PrimaryIDOCollection(0)(PropertyName).GetValue(Of Date)()
 If MyDate2 <> MyDate Then _
 MsgBox(String.Format("GetValue resulted in {0} after SetValue({1})", MyDate2, MyDate))
 Catch ex As System.Exception
 MsgBox(String.Format("Failed GetValue for {0} [{1}]", PropertyName, ThisForm.PrimaryIDOCollection(0)(PropertyName).Value))
 End Try
 End If
 MyColl.RefreshCurrentObject()
 Else
 Application.ShowMessage("Unable to test new Property APIs because primary collection is empty!")
 End If
 Application.ShowMessage("Testing new Variable APIs...")
 Dim GoodVar As String = "InitialCommand"
 Dim BadVar As String = "NoSuchVariable!"
 Dim NewVar As String = "NewVariable"
 MyString = ThisForm.Variables(GoodVar).Value
 ThisForm.Variables(NewVar).SetValue(MyDate)
 Try
 Dim MyDate2 As Date
 MyDate2 = ThisForm.Variables(NewVar).GetValue(Of Date)()
 If MyDate2 <> MyDate Then _
 MsgBox(String.Format("GetValue resulted in {0} after SetValue({1})", MyDate2, MyDate))
 Catch ex As System.Exception
 MsgBox(String.Format("Failed GetValue for {0} [{1}]", NewVar, ThisForm.Variables(NewVar).Value))
 End Try
 If ThisForm.Variables(BadVar).IsNull() Then
 MsgBox(String.Format("We know that {0} is Null, so we will not try GetValue()", BadVar))
 Dim MyNullableLong As Nullable(Of Long) = ThisForm.Variables(BadVar).GetNullableValue(Of Long)()
 Else
 Try
 MyDecimal = ThisForm.Variables(BadVar).GetValue(Of Decimal)()
 Catch ex As System.Exception
 MsgBox(String.Format("Failed GetValue for {0} [{1}]", BadVar, ThisForm.Variables(BadVar).Value))
 End Try
 End If
 MyString = "123"
 Application.ShowMessage("Testing new Component APIs...")
 For Each CompName As String In ThisForm.Components.Keys
 'Application.ShowMessage(String.Format("Working on Component: {0}", CompName))
 Try
 MyDecimal = ThisForm.Components(CompName).GetValue(Of Decimal)()
 Catch ex As System.Exception
 MsgBox(String.Format("Failed GetValue for {0} [{1}]", CompName, ThisForm.Components(CompName).Value))
 End Try
 Try
 MyDecimal = ThisForm.Components(CompName).GetValueOfDecimal(0)
 Catch ex As System.Exception
 MsgBox(String.Format("Failed GetValueOfDecimal for {0} [{1}]", CompName, ThisForm.Components(CompName).Value))
 End Try
 Try
 Dim MyNullableInt As Nullable(Of Integer)
 MyNullableInt = ThisForm.Components(CompName).GetNullableValue(Of Integer)()
 Catch ex As System.Exception
 MsgBox(String.Format("Failed GetNullableValue for {0} [{1}]", CompName, ThisForm.Components(CompName).Value))
 End Try
 'Exit For
 ThisForm.Components(CompName).SetValue(MyLong)
 ThisForm.Components(CompName).SetValue(MyDate)
 ThisForm.Components(CompName).Value = MyString
 Next
 End Sub

Sample global script

Sub Main()
 Dim MyInt As Integer = 555
 Dim MyString As String = "123"
 Dim MyBoolean As Boolean = True
 Dim MyDecimal As Decimal = 555
 Dim MyLong As Long = 555
 Dim MyDate As Date = Date.Today
 Dim MyString2 As String
 If Not Parameters(0).IsNull Then
 MyString2 = Parameters(0).Value
 End If
 MyDate = Parameters(MyInt).GetValue(Of Date)()
 MyDecimal = Parameters(ParameterCount).GetValueOfDecimal(55)
 MyLong = Parameters(3).GetValue(Of Long)()
 Dim MyNullableInt As Nullable(Of Integer) = Parameters(1).GetNullableValue(Of Integer)()
 For i As Integer = 0 To ParameterCount() - 1
 Dim MyParm As IGlobalScriptParm = Parameters(i)
 If MyParm.IsNull() Then
 MsgBox(String.Format("We know that parameter {0} is Null, so we will not try GetValue()", i))
 Dim MyNullableLong As Nullable(Of Long) = MyParm.GetNullableValue(Of Long)()
 Else
 Try
 MyDecimal = MyParm.GetValue(Of Decimal)()
 Catch ex As System.Exception
 MsgBox(String.Format("Failed GetValue for parameter {0} [{1}]", i, MyParm.Value))
 End Try
 End If
 Try
 MyLong = MyParm.GetValueOfLong(MyLong)
 Catch ex As System.Exception
 If ex.Message <> "Object reference not set to an instance of an object." Then
 MsgBox(String.Format("Caught Exception during GetValueOfLong(555): {0}", ex.Message))
 End If
 End Try
 Try
 Dim MyNullableInt2 As Nullable(Of Integer)
 MyNullableInt2 = MyParm.GetNullableValue(Of Integer)()
 Catch ex As System.Exception
 MsgBox(String.Format("Failed GetNullableValue for parameter {0} [{1}]", i, MyParm.Value))
 End Try
 Next
 End Sub