1 General Overview

The document provides an explanation and description of each of the exposed functions available in OHCWebServices and is used as the Technical Reference by third-party vendors who wish to develop and integrate their applications with the Oracle Hospitality Cruise Shipboard Property Management System (SPMS).

All of the web messages used here are based on:

  • Extensible Markup Language (XML) format,

  • JavaScript Object Notation (JSON) or

  • JSON with Padding (JSONP).

The examples provided here are based on Microsoft Visual Studio 2008. Accessing the web service through other programming language is possible and at your disposition. Oracle Hospitality Cruise will not provide any assistance on this.

Handling for JSON Format

Date Type Handling
  • All JSON date type must be passed in as JSON string in “YYYYMMDDHHMMSS” format. For example, 2011-01-14 3:14PM should be passed in as “20110114151400”.

Object Type Handling
  • All JSON object must be passed in as serialized JSON string.

Byte Array Handling

  • All JSON ByteArray must passed in as base64 serialized JSON string.

Passing Date Variable using XML format

By default, the XML Serialized Date is a format that includes time zone information. For example, if the server is in Florida (GMT-5) and the caller is in Malaysia (GMT+8), the value passed to web service is shown as:

2011-12-11T04:30:38.0946974+08:00

The server then de-serializes the date to “2011-12-10 3:30pm” as the server in Florida is 13 hours behind the caller in Malaysia.

If you want to preserve the date and time, you must make sure the XML Serialized Date format excludes the time zone info as shown below:

2011-12-11T04:30:38.0946974

Method to Handle Date Passing between different Time Zones

For a dataset, the method shown below ensures that the date/time remains the same between different time zones.

For Each oTable In oResponse.oDataSet.Tables
  For nX = 0 To oTable.Columns.Count - 1
    If oTable.Columns(nX).DataType.ToString = "System.DateTime" Then
      oTable.Columns(nX).DateTimeMode =DataSetDateTime.Unspecified
   End If
  Next
Next

Shown below is the code used to ensure the date field will be serialized without a time zone. This function does not support properties with an additional parameter, it also does not support multi-dimension array.

Private Sub RemoveTimeZone(ByVal poObject As Object)
  Dim oType As System.Reflection.PropertyInfo
  Dim oField As System.Reflection.FieldInfo
  
  For Each oType In poObject.GetType.GetProperties
  Try
    If oType.PropertyType.IsArray Then
      Call RemoveArrayTimeZone(oType.GetValue(poObject, New Object() {}))
    ElseIf oType.PropertyType.Name = "DateTime" Then
      oType.SetValue(poObject, _
                     DateTime.SpecifyKind(oType.GetValue(poObject, _
                                                  New Object() {}), _
                     DateTimeKind.Unspecified), _
                     New Object() {})
   End If
   Catch ex As Exception
   End Try
 Next
 For Each oField In poObject.GetType.GetFields
   Try
     If oField.FieldType.IsArray Then
       Call RemoveArrayTimeZone(oField.GetValue(poObject))
     ElseIf oField.FieldType.Name = "DateTime" Then
       oField.SetValue(poObject, _
                      DateTime.SpecifyKind(oField.GetValue(poObject), _
                       DateTimeKind.Unspecified))
     End If
   Catch ex As Exception
   End Try
 Next
End Sub

Private Sub RemoveArrayTimeZone(ByVal poObject As Object)
  Dim nX As Integer
  If poObject(0).GetType.ToString = "DateTime" Then
    For nX = 0 To poObject.Length - 1
      poObject(nX) = DateTime.SpecifyKind(poObject(nX), _
                                 DateTimeKind.Unspecified)
    Next
  ElseIf poObject(0).GetType.IsClass = True Then
    For nX = 0 To poObject.Length - 1
      Call RemoveTimeZone(poObject(nX))
    Next
  End If
End Sub
Shown below is the code used for normal date variable.
Dim gdCheckOpenDateTime As Date
gdCheckOpenDateTime = DateTime.SpecifyKind(Now(), _ 
                                           DateTimeKind.Unspecified)

Connecting to OHC Web Services using Microsoft .NET

The Microsoft IIS is used to host the SOAP Web Service. Thus this document assumes that the reader is familiar with accessing the SOAP Web Service function.

How to use OHCWebServices with Microsoft .NET

  1. Add a Web Reference for Web Service in your application. For example, named web reference as FidelioSPMSWS.

  2. Add a variable reference to the Web Service reference like Public goWs As New FidelioSPMSWS FidelioSPMSWSSoapClient

  3. With the above in place, you can then call the available web methods. For example:

    1. goWs.FidelioSPMSWSJsonGet().

    2. goWs.FidelioSPMSWSJsonPost().

    3. goWs.FidelioSPMSWSXML().

Recommended EndPoint Setting

This section describes the recommended EndPoint setting for the application.

Configure the EndPoint in App.Config

Use Notepad to open the App.Config file and edit the address to the correct IP Address of the web server.

<client>
  <endpoint address=http://localhost:50844/OHCWebServices/OHCWebServices.asmx
            binding="basicHttpBinding"
            bindingConfiguration="FidelioSPMSWSSoap"
            contract="FidelioSPMSWS.FidelioSPMSWSSoap" 
            name="FidelioSPMSWSSoap" />
</client>

Below is the recommended setting

<bindings>
  <basicHttpBinding>
    <binding name="FidelioSPMSWSSoap" 
             closeTimeout="00:01:00"
             openTimeout="00:01:00"
             receiveTimeout="00:10:00"
             sendTimeout="00:01:00"
             allowCookies="false"
             bypassProxyOnLocal="false"
             hostNameComparisonMode="StrongWildcard"
             maxBufferSize="10000000"
             maxBufferPoolSize="524288"
             maxReceivedMessageSize="10000000"
             messageEncoding="Text" 
             textEncoding="utf-8"
             transferMode="Buffered" 
             useDefaultWebProxy="true">
      <readerQuotas maxDepth="32" 
                    maxStringContentLength="1000000" 
                    maxArrayLength="16384" 
                    maxBytesPerRead="4096" 
                    maxNameTableCharCount="16384" />
    </binding>
  </basicHttpBinding>
</bindings>