External Groupware Provider API
In order to support an external groupware scheduling application, the following must be true:
- The existing Crestron Fusion® software Schedule and Groupware Services have undergone some code changes to support niche external groupware scheduling applications.
- You must create a new External Web Service, based on the Crestron provided sample External Web Service. This service need not be written with .NET, neither does it require access to the Crestron Fusion and RoomView Database. It is not required that this service run on the same network as Crestron Fusion and RoomView® software. In fact it must be able to run outside of the enterprise network where Crestron Fusion and RoomView is running. On an external network it will be subject to the firewall restrictions of that network.
- The Unsupported Groupware Application must be available via the External Groupware Provider. The Unsupported Groupware Application can be any third‑party application providing scheduling information (such as PeopleCube). The Unsupported Groupware Application must only be accessible via the External Groupware Provider. Crestron Fusion and RoomView will not communicate directly with it.
NOTE: The sample External Web Service is placed in C:\Program Files\Crestron\RoomViewSE\Samples\ExternalWebService_Samples.zip when Crestron Fusion is installed.
Work Flow Diagram
The following diagram provides an overview of the interactions between Crestron Fusion/RoomView, the External Web Service, and the Unsupported Groupware Application.
Functional Requirements
The function of the External Groupware Provider is to implement each of the following virtual functions and translate the calls into Crestron Fusion and RoomView agnostic calls to the External Web Service:
NOTE: This assumes that the primitive types of bool, string, float, and int listed are available to all platforms on which the External Web Service might run.
- bool RoomHasEmailAddress
- bool CheckEmailConfiguration(ref Result rResult)
- Appointment[] GetApptByDay(DateTime dtStart, float fHours, bool bCheckLDAP, string strReqID)
- Appointment GetApptInfo(string strRVMtgID, string strGWMtgID, string strAltID, Appointment.Slice eSlice)
- void UpdateAppointment(Appointment UpdAppt)
- bool DeleteMeeting(string FileName, string strUserName, string strPassword, string strDomain)
- bool MakeGroupwareAppointment(Appointment NewAppt, ref Result rResult)
- string GetMeetingFileName(bool bRecurring, string MeetingID, string strAltID)
- void CheckEmails(DateTime dtLastRoomCheck, string strRoomID, string strConnectionInfo, string strUserName, string strPassword,
- bool ValidateURL(string strURL, string strUsername, string strPassword, string strDomain, ref string strResult)
- bool ValidateEmailAccess(string strURL, string strSMTPAddress, string strUsername, string strPassword, string strDomain, ref Result rResult)
- bool ValidateEmailAccess(ref Result rResult)
- Appointment[] GetItemInfo(BaseNotification Note, bool bUseLookaside, bool bDump, out int iDuration)
- string GetConnectionInfo(string strSMTPAddress)
One of the major functions of the External Groupware Provider is to translate the Appointment object into its Crestron Fusion and RoomView agnostic counterpart, API_Appointment, as well as a counterpart to the Result object, called API_Result. It will also massage any DateTime structs into RFC 3339 formatted strings. Therefore, the functions will be transformed into the forms shown below. The function signatures below can be considered as the interface which the External Web Service must implement.
NOTE: Each signature is followed by a proposed generic REST URI and an example REST URI.
- bool RoomHasEmailAddress
- bool CheckEmailConfiguration(ref API_Result rResult)
- bool GetApptByDay(string strStart, float fHours, bool bCheckLDAP, string strReqID, out API_Appointment[] Appointments, out API_Result rResult)
This function will always return false, thus it need not be implemented by the External Web Service.
This will always return true, thus it need not be implemented by the External Web Service.
The strStart is an RFC 3339 date and time string. The Appointments output array will contain an empty array or null if no appointments are to be found in the time range specified. The External Groupware Provider must enrich the returned array by inserting the appropriate Crestron Fusion and RoomView meeting GUID into each appointment and/or adding it to the database if it is new. The string will take the following forms:
GET frvxws/appointments/calendar?start=date-time&hours=fff&reqid=xxxxxx
GET frvxws/appointments/Room101?start=2011-12-30T12:00-5:00&hours=2.5&reqid=User001
NOTE: This string indicates what the virtual directory is when the External Web Service is installed. This is set by a config value, with a default value of frvxws.
- bool GetApptInfo(string strGWMtgID, string strAltID, out API_Appointment Appt, out API_Result rResult)
This will return the single appointment, matching either the strGWMtgID or the strAltID. Most Unsupported Groupware Applications will probably only require the former item, but the strAltID is available for use if needed. The returned appointment is enriched by the External Groupware Provider by inserting the appropriate Crestron Fusion/RoomView meeting GUID into the appointment and/or adding it to the database if it is new. The string will take the following forms:
GET frvxws/appointments/calendar/gwid
GET frvxws/appointments/Room101/EEHC7YHDL123RTX
- bool UpdateAppointment(API_Appointment UpdAppt, out API_Result rResult)
This updates the appointment in the Unsupported Groupware Application from the contents of the provided UpdAppt. It is up to the implementation of the External Web Service to determine how it applies the changes, but it should assume that the provided appointment object is complete (for example, it contains all fields, not just the ones which are to be updated). The string will take the following forms:
PUT frvxws/appointments/calendar/gwid
PUT frvxws/appointments/Room101/EEHC7YHDL123RTX
- bool DeleteMeeting(string GWMeetingID, string AltID, out API_Result rResult)
This removes a meeting from the Unsupported Groupware Application. AltID is an optional second identifier that can be used by the External Web Service if the Unsupported Group Application needs more information. The string takes the following forms:
DELETE frvxws/appointments/calendar/gwid
DELETE frvxws/appointments/Room101/EEHC7YHDL123RTX
- bool MakeGroupwareAppointment(API_Appointment NewAppt, out API_Result rResult)
This creates an appointment in the Unsupported Group Application. The string takes the following forms:
POST frvxws/appointments/calendar
POST frvxws/appointments/Room101
- string GetMeetingFileName(bool bRecurring, string MeetingID, string strAltID)
This function should return the MeetingID string. Therefore, it most likely will not need to be implemented by the External Web Service. The string takes the following forms:
GET frvxws/filename/calendar/gwid
GET frvxws/filename/Room101/EEHC7YHDL123RTX
- void CheckEmails(DateTime dtLastRoomCheck, string strRoomID, string strConnectionInfo, string strUserName, string strPassword, string strDomain, bool bSendMeetingInvite)
Since this is a Crestron Fusion and RoomView specific function, it should be implemented mostly by the External Groupware Provider, and use the GetApptByDay function call to the External Web Service to get the actual new appointments instead of being implemented in the External Web Service.
- bool ValidateURL(string strURL, string strUsername, string strPassword, string strDomain, ref string strResult)
This function is deprecated and will not be implemented in the External Web Service.
- bool ValidateEmailAccess(string strURL, string strSMTPAddress, string strUsername, string strPassword, string strDomain, ref Result rResult)
This function will be implemented by calling its simpler overload below. It is not to be implemented by the External Web Service.
- bool ValidateEmailAccess(string strCalendarAddress, ref API_Result rResult)
This returns true if the authorization credentials supplied on the call are valid for the indicated calendar address, such as an SMTP address. The string takes the following forms:
GET frvxws/check/calendar
GET FRVxws/check/Room101
- Appointment[] GetItemInfo(BaseNotification Note, bool bUseLookaside, bool bDump, out int iDuration)
Since this is only used for push notifications, it will not be implemented in the External Web Service.
- string GetConnectionInfo(string strSMTPAddress)
Since this is only used for push notifications, it will not be implemented in the External Web Service.