domino-webservice引用%INCLUDE "lsxsd.lss"是什么意思

这篇博客探讨了在Domino Webservice中引用%INCLUDE "lsxsd.lss"的原因,主要是为了扩充LotusScript语言的功能,以弥补与其他开发语言的差距。通过引用该文件,开发者可以添加新的类库到代码环境中。lsxsd.lss在 Domino-NOTES 开发环境中可以被找到,包含了扩展的类定义。

个人猜测domino-webservice引用%INCLUDE "lsxsd.lss" 为了补充lotusscript语音和其他开发语言的差距,所以需要补充代码库。

在使用引用追加新的类库。

lsxsd.lss在domino-notes开发环境下可以找到,内容如。其中一些追加新的类。

(感谢QQ群友解惑)

%INCLUDE "lserr.lss"

'--------------------------------------------------------------------
'--------------------------------------------------------------------
' USEFUL DATA CONVERSIONS USED BY ONE OR MORE XML SCHEMA DATATYPES
'--------------------------------------------------------------------
'--------------------------------------------------------------------
CLASS XSD_DATATYPE_CONVERTER
	
	' Convert bytes in a NotesStream into a base64 string
	Function notesStreamToBase64 (ns As NotesStream) As String
		
		Const b64Chars$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
		
		Dim nsLength As Long
		nsLength = ns.Bytes
		ns.Position = 0
		
		Dim numPads As Integer
		numPads = (3 - (nsLength Mod 3)) Mod 3
		
		While nsLength > 0
			
			' Output lines are limited to 76 chars, and because every
			' three input bytes produce 4 output chars we process
			' up to 57 input bytes at a time. (57 = 76 / 4 * 3)
			
			Dim inLength As Long
			inLength = nsLength
			If inLength > 57 Then inLength = 57
			nsLength = nsLength - inLength
			
			Dim outString As String
			outString = ""
			Dim idx As Integer
			idx = 0
			While idx < inLength
				
				' Collect up to 24 bits (3 bytes) of input data
				Dim outBits As Integer
				outBits = 0
				Dim bits24 As Long
				bits24 = 0
				Dim i As Integer
				For i = 0 To 2
					bits24 = bits24 * 256
					If idx + i < inLength Then
						Dim buf As Variant
						buf = ns.Read(1&)
						bits24 = bits24 + buf(0)
						outBits = outBits + 8
					End If
				Next
				idx = idx + 3
				
				Dim numChars As Integer
				numChars = 4
				If outBits <> 24 Then
					numChars = 4 - numPads
				End If
				
				For i = 1 To numChars
					Dim bits6 As Integer
					bits6 = (bits24 And &HFC0000&) / 262144
					outString = outString & Mid$(b64Chars, bits6 + 1, 1)
					bits24 = (bits24 And &H3FFFF&) * 64
				Next
				
				If numChars <> 4 Then
					For i = 1 To numPads
						outString = outString & "="
					Next
				End If
				
			Wend
			
			' Add another line of base64 output to the return string
			notesStreamToBase64 = notesStreamToBase64 & outString & Chr$(13) & Chr$(10)
			
		Wend
		
	End Function
	
	' Convert bytes in a NotesStream into a base64 string
	Function notesStreamToBase64Ext (ns As NotesStream) As String
		On Error GoTo Fallback
		notesStreamToBase64Ext = ns.ReadEncoded(ENC_BASE64, 76) 'internal use only
		Exit Function
	  Fallback:
		On Error GoTo ExitFunction
		notesStreamToBase64Ext = Me.notesStreamtoBase64(ns)
		Exit Function
	  ExitFunction:
		notesStreamToBase64Ext = ""
	End Function


	' Convert a base64 string into bytes in a NotesStream
	Function base64ToNotesStream (b64String As String) As NotesStream
		
		Dim session As New NotesSession
		Dim ns As NotesStream
		Set ns = session.CreateStream
		
		' variables used to stage output to the NotesStream
		Redim buf (0 To 2) As Byte
		Dim numPads As Integer
		numPads = 0
		
		Dim b64Len As Long
		b64Len = Len(b64String)
		
		Dim idx As Long
		idx = 1
		While idx <= b64Len
			
			Dim currChar As String
			currChar = Mid$(b64String, idx, 1)
			
			' Ignore whitespace (CR, LF, SPACE, or TAB) that may lead the line		
			Dim c As Long
			c = Asc(currChar)
			If c = 13 Or c = 10 Or c = 32 Or c = 9 Then
				idx = idx + 1
				Goto Next1
			End If
			
			' Every 4 base64 characters represent 24 bits (three 8-bit bytes)
			Dim bits24 As Long
			bits24 = 0
			Dim i As Integer
			For i = 0 To 3
				Dim bits6 As Long
				c = Asc(Mid$(b64String, idx, 1))
				idx = idx + 1
				
				' Map characters "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
				' to 6-bit binary values ranging from 0 to 63, respectively
				Select Case c
				Case Asc("A") To Asc("Z")
					bits6 = c - Asc("A")				' map A-Z to 0-25
				Case  Asc("a") To Asc("z")
					bits6 = 26 + c - Asc("a")		' map a-z to 26-51
				Case Asc("0") To Asc("9")
					bits6 = 52 + c - Asc("0")		' map 0-9 to 52-61
				Case Asc("+")
					bits6 = 62		' map "+" to 62
				Case Asc("/")
					bits6 = 63		' map "/" to 63
				Case Asc("=")			' pad char at end of base64
					bits6 = 0
					numPads = numPads + 1
				Case Else
					Error ErrOverflow
				End Select
				bits24 = (bits24 * 64) + bits6
			Next
			
			' Extract three 8-bit bytes from the 24-bit value					
			buf(0) = (bits24 And &HFF0000&) / 65536
			buf(1) = (bits24 And &H00FF00&) / 256
			buf(2) = bits24 And &H0000FF&
			
			' Write up to three 8-bit bytes to the NotesStream					
			Select Case numPads
			Case 0
				Call ns.Write (buf)
			Case 1
				Redim Preserve buf (0 To 1)
				Call ns.Write (buf)
				Goto done
			Case 2
				Redim Preserve buf (0 To 0)
				Call ns.Write (buf)
				Goto done
			End Select
			
next1:
		Wend
		
done:
		Set base64ToNotesStream = ns
		
	End Function

	' Convert a base64 string into bytes in a NotesStream
	Function base64ToNotesStreamExt (b64String As String) As NotesStream
		
		Dim session As New NotesSession
		Dim ns As NotesStream
		Set ns = session.CreateStream
		On Error GoTo Fallback
		Call ns.WriteDecoded(b64String,ENC_BASE64) 'internal use only
		Set base64ToNotesStreamExt = ns
		Exit Function
	  Fallback:
		On Error GoTo ExitFunction
		Set base64ToNotesStreamExt = Me.base64ToNotesStream(b64String)
		Exit Function
	  ExitFunction:
		Set base64ToNotesStreamExt = session.CreateStream
	End Function
	
	' Convert bytes in a NotesStream into a hexBinary string
	Function notesStreamToHexBinary (ns As NotesStream) As String
		
		Const hexChars$ = "0123456789ABCDEF"
		
		Dim nsLength As Long
		nsLength = ns.Bytes
		ns.Position = 0
		
		While nsLength > 0
			
			' We arbitrarily limit output lines to 76 hex chars
			' by inserting CRLF after processing a run of 38
			' bytes. (Note: whitespace is allowed in hexBinary).
			
			Dim inLength As Long
			inLength = nsLength
			If inLength > 38 Then inLength = 38
			nsLength = nsLength - inLength
			
			Dim outString As String
			outString = ""
			Dim idx As Integer
			idx = 0
			While idx < inLength
				Dim buf As Variant
				buf = ns.Read(1&)
				outString = outString &_
				Mid$(hexChars, (buf(0) And &HF0&)/16+1,1) &_
				Mid$(hexChars, (buf(0) And &HF&)+1,1)
				idx = idx + 1				
			Wend
			
			' Add another line of base64 output to the return string
			notesStreamToHexBinary = notesStreamToHexBinary & outString & Chr$(13) & Chr$(10)
			
		Wend
		
	End Function


	' Convert a hexBinary string into bytes in a NotesStream
	Function hexBinaryToNotesStream (hexString As String) As NotesStream
		
		Dim session As New NotesSession
		Dim ns As NotesStream
		Set ns = session.CreateStream
		
		' variables used to stage output to the NotesStream
		Dim buf (0 To 0) As Byte
		
		Dim hexLen As Long
		hexLen = Len(hexString)
		
		Dim idx As Long
		idx = 1
		While idx <= hexLen
			
			' Ignore whitespace (CR, LF, SPACE, or TAB) that may lead the line		
			Dim c As Long
			c = Asc(Mid$(hexString, idx, 1))
			If c = 13 Or c = 10 Or c = 32 Or c = 9 Then
				idx = idx + 1
				Goto Next1
			End If
			
			' Every 2 hexBinary characters represent 1 8-bit byte
			buf(0) = 0
			Dim i As Integer
			For i = 0 To 1
				buf(0) = buf(0) * 16
				c = Asc(Mid$(hexString, idx+i, 1))
				Select Case c
				Case Asc("0") To Asc("9")
					buf(0) = buf(0) + c - Asc("0")
				Case Asc("A") To Asc("F")
					buf(0) = buf(0) + c - Asc("A") + 10
				End Select
			Next
			idx = idx + 2
			Call ns.Write(buf)
			
next1:
		Wend
		
done:
		Set hexBinaryToNotesStream = ns
		
	End Function

	' Set the date part of a NotesDateTime From "CCYY-MM-DD ..."
	' Uses localized date separators.
	Sub setXSDDate (ndt As NotesDateTime, xsddate As String)
		If Not ndt.IsValidDate Then ndt.LocalTime = ""
		Dim timeonly As String
		timeonly = ndt.TimeOnly	' preserve the time part
		Dim s As New notessession
		Dim intl As NotesInternational
		Set intl = s.International
	
		Dim datesep As String
		Let datesep = intl.DateSep
		Dim TmpDate As String	
	
		If (Intl.IsDateDMY) Then
			TmpDate = Mid$(xsddate,9,2)   'Day
			TmpDate = TmpDate  & datesep &_
			Mid$(xsddate,6,2)               'Month
			TmpDate = TmpDate & datesep &_
			Left$(xsddate,4)                   'Year			
		Elseif (Intl.IsDateYMD) Then
			TmpDate = Left$(xsddate,4)   'Year
			TmpDate = TmpDate  & datesep &_
			Mid$(xsddate,6,2)               'Month
			TmpDate = TmpDate & datesep &_
			Mid$(xsddate,9,2)                   'Day
		Else
			TmpDate = Mid$(xsddate,6,2)   'Month
			TmpDate = TmpDate  & datesep &_
			Mid$(xsddate,9,2)               'Day
			TmpDate = TmpDate & datesep &_
			Left$(xsddate,4)                   'Year			
		End If	
	
		ndt.LocalTime = TmpDate
	End Sub
	
	' Return the date part of a NotesDateTime as "CCYY-MM-DD"
	Function getXSDDate (ndt As NotesDateTime) As String
		If Not ndt.IsValidDate Then Error ErrTypeMismatch
		Dim vdatetime As Variant
		vdatetime = ndt.LSLocalTime
		getXSDDate = Format$(Year(vdatetime),"0000") & "-" &_
		Format$(Month(vdatetime),"00") & "-" &_
		Format$(Day(vdatetime),"00")
	End Function
	
	' Return the date part of a NotesDateTime as "CCYY-MM-DD" + timezone part
	Function getXSDZoneDate (ndt As NotesDateTime) As String
		If Not ndt.IsValidDate Then Error ErrTypeMismatch
		Dim vdatetime As Variant
		Dim ndtCopy As New NotesDateTime(ndt.GMTTime)
		If (Abs(ndt.TimeZone) > 99) Then
			ndtCopy.AdjustHour(-1 * (ndt.TimeZone Mod 100))
			ndtCopy.AdjustMinute(-1 * (ndt.TimeZone/100))
		Else
			ndtCopy.AdjustHour(-1 * ndt.TimeZone)			
		End If
		If (ndt.IsDST) Then
			ndtCopy.AdjustHour(1)
		End If
		vdatetime = ndtCopy.LSGMTTime  'adjusted to the zone time
	
		getXSDZoneDate = Format$(Year(vdatetime),"0000") & "-" &_
		Format$(Month(vdatetime),"00") & "-" &_
		Format$(Day(vdatetime),"00")
	End Function

	' Set the time part of a NotesDateTime From "HH:MM:SS ..."
	' Uses localized time separators; rounds off milliseconds
	Sub setXSDTime (ndt As NotesDateTime, xsdtime As String)
		If Not ndt.IsValidDate Then ndt.LocalTime = ""
		Dim dateonly As String
		dateonly = ndt.DateOnly	' preserve the date part
		Dim s As New notessession
		Dim intl As NotesInternational
		Set intl = s.International
	
		Dim timesep As String
		Let timesep = intl.TimeSep	
	
		ndt.LocalTime = dateonly & " " &_
		Left$(xsdtime,2) & timesep &_
		Mid$(xsdtime,4,2) & timesep &_
		Mid$(xsdtime,7,2)
	
	     'parse optional milliseconds
		If (Len(xsdtime) > 9 And Mid$(xsdtime, 9, 1) = ".") Then
			Dim milliseconds As Long
			milliseconds = 0
			Dim pos As Integer
			pos = 10
			While (pos<Len(xsdtime) And isDigit(Mid$(xsdtime, pos, 1)))
				pos = pos + 1
			Wend
			
			milliseconds = getMilliseconds(Mid$(xsdtime,10, pos-10))
			
	          'round up milliseconds for the current datetime
			If (milliseconds >= 500) Then
				ndt.AdjustSecond 1, True   'T: preserve DST semantics
			End If	
		End If	
	End Sub
	
	' Return the time info of a NotesDateTime as "HH:MM:SS"
	' Does not compute fractional seconds or timezone info.
	Function getXSDTime (ndt As NotesDateTime) As String
		If Not ndt.IsValidDate Then Error ErrTypeMismatch
		Dim vdatetime As Variant
		vdatetime = ndt.LSLocalTime
		getXSDTime = Format$(Hour(vdatetime),"00") & ":" &_
		Format$(Minute(vdatetime),"00") & ":" &_
		Format$(Second(vdatetime),"00")
	End Function
	
	' Return the time info of a NotesDateTime as "HH:MM:SS", adjusted for timezone
	' Does not compute fractional seconds.
	Function getXSDZoneTime (ndt As NotesDateTime) As String
		If Not ndt.IsValidDate Then Error ErrTypeMismatch
		Dim vdatetime As Variant
		Dim ndtCopy As New NotesDateTime(ndt.GMTTime)
		If (Abs(ndt.TimeZone) > 99) Then
			ndtCopy.AdjustHour(-1 * (ndt.TimeZone Mod 100))
			ndtCopy.AdjustMinute(-1 * (ndt.TimeZone/100))
		Else
			ndtCopy.AdjustHour(-1 * ndt.TimeZone)			
		End If
		If (ndt.IsDST) Then
			ndtCopy.AdjustHour(1)
		End If
		vdatetime = ndtCopy.LSGMTTime  'adjusted to the zone time
	
		getXSDZoneTime = Format$(Hour(vdatetime),"00") & ":" &_
		Format$(Minute(vdatetime),"00") & ":" &_
		Format$(Second(vdatetime),"00")
	End Function

	' Return the XSD zone part of a NotesDateTime as "Z" or "+HH:00" or "-HH:00"
	Function getXSDZone (ndt As NotesDateTime) As String
		If Not ndt.IsValidDate Then Error ErrTypeMismatch

		Dim ret As String
		Dim zone As Integer
		zone = ndt.TimeZone
		If ndt.IsDST Then
			zone = zone - 1
		End If
		zone = Abs(zone)
		If (zone) > 0 Then
			If zone > 99 Then  'MMHH
				Dim mins As Integer
				Dim hrs As Integer
				mins = zone/100
				hrs = zone Mod 100
				ret = Format$(hrs,"00") & ":" & Format$(mins,"00")
			Elseif zone > 9 Then  'HH
				ret = Cstr(zone) & ":00"
			Else  'H
				ret = "0" & Cstr(zone) & ":00"
			End If
			If (ndt.TimeZone < 0 Or (ndt.TimeZone = 0 And ndt.IsDST)) Then
				ret = "+" & ret   'XSD offsets are opposite of ndt
			Else
				ret = "-" & ret
			End If
		Else
			ret = "Z"
		End If
		getXSDZone = ret
	End Function

	' Set the date, time & zone parts of a NotesDateTime From "CCYY-MM-DDT...Z..."
	' If the zone offset is not supported by the NotesDateTime class, the NotesDateTime
	' zone properties are converted to GMT.
	Sub setXSDDateTime(ndt As NotesDateTime, source As String)
	   'based on lotus/domino/axis/encoding/ser/CalendarDeserializer:		
        'validate fixed portion of format
		
		Dim sourceLen As Integer
		sourceLen = Len(source)
		
		If Left$(source,1) = "+" Then
			source = Right$(source, sourceLen-1)   'drop the leading '+'
		End If
		
		If Left$(source,1) = "-" Then  'BC dates: can't represent them in NotesDateTime
			Error 4045, "Invalid date (" & source & ")" 'lsERR_NOTES_INVALID_DATE
		End If
		
		If (sourceLen < 19) Then
			Error 4045, "Invalid date (" & source & ")" 'lsERR_NOTES_INVALID_DATE
		End If
		
		If (Not Mid$(source, 5,1) = "-" Or Not Mid$(source,8,1) = "-" Or Not Mid$(source,11,1) = "T") Then
			Error 4045, "Invalid date (" & source & ")" 'lsERR_NOTES_INVALID_DATE
		End If
		
		If (Not Mid$(source, 14,1) = ":" Or Not Mid$(source,17,1) = ":" ) Then
			Error 4045, "Invalid date (" & source & ")" 'lsERR_NOTES_INVALID_DATE
		End If
		
         ' convert what we have validated so far
		Dim TmpDate As String		
		Dim s As New notessession
		
		Dim intl As NotesInternational
		Set intl = s.International
		
		
		Dim datesep As String
		Let datesep = intl.DateSep
		If (Intl.IsDateDMY) Then
			TmpDate = Mid$(source,9,2)   'Day
			TmpDate = TmpDate  & datesep &_
			Mid$(source,6,2)               'Month
			TmpDate = TmpDate & datesep &_
			Left$(source,4)                   'Year			
		Elseif (Intl.IsDateYMD) Then
			TmpDate = Left$(source,4)   'Year
			TmpDate = TmpDate  & datesep &_
			Mid$(source,6,2)               'Month
			TmpDate = TmpDate & datesep &_
			Mid$(source,9,2)                   'Day
		Else
			TmpDate = Mid$(source,6,2)   'Month
			TmpDate = TmpDate  & datesep &_
			Mid$(source,9,2)               'Day
			TmpDate = TmpDate & datesep &_
			Left$(source,4)                   'Year			
		End If
		
		'normalize to GMT for this machine's timezone, to prepare for applying any XSD timezone part, below
		Dim thiszoneoffset As Integer
		thiszoneoffset = intl.TimeZone   ' ndt.TimeZone   'default for this machine
		If (Intl.IsDST) Then
			thiszoneoffset = thiszoneoffset - 1
		End If
		
		Dim pos As Integer		
		pos = 20  
		
		Dim roundseconds As Integer
		Dim xsdzonehours As Long
		Dim xsdzonemins As Long
		roundseconds = 0		
		xsdzonehours = 0
		xsdzonemins = 0
		
          'parse optional milliseconds 
		If (pos < sourceLen And Mid$(source, pos, 1) = ".") Then
			Dim milliseconds As Long
			milliseconds = 0
			Dim start As Integer
			pos = pos + 1			
			start = pos
			While (pos<=sourceLen And isDigit(Mid$(source, pos, 1)))
				pos = pos + 1
			Wend
			
			milliseconds = getMilliseconds(Mid$(source,start,pos-start))
			
               'round up milliseconds for the current datetime
			If (milliseconds >= 500) Then
				roundseconds = 1		
			End If
		End If		
		
		Dim timesep As String
		Let timesep = intl.TimeSep
		TmpDate = TmpDate & " " & Mid$(source,12,2) & timesep & Mid$(source, 15, 2) & timesep & Mid$(source, 18,2)			
		
            'parse optional timezone
		If (pos+5 <= sourceLen And _
		(Mid$(source, pos,1) = "+" Or  Mid$(source,pos,1) ="-")) Then
			
			If ( Not isDigit(Mid$(source, pos+1,1)) Or _
			Not isDigit(Mid$(source, pos+2, 1)) Or _
			Not Mid$(source, pos+3, 1)  = ":"  Or _
			Not isDigit(Mid$(source, pos+4,1)) Or _
			Not isDigit(Mid$(source, pos+5,1))) Then
				Error 4045, "Invalid date (" & source & ")" 'lsERR_NOTES_INVALID_DATE
			End If
			xsdzonehours = Clng(Mid$(source, pos+1, 1))*10 + Clng(Mid$(source, pos+2, 1))
			xsdzonemins = Clng(Mid$(source, pos+4, 1))*10 + Clng(Mid$(source, pos+5, 1))			
			
               ' use zonehours to fetch canonical timezone for setting local time
			If Mid$(source, pos, 1) ="-" Then			
				xsdzonehours = -1 * xsdzonehours
				xsdzonemins = -1 * xsdzonemins
			End If
			pos = pos + 6
		End If
		
		Dim tmpNdt As New NotesDateTime("")
		If (pos = sourceLen And Mid$(source,pos,1) = "Z") Then
			tmpNdt.LocalTime = TmpDate  & " " & " GMT"		
			pos = pos + 1
		Else
			Dim zone As String
			If (xsdzonemins = 0) Then
				zone = getZone(xsdzonehours, 0)
				tmpNdt.LocalTime = TmpDate  & " " & zone
			Else
				Dim zone1 As String				
				zone1 = getZone(xsdzonehours, xsdzonemins)	
				If Len(zone1) > 0 Then
					tmpNdt.LocalTime = TmpDate  & " " & zone1					
				Else 'couldn't find a timezone abbrev NotesDateTime would recognize; just convertToZone GMT
					zone = getZone(xsdzonehours, 0)
					tmpNdt.LocalTime = TmpDate  & " " & zone					
					tmpNdt.AdjustMinute -1*xsdzonemins, True
					tmpNdt.ConvertToZone 0, False    'GMT
				End If
			End If	
		End If
		
		tmpNdt.AdjustSecond(roundseconds)
		
		If (pos < sourceLen) Then
			Exit Sub
		End If
		'success: set in/out value:
		Set ndt = tmpNdt
	End Sub

	Function isDigit(inp As String) As Boolean
		On Error Goto errhandler
		Dim i As Integer
		i = Cint(inp)
		If i > -1 And i < 10 Then
			isDigit = True
		Else
			isDigit = False
		End If
		Exit Function
	errhandler:
		isDigit = False
		Resume done
	done:
	End Function

	Function getZone(zoneoffset As Long, zonemins As Long) As String
		getZone = ""		
		Select Case Abs(zonemins)
		Case 30:
			Select Case zoneoffset
			Case 11: getZone = "ZE11B"	
			Case 10: getZone="ZE10B"
			Case 9: getZone="ZE9B"
			Case 6: getZone="ZE6B"
			Case 5: getZone="ZE5B"
			Case 4: getZone="ZE4B"				
			Case 3: getZone="ZE3B"					
			Case -3: getZone="NST"	
			Case -9: getZone="ZW9B"
			End Select
			
		Case 45:
			Select Case zoneoffset
			Case 12: getZone="ZE12C"
			Case 5: getZone="ZE5C"
			End Select
			
		Case 0:
			Select Case zoneoffset		
			Case 12: getZone = "ZE12"
			Case 11: getZone = "ZE11"
			Case 10: getZone = "ZE10"
			Case 9: getZone = "ZE9"
			Case 8: getZone = "ZE8"  
			Case 7: getZone = "ZE7"  
			Case 6: getZone = "ZE6"  
			Case 5: getZone = "ZE5"  
			Case 4: getZone = "ZE4"  
			Case 3: getZone = "ZE3"  
			Case 2: getZone = "ZE2"  
			Case 1: getZone = "CET" 
			Case 0: getZone = "GMT"
			Case -1: getZone = "ZW1"
			Case -2: getZone = "ZW2"
			Case -3: getZone = "ZW3"
			Case -4: getZone = "AST"
			Case -5: getZone = "EST"
			Case -6: getZone = "CST"
			Case -7: getZone = "MST"
			Case -8: getZone = "PST"
			Case -9: getZone = "YST"
			Case -10: getZone = "HST"
			Case -11: getZone = "BST"
			Case -12: getZone = "ZW12"	
			End Select
		End Select		
	End Function

	Function getMilliseconds(millisecondpart As String) As Long
		Dim milli As String
		milli = millisecondpart
		Dim milliLen As Integer
		milliLen = Len(millisecondpart)
		Dim milliseconds As Long
		milliseconds = 0
	
		If milliLen < 3 Then  'pad it out to 3 digits
			While (milliLen < 3)
				milli = milli & "0"
				milliLen = milliLen + 1
			Wend
		End If
		If Len(milli) = 3 Then
			milliseconds = Cint(milli)
		Else 'truncate and round off:
			milliseconds = Cint( Mid$(milli, 1,3))
			If Strcomp(Mid$(milli, 4,1), "4") > 0 Then
				milliseconds = milliseconds + 1
			End If
		End If
	
		getMilliseconds = milliseconds
	
	End Function

END CLASS

'--------------------------------------------------------------------
'--------------------------------------------------------------------
' ROOT HOLDER CLASS
'--------------------------------------------------------------------
'--------------------------------------------------------------------

PUBLIC CLASS INOUT_HOLDER
END CLASS

'--------------------------------------------------------------------
'--------------------------------------------------------------------
' ROOT CLASS FOR LOTUSSCRIPT PROXY OBJECTS
'--------------------------------------------------------------------
'--------------------------------------------------------------------

PUBLIC CLASS LS_PROXY_OBJECT

    PRIVATE ValueAsString As String

	SUB setValueFromString (value As String)
		ValueAsString = value
	END SUB

	FUNCTION getValueAsString () As String
		getValueAsString = ValueAsString
	END FUNCTION

END CLASS

'--------------------------------------------------------------------
'--------------------------------------------------------------------
' ROOT CLASS AND HOLDER FOR ANY AND ALL XML TYPES
'--------------------------------------------------------------------
'--------------------------------------------------------------------

PUBLIC CLASS XSD_ANYTYPE AS LS_PROXY_OBJECT
END CLASS

PUBLIC CLASS XSD_ANYTYPE_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_ANYTYPE

END CLASS

'--------------------------------------------------------------------
'--------------------------------------------------------------------
' BASE CLASS FOR ALL SIMPLE TYPES
'--------------------------------------------------------------------
'--------------------------------------------------------------------

PUBLIC CLASS XSD_SIMPLETYPE AS XSD_ANYTYPE
END CLASS

PUBLIC CLASS XSD_SIMPLETYPE_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_SIMPLETYPE

END CLASS

'--------------------------------------------------------------------
'--------------------------------------------------------------------
' ROOT CLASS AND HOLDER FOR LISTS OF SIMPLE TYPES.
'
' SUBCLASSES MUST DEFINE A 0-BASED ARRAY OF THE APPROPRIATE TYPE
' AS WELL AS OVERRIDE METHODS THAT ACCESS AND MODIFY THAT ARRAY:
'
'	SUB setListValueFromString (idx As INTEGER, value As STRING)
'	FUNCTION getListValueAsString (idx As INTEGER) As STRING
'	FUNCTION getListLength () As INTEGER
'
'--------------------------------------------------------------------
'--------------------------------------------------------------------

PUBLIC CLASS XSD_LIST AS XSD_SIMPLETYPE

	' Return a String with a space-separated concatentation
	' of all the non-null items in the list

	FUNCTION getValueAsString () As STRING
		IF ME.getListLength > 0 THEN
			DIM i As INTEGER
			DIM count As INTEGER
			FOR i = 0 TO ME.getListLength-1
				IF ME.getListValueAsString(i) <> "" THEN
					IF count > 0 THEN getValueAsString = getValueAsString & " "
					getValueAsString = getValueAsString & ME.getListValueAsString(i)
					count = count+1
				END IF
			NEXT i
		END IF
	END FUNCTION

	' SUBs and FUNCTIONs that must be overridden by each subclass

	SUB setListValueFromString (idx As INTEGER, value As STRING)
		ERROR ErrIllegalOperation
	END SUB

	FUNCTION getListValueAsString (idx As INTEGER) As STRING
		ERROR ErrIllegalOperation
	END FUNCTION

	FUNCTION getListLength () As INTEGER
		ERROR ErrIllegalOperation
	END FUNCTION

END CLASS

PUBLIC CLASS XSD_LIST_HOLDER AS INOUT_HOLDER

	PUBLIC Value As XSD_LIST

END CLASS

'--------------------------------------------------------------------
'--------------------------------------------------------------------
' SIMPLE TYPES AND HOLDERS
'--------------------------------------------------------------------
'--------------------------------------------------------------------

PUBLIC CLASS XSD_STRING AS XSD_SIMPLETYPE
END CLASS

PUBLIC CLASS XSD_STRING_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_STRING

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_BOOLEAN AS XSD_SIMPLETYPE
END CLASS

PUBLIC CLASS XSD_BOOLEAN_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_BOOLEAN

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_BASE64BINARY AS XSD_SIMPLETYPE

	SUB setValueFromNotesStream (nsValue As NotesStream)
		Dim xdtc As New XSD_DATATYPE_CONVERTER
		CALL Me.setValueFromString (xdtc.notesStreamToBase64Ext (nsValue))
	END SUB

	FUNCTION getValueAsNotesStream () As NotesStream
		Dim xdtc As New XSD_DATATYPE_CONVERTER
		set getValueAsNotesStream = xdtc.base64ToNotesStreamExt (Me.getValueAsString())
	END FUNCTION

END CLASS

PUBLIC CLASS XSD_BASE64BINARY_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_BASE64BINARY

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_HEXBINARY AS XSD_SIMPLETYPE

	SUB setValueFromNotesStream (nsValue As NotesStream)
		Dim xdtc As New XSD_DATATYPE_CONVERTER
		CALL Me.setValueFromString (xdtc.notesStreamToHexBinary (nsValue))
	END SUB

	FUNCTION getValueAsNotesStream () As NotesStream
		Dim xdtc As New XSD_DATATYPE_CONVERTER
		set getValueAsNotesStream = xdtc.hexBinaryToNotesStream (Me.getValueAsString())
	END FUNCTION

END CLASS

PUBLIC CLASS XSD_HEXBINARY_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_HEXBINARY

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_FLOAT AS XSD_SIMPLETYPE
END CLASS

PUBLIC CLASS XSD_FLOAT_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_FLOAT

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_DECIMAL AS XSD_SIMPLETYPE
END CLASS

PUBLIC CLASS XSD_DECIMAL_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_DECIMAL

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_DOUBLE AS XSD_SIMPLETYPE
END CLASS

PUBLIC CLASS XSD_DOUBLE_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_DOUBLE

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_ANYURI AS XSD_SIMPLETYPE
END CLASS

PUBLIC CLASS XSD_ANYURI_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_ANYURI

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_QNAME AS XSD_SIMPLETYPE

	PRIVATE NamespaceURI As STRING
	PRIVATE LocalPart As STRING
	PRIVATE Prefix As STRING

	SUB setNamespaceURI (value As STRING)
		NamespaceURI = value
	END SUB

	FUNCTION getNamespaceURI () As STRING
		getNamespaceURI = NamespaceURI
	END FUNCTION

	SUB setLocalPart (value As STRING)
		LocalPart = value
	END SUB

	FUNCTION getLocalPart () As STRING
		getLocalPart = LocalPart
	END FUNCTION

	SUB setPrefix (value As STRING)
		Prefix = value
	END SUB

	FUNCTION getPrefix () As STRING
		getPrefix = Prefix
	END FUNCTION

END CLASS

PUBLIC CLASS XSD_QNAME_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_QNAME

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_NOTATION AS XSD_SIMPLETYPE
END CLASS

PUBLIC CLASS XSD_NOTATION_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_NOTATION

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_DURATION AS XSD_SIMPLETYPE
END CLASS

PUBLIC CLASS XSD_DURATION_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_DURATION

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_DATETIME AS XSD_SIMPLETYPE

	SUB SetValueFromNotesDateTime (value As NotesDateTime)  'deprecated
		Dim xdtc As New XSD_DATATYPE_CONVERTER
		CALL ME.setValueFromString (xdtc.getXSDDate (value) & "T" & xdtc.getXSDTime (value))
	End SUB

	Sub SetValueWithZoneFromNotesDateTime (value As NotesDateTime)
		Dim xdtc As New XSD_DATATYPE_CONVERTER
		Call Me.setValueFromString (xdtc.getXSDZoneDate (value) & "T" & xdtc.getXSDZoneTime (value) & xdtc.getXSDZone(value))
	End Sub

	Function GetValueAsNotesDateTime ( ) As NotesDateTime
		Dim xdtc As New XSD_DATATYPE_CONVERTER
		Dim ndt As New NotesDateTime ("")
		If Mid$(Me.getValueAsString,11,1) = "T" Then	' if there's a time part after CCYY-MM-DD
			Call xdtc.setXSDDateTime (ndt, Me.getValueAsString)
		Else
			Call xdtc.setXSDDate (ndt, Me.getValueAsString)			
		End If
		set GetValueAsNotesDateTime = ndt
	End FUNCTION

END CLASS

PUBLIC CLASS XSD_DATETIME_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_DATETIME

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_TIME AS XSD_SIMPLETYPE

	SUB SetValueFromNotesDateTime (value As NotesDateTime)  'deprecated
		Dim xdtc As New XSD_DATATYPE_CONVERTER
		CALL ME.setValueFromString (xdtc.getXSDTime (value))
	End SUB

	Sub SetValueWithZoneFromNotesDateTime (value As NotesDateTime)
		Dim xdtc As New XSD_DATATYPE_CONVERTER
		Call Me.setValueFromString (xdtc.getXSDZoneTime (value) & xdtc.getXSDZone(value))
	End Sub	
	
	Function GetValueAsNotesDateTime ( ) As NotesDateTime
		Dim xdtc As New XSD_DATATYPE_CONVERTER
		Dim ndt As New NotesDateTime ("")
		Call xdtc.setXSDTime (ndt, ME.getValueAsString)
		set GetValueAsNotesDateTime = ndt
	End FUNCTION

END CLASS

PUBLIC CLASS XSD_TIME_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_TIME

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_DATE AS XSD_SIMPLETYPE

	SUB SetValueFromNotesDateTime (value As NotesDateTime)  'deprecated
		Dim xdtc As New XSD_DATATYPE_CONVERTER
		CALL ME.setValueFromString (xdtc.getXSDDate (value))
	End SUB

	Sub SetValueWithZoneFromNotesDateTime (value As NotesDateTime)
		Dim xdtc As New XSD_DATATYPE_CONVERTER
		Call Me.setValueFromString (xdtc.getXSDZoneDate (value) & xdtc.getXSDZone(value))
	End Sub	

	Function GetValueAsNotesDateTime ( ) As NotesDateTime
		Dim xdtc As New XSD_DATATYPE_CONVERTER
		Dim ndt As New NotesDateTime ("")
		Call xdtc.setXSDDate (ndt, ME.getValueAsString)
		set GetValueAsNotesDateTime = ndt
	End FUNCTION

END CLASS

PUBLIC CLASS XSD_DATE_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_DATE

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_GYEARMONTH AS XSD_SIMPLETYPE
END CLASS

PUBLIC CLASS XSD_GYEARMONTH_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_GYEARMONTH

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_GYEAR AS XSD_SIMPLETYPE
END CLASS

PUBLIC CLASS XSD_GYEAR_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_GYEAR

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_GMONTHDAY AS XSD_SIMPLETYPE
END CLASS

PUBLIC CLASS XSD_GMONTHDAY_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_GMONTHDAY

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_GDAY AS XSD_SIMPLETYPE
END CLASS

PUBLIC CLASS XSD_GDAY_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_GDAY

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_GMONTH AS XSD_SIMPLETYPE
END CLASS

PUBLIC CLASS XSD_GMONTH_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_GMONTH

END CLASS


'--------------------------------------------------------------------
'--------------------------------------------------------------------
' TYPES DERIVED FROM XSD_STRING
'--------------------------------------------------------------------
'--------------------------------------------------------------------

PUBLIC CLASS XSD_NORMALIZEDSTRING AS XSD_STRING
END CLASS

PUBLIC CLASS XSD_NORMALIZEDSTRING_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_NORMALIZEDSTRING

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_TOKEN AS XSD_NORMALIZEDSTRING
END CLASS

PUBLIC CLASS XSD_TOKEN_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_TOKEN

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_LANGUAGE AS XSD_TOKEN
END CLASS

PUBLIC CLASS XSD_LANGUAGE_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_LANGUAGE

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_NAME AS XSD_TOKEN
END CLASS

PUBLIC CLASS XSD_NAME_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_NAME

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_NCNAME AS XSD_NAME
END CLASS

PUBLIC CLASS XSD_NCNAME_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_NCNAME

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_ID AS XSD_NCNAME
END CLASS

PUBLIC CLASS XSD_ID_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_ID

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_IDREF AS XSD_NCNAME
END CLASS

PUBLIC CLASS XSD_IDREF_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_IDREF

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_IDREFS AS XSD_LIST

	PUBLIC theList () As XSD_IDREF
	PRIVATE initialized As BOOLEAN

	SUB initListItem (idx As INTEGER)
		if theList(idx) IS NOTHING THEN set theList(idx) = new XSD_IDREF
	END SUB

	SUB setListValueFromString (idx As INTEGER, value As STRING)
		IF idx < 0 THEN ERROR ErrArgOutOfRange
		IF NOT initialized THEN
			REDIM theList (0 TO idx)
			initialized = TRUE
		ELSE
			IF idx > UBOUND(theList) THEN REDIM PRESERVE theList (0 TO idx)
		END IF
		CALL initListItem(idx)
		CALL theList(idx).setValueFromString (value)
	END SUB

	FUNCTION getListValueAsString (idx As INTEGER) As STRING
		IF NOT initialized THEN ERROR ErrArgOutOfRange
		CALL initListItem(idx)
		getListValueAsString = theList(idx).getValueAsString
	END FUNCTION

	FUNCTION getListLength () As INTEGER
		IF NOT initialized THEN
			getListLength = 0
		ELSE
			getListLength = UBOUND(theList)+1
		END IF
	END FUNCTION

END CLASS

PUBLIC CLASS XSD_IDREFS_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_IDREFS

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_ENTITY AS XSD_NCNAME
END CLASS

PUBLIC CLASS XSD_ENTITY_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_ENTITY

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_ENTITIES AS XSD_LIST

	PUBLIC theList () As XSD_ENTITY
	PRIVATE initialized As BOOLEAN

	SUB initListItem (idx As INTEGER)
		if theList(idx) IS NOTHING THEN set theList(idx) = new XSD_ENTITY
	END SUB

	SUB setListValueFromString (idx As INTEGER, value As STRING)
		IF idx < 0 THEN ERROR ErrArgOutOfRange
		IF NOT initialized THEN
			REDIM theList (0 TO idx)
			initialized = TRUE
		ELSE
			IF idx > UBOUND(theList) THEN REDIM PRESERVE theList (0 TO idx)
		END IF
		CALL initListItem(idx)
		CALL theList(idx).setValueFromString (value)
	END SUB

	FUNCTION getListValueAsString (idx As INTEGER) As STRING
		IF NOT initialized THEN ERROR ErrArgOutOfRange
		CALL initListItem(idx)
		getListValueAsString = theList(idx).getValueAsString
	END FUNCTION

	FUNCTION getListLength () As INTEGER
		IF NOT initialized THEN
			getListLength = 0
		ELSE
			getListLength = UBOUND(theList)+1
		END IF
	END FUNCTION

END CLASS

PUBLIC CLASS XSD_ENTITIES_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_ENTITIES

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_NMTOKEN AS XSD_TOKEN
END CLASS

PUBLIC CLASS XSD_NMTOKEN_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_NMTOKEN

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_NMTOKENS AS XSD_LIST

	PUBLIC theList () As XSD_NMTOKEN
	PRIVATE initialized As BOOLEAN

	SUB initListItem (idx As INTEGER)
		if theList(idx) IS NOTHING THEN set theList(idx) = new XSD_NMTOKEN
	END SUB

	SUB setListValueFromString (idx As INTEGER, value As STRING)
		IF idx < 0 THEN ERROR ErrArgOutOfRange
		IF NOT initialized THEN
			REDIM theList (0 TO idx)
			initialized = TRUE
		ELSE
			IF idx > UBOUND(theList) THEN REDIM PRESERVE theList (0 TO idx)
		END IF
		CALL initListItem(idx)
		CALL theList(idx).setValueFromString (value)
	END SUB

	FUNCTION getListValueAsString (idx As INTEGER) As STRING
		IF NOT initialized THEN ERROR ErrArgOutOfRange
		CALL initListItem(idx)
		getListValueAsString = theList(idx).getValueAsString
	END FUNCTION

	FUNCTION getListLength () As INTEGER
		IF NOT initialized THEN
			getListLength = 0
		ELSE
			getListLength = UBOUND(theList)+1
		END IF
	END FUNCTION

END CLASS

PUBLIC CLASS XSD_NMTOKENS_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_NMTOKENS

END CLASS

'--------------------------------------------------------------------
'--------------------------------------------------------------------
' TYPES DERIVED FROM XSD_DECIMAL
'--------------------------------------------------------------------
'--------------------------------------------------------------------

PUBLIC CLASS XSD_INTEGER AS XSD_DECIMAL
END CLASS

PUBLIC CLASS XSD_INTEGER_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_INTEGER

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_NONPOSITIVEINTEGER AS XSD_INTEGER
END CLASS

PUBLIC CLASS XSD_NONPOSITIVEINTEGER_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_NONPOSITIVEINTEGER

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_NEGATIVEINTEGER AS XSD_NONPOSITIVEINTEGER
END CLASS

PUBLIC CLASS XSD_NEGATIVEINTEGER_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_NEGATIVEINTEGER

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_LONG AS XSD_INTEGER
END CLASS

PUBLIC CLASS XSD_LONG_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_LONG

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_INT AS XSD_LONG
END CLASS

PUBLIC CLASS XSD_INT_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_INT

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_SHORT AS XSD_INT
END CLASS

PUBLIC CLASS XSD_SHORT_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_SHORT

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_BYTE AS XSD_SHORT
END CLASS

PUBLIC CLASS XSD_BYTE_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_BYTE

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_NONNEGATIVEINTEGER AS XSD_INTEGER
END CLASS

PUBLIC CLASS XSD_NONNEGATIVEINTEGER_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_NONNEGATIVEINTEGER

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_UNSIGNEDLONG AS XSD_NONNEGATIVEINTEGER
END CLASS

PUBLIC CLASS XSD_UNSIGNEDLONG_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_UNSIGNEDLONG

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_UNSIGNEDINT AS XSD_UNSIGNEDLONG
END CLASS

PUBLIC CLASS XSD_UNSIGNEDINT_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_UNSIGNEDINT

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_UNSIGNEDSHORT AS XSD_UNSIGNEDINT
END CLASS

PUBLIC CLASS XSD_UNSIGNEDSHORT_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_UNSIGNEDSHORT

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_UNSIGNEDBYTE AS XSD_UNSIGNEDSHORT
END CLASS

PUBLIC CLASS XSD_UNSIGNEDBYTE_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_UNSIGNEDBYTE

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS XSD_POSITIVEINTEGER AS XSD_NONNEGATIVEINTEGER
END CLASS

PUBLIC CLASS XSD_POSITIVEINTEGER_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS XSD_POSITIVEINTEGER

END CLASS

'--------------------------------------------------------------------
'--------------------------------------------------------------------
' HOLDER TYPES FOR LOTUSSCRIPT BUILT-IN TYPES
'--------------------------------------------------------------------
'--------------------------------------------------------------------

PUBLIC CLASS BOOLEAN_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS BOOLEAN

END CLASS

PUBLIC CLASS BOOLEANARRAY_HOLDER AS INOUT_HOLDER

	PUBLIC Value() AS BOOLEAN

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS BYTE_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS BYTE

END CLASS

PUBLIC CLASS BYTEARRAY_HOLDER AS INOUT_HOLDER

	PUBLIC Value() AS BYTE

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS CURRENCY_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS CURRENCY

END CLASS

PUBLIC CLASS CURRENCYARRAY_HOLDER AS INOUT_HOLDER

	PUBLIC Value() AS CURRENCY

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS DOUBLE_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS DOUBLE

END CLASS

PUBLIC CLASS DOUBLEARRAY_HOLDER AS INOUT_HOLDER

	PUBLIC Value() AS DOUBLE

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS INTEGER_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS INTEGER

END CLASS

PUBLIC CLASS INTEGERARRAY_HOLDER AS INOUT_HOLDER

	PUBLIC Value() AS INTEGER

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS LONG_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS LONG

END CLASS

PUBLIC CLASS LONGARRAY_HOLDER AS INOUT_HOLDER

	PUBLIC Value() AS LONG

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS SINGLE_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS SINGLE

END CLASS

PUBLIC CLASS SINGLEARRAY_HOLDER AS INOUT_HOLDER

	PUBLIC Value() AS SINGLE

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS STRING_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS STRING

END CLASS

PUBLIC CLASS STRINGARRAY_HOLDER AS INOUT_HOLDER

	PUBLIC Value() AS STRING

END CLASS

'--------------------------------------------------------------------

PUBLIC CLASS VARIANT_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS VARIANT

END CLASS

PUBLIC CLASS VARIANTARRAY_HOLDER AS INOUT_HOLDER

	PUBLIC Value() AS VARIANT

END CLASS

'--------------------------------------------------------------------
'--------------------------------------------------------------------
' HOLDER TYPES FOR LOTUSSCRIPT BACKEND CLASSES
'--------------------------------------------------------------------
'--------------------------------------------------------------------
PUBLIC CLASS NOTESDOMELEMENTNODE_HOLDER AS INOUT_HOLDER

	PUBLIC Value AS NOTESDOMELEMENTNODE

END CLASS

PUBLIC CLASS NOTESDOMELEMENTNODEARRAY_HOLDER AS INOUT_HOLDER

	PUBLIC Value() AS NOTESDOMELEMENTNODE

END CLASS


'--------------------------------------------------------------------
'--------------------------------------------------------------------
' ROOT FAULT CLASS
'--------------------------------------------------------------------
'--------------------------------------------------------------------

PUBLIC CLASS WS_FAULT

	PRIVATE Fault As BOOLEAN
	PRIVATE FaultString As STRING
	PRIVATE FaultCode As STRING
	PRIVATE FaultActor As STRING
	PRIVATE FaultDetails() As NOTESDOMELEMENTNODE

	SUB setFault (value As BOOLEAN)
		Fault = value
	END SUB

	FUNCTION getFault () As BOOLEAN
		getFault = Fault
	END FUNCTION

	SUB setFaultString (value As STRING)
		FaultString = value
	END SUB

	FUNCTION getFaultString () As STRING
		getFaultString = FaultString
	END FUNCTION

	SUB setFaultCode (value As STRING)
		FaultCode = value
	END SUB

	FUNCTION getFaultCode () As STRING
		Dim ret As String
		' remove any namespace prefix		
		ret = Strright(FaultCode, ":")
		If Len(ret) < 1 Then
			ret = FaultCode
		End If
		getFaultCode = ret	
	END FUNCTION

	SUB setFaultActor (value As STRING)
		FaultActor = value
	END SUB

	FUNCTION getFaultActor () As STRING
		getFaultActor = FaultActor
	END FUNCTION

	SUB setFaultDetails (value() As NOTESDOMELEMENTNODE)
		On Error GoTo NoOp
		Dim l as Integer
		Dim u as Integer
		l = LBound(value)
		u = UBound(value)
		ReDim FaultDetails(l to u) as NOTESDOMELEMENTNODE
		While (l <= u)
			Set FaultDetails(l) = value(l)
			l = l + 1
		Wend
		Exit Sub
NoOp:
	END SUB

	FUNCTION getFaultDetails () As NOTESDOMELEMENTNODEARRAY_HOLDER
		On Error GoTo NoOp
		Dim AH as New NOTESDOMELEMENTNODEARRAY_HOLDER
		Dim l as Integer
		Dim u as Integer
		l = LBound(FaultDetails)
		u = UBound(FaultDetails)
		ReDim AH.value(l to u) as NOTESDOMELEMENTNODE
		While (l <= u)
			Set AH.value(l) = FaultDetails(l)
			l = l + 1
		Wend
		Set getFaultDetails = AH
		Exit Function
NoOp:
	END FUNCTION

	SUB NEW
		ReDim FaultDetails(0) As NOTESDOMELEMENTNODE 'guarantee a Nothing element
	END SUB

END CLASS

'-----------------------------------------------------------------------------
'-----------------------------------------------------------------------------
' BASE TYPE FOR WEB SERVICE ENABLED LOTUSSCRIPT SCRIPT LIBRARY PORTTYPE CLASS
'-----------------------------------------------------------------------------
'-----------------------------------------------------------------------------
%If WEB_SERVICE_CONSUMER_SCRIPTLIB
Public Class PortTypeBase

	Private Service as NotesWebServiceEngine
	Private NoFault as WS_FAULT

	Public Sub New()
		set Service = new NotesWebServiceEngine
		set NoFault = new WS_FAULT
	End Sub

	Public Sub SetEndpoint(url as String)
		call Service.SetEndpoint(url)
	End Sub

	Public Function GetEndpoint() As String
		GetEndpoint = Service.GetEndpoint()
	End Function

	Public Function GetLastFault() As WS_FAULT
		Set GetLastFault = Service.GetLastFault
		if (GetLastFault is nothing) then
			set GetLastFault = NoFault
		End if
	End Function

	Public Sub SetTimeout(ms as Long)
		call Service.SetTimeout(ms)
	End Sub

	Public Function GetTimeout() As Long
		GetTimeout = Service.GetTimeout()
	End Function

	Public Sub SetCredentials(username As String, password As String)
		call Service.SetCredentials(username, password)
	End Sub

	Public Sub SetSSLOptions(Opt as Long)
		call Service.SetSSLOptions(Opt)
	End Sub

	Public Function GetSSLOptions() As Long
		GetSSLOptions = Service.GetSSLOptions()
	End Function

End Class
%End If

Public Const NOTES_SSL_LOCATION				= 0

' SSL Options - To combine options add values
Public Const NOTES_SSL_ACCEPT_SITE_CERTS 	= 1
Public Const NOTES_SSL_ACCEPT_EXPIRED_CERTS	= 2
Public Const NOTES_SSL_SEND_CLIENT_CERT		= 4

' SSL Version - Select one
Public Const NOTES_SSL_V20_ONLY				= 1 + 65536
Public Const NOTES_SSL_V30_HELLO			= 2 + 65536
Public Const NOTES_SSL_V30_ONLY				= 3 + 65536
Public Const NOTES_SSL_V30_WITH_V20_HELLO	= 4 + 65536
Public Const NOTES_SSL_NEGOTIATED			= 5 + 65536

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值