add unfinished services proposal

This commit is contained in:
Miles Lott 2001-09-14 20:21:06 +00:00
parent 6fb62e52b3
commit ad362668ed
6 changed files with 1469 additions and 0 deletions

Binary file not shown.

View File

@ -0,0 +1,403 @@
#LyX 1.1 created this file. For more info see http://www.lyx.org/
\lyxformat 218
\textclass docbook
\language english
\inputencoding auto
\fontscheme default
\graphics default
\paperfontsize default
\spacing single
\papersize Default
\paperpackage a4
\use_geometry 0
\use_amsmath 0
\paperorientation portrait
\secnumdepth 3
\tocdepth 3
\paragraph_separation indent
\defskip medskip
\quotes_language english
\quotes_times 2
\papercolumns 1
\papersides 1
\paperpagestyle default
\layout Title
Proposal for a Common Groupware Interface Standard
\layout Author
by Miles Lott <milosch@phpgroupware.org>
\layout Date
September 13, 2001
\layout Standard
\begin_inset LatexCommand \tableofcontents{}
\end_inset
\layout Section
Scope
\layout Standard
As many different opensource and freesoftware groupware systems are being
developed, the full realization of the dream of a connected world should
be prefaced by an agreement to interoperate.
There are limited ways in which cooperation with these and commercial groupware
systems may be achecived, the majority if not all of which were derived
via the establishment of open standards.
These might include email (POP3/IMAP), contacts(LDAP,vcard), or scheduling(ical
/vcal).
It is felt that while these have proven themselves to be very useful, they
are insufficient to satisfy the real needs of a typical business environment.
\layout Standard
This document hopes to provide a reasonable, if limited, recommendation
for a set of standardized methods to be used for groupware services interaction.
More specifically, it hopes to address the need for such a standard as
well as to spur discussion about the common service names and methods themselve
s.
\layout Standard
Examples will be given for implementations in XML-RPC, since this standard
is relatively fixed and open.
\layout Standard
This document does not provide recommendations for the underlying access
control system which would allow or deny a particular action.
\layout Standard
Also not discussed here is login and authorization to be used for initial
access to a service provider.
\layout Section
The Services
\layout Subsection
Overview
\layout Standard
There are a few common services types that will be needed for minimum useability
of a groupware server or application.
They are:
\layout Itemize
Contacts
\layout Itemize
Schedule
\layout Itemize
Notes
\layout Itemize
Todo
\layout Standard
These services are represented already in places such as existing groupware
client-server applications and also in the PalmOS basic-4 buttons and applicati
ons.
Different systems may have different names for these services internally,
e.g.
Contacts - addresses, addressbook, people, Schedule - calendar, agenda,
meetings.
\layout Standard
Within each of these services are some common methods that would be called
to store, retreive, or update data:
\layout Itemize
read_list
\layout Itemize
read
\layout Itemize
save
\layout Itemize
delete
\layout Subsection
Detail
\layout Subsubsection
Contacts
\layout Standard
The concept of contacts may encompass local addressbooks, LDAP, and lists
stored in other media.
The purpose of the contacts service is not to duplicate or attempt to replace
these.
In some respects, it might do just that.
But its goal is more so to provide a common and shareable way for the other
core services to create, edit, and read a common user and address list.
All of the other services may use the contact service to obtain record
owner information to be used in access control.
They would also use them when it is required to share this data, as with
a meeting where other local and non-local users will be invited to attend.
\layout Standard
Contacts may include the local installed user base, users on other cooperative
servers, or email addresses used for limited cooperation with other groupware
services that are not compliant with this service scheme or implementations
thereof.
It could also include individuals using web-based or local ISP email services.
The scope of this document, however, is to define the service with regard
to the common methods to be used for server-server and client-server communicat
ions:
\layout Itemize
read_list
\layout Standard
This method is used to list contacts, with or without limits, filters, or
search criteria.
In this way it can be used for simple lists or to search for contact records
and their identifiers.
The optional search criteria includes:
\layout Enumerate
start - Start at this identifier (integer: default 0)
\layout Enumerate
limit - Limit to this number of records returned(integer: unlimited by default)
\layout Enumerate
fieldlist - limit to showing only these fields (array: default to identifier,
owner identifier, possibly firstname and lastname)
\layout Enumerate
filter - Show records that are public or private only, or other system-specific
filters, e.g group or company(string: default '')
\layout Enumerate
query - Search internal fieldlist for a value (string: default '')
\layout Standard
The return for this method includes:
\layout Enumerate
count of number of records returned(integer)
\layout Enumerate
array consisting of: array: identifier => (array: fieldlist key => value
pairs)
\layout Itemize
read
\layout Standard
Once the identifier for a single contact record is known, the contact may
be read for more detail using this method.
This takes two parameters:
\layout Enumerate
identifier - (integer: no default)
\layout Enumerate
fieldlist - limit to showing only these fields (array: default to identifier,
owner identifier, possibly firstname and lastname)
\layout Standard
And returns:
\layout Enumerate
array consisting of: array: identifier => (array: fieldlist key => value
pairs)
\layout Itemize
save
\layout Standard
This is a method used to save an existing record or create a new one.
If the identifier for an existing record is not passed, a new entry will
be created.
\layout Itemize
delete
\layout Standard
This will allow deletion of a record by passing its identifier.
\layout Subsubsection
Schedule
\layout Subsubsection
Notes
\layout Subsubsection
Todo
\layout Subsection
Examples in XML-RPC
\layout Standard
Query the contacts service for read_list, using only start and limit to
grab the first 5 records, starting with identifier 1.
Additionally, return only the firstname and lastname fields n_given and
n_family (firstname and lastname in pseudo vcard format):
\layout Code
<methodCall>
\layout Code
<methodName>service.contacts.read_list</methodName>
\layout Code
<params>
\layout Code
<param>
\layout Code
<value><struct>
\layout Code
<member><name>start</name>
\layout Code
<value><string>1</string></value>
\layout Code
</member>
\layout Code
<member><name>limit</name>
\layout Code
<value><string>5</string></value>
\layout Code
</member>
\layout Code
<member><name>fields</name>
\layout Code
<value><struct>
\layout Code
<member><name>n_given</name>
\layout Code
<value><string>n_given</string></value>
\layout Code
</member>
\layout Code
<member><name>n_family</name>
\layout Code
<value><string>n_family</string></value>
\layout Code
</member>
\layout Code
</struct></value>
\layout Code
</member>
\layout Code
<member><name>query</name>
\layout Code
<value><string></string></value>
\layout Code
</member>
\layout Code
<member><name>filter</name>
\layout Code
<value><string></string></value>
\layout Code
</member>
\layout Code
</struct></value>
\layout Code
</param>
\layout Code
</params>
\layout Code
</methodCall>
\layout Section
Conclusion
\layout Standard
This document outlined the following services and methods:
\layout Subsection
Contacts:
\layout Itemize
service.contacts.read_list([search criteria])
\layout Itemize
service.contacts.read(identifier,[fieldlist])
\layout Itemize
service.contacts.save(fields)
\layout Itemize
service.contacts.delete(identifier)
\layout Subsection
Schedule:
\layout Itemize
service.schedule.read_list([search criteria])
\layout Itemize
service.schedule.read(identifier,[fieldlist])
\layout Itemize
service.schedule.save(fields)
\layout Itemize
service.schedule.delete(identifier)
\layout Subsection
Notes:
\layout Itemize
service.notes.read_list([search criteria])
\layout Itemize
service.notes.read(identifier,[fieldlist])
\layout Itemize
service.notes.save(fields)
\layout Itemize
service.notes.delete(identifier)
\layout Subsection
Todo:
\layout Itemize
service.todo.read_list(search criteria)
\layout Itemize
service.todo.read(identifer,[fieldlist])
\layout Itemize
service.todo.save(fields)
\layout Itemize
service.todo.delete(identifier)
\the_end

View File

@ -0,0 +1,395 @@
#LyX 1.1 created this file. For more info see http://www.lyx.org/
\lyxformat 218
\textclass docbook
\language english
\inputencoding auto
\fontscheme default
\graphics default
\paperfontsize default
\spacing single
\papersize Default
\paperpackage a4
\use_geometry 0
\use_amsmath 0
\paperorientation portrait
\secnumdepth 3
\tocdepth 3
\paragraph_separation indent
\defskip medskip
\quotes_language english
\quotes_times 2
\papercolumns 1
\papersides 1
\paperpagestyle default
\layout Title
Proposal for a Common Groupware Interface Standard
\layout Author
by Miles Lott <milosch@phpgroupware.org>
\layout Date
September 13, 2001
\layout Section
Scope
\layout Standard
As many different opensource and freesoftware groupware systems are being
developed, the full realization of the dream of a connected world should
be prefaced by an agreement to interoperate.
There are limited ways in which cooperation with these and commercial groupware
systems may be achecived, the majority if not all of which were derived
via the establishment of open standards.
These might include email (POP3/IMAP), contacts(LDAP,vcard), or scheduling(ical
/vcal).
It is felt that while these have proven themselves to be very useful, they
are insufficient to satisfy the real needs of a typical business environment.
\layout Standard
This document hopes to provide a reasonable, if limited, recommendation
for a set of standardized methods to be used for groupware services interaction.
More specifically, it hopes to address the need for such a standard as
well as to spur discussion about the common service names and methods themselve
s.
\layout Standard
Examples will be given for implementations in XML-RPC, since this standard
is relatively fixed and open.
\layout Standard
This document does not provide recommendations for the underlying access
control system which would allow or deny a particular action.
\layout Standard
Also not discussed here is login and authorization to be used for initial
access to a service provider.
\layout Section
The Services
\layout Subsection
Overview
\layout Standard
There are a few common services types that will be needed for minimum useability
of a groupware server or application.
They are:
\layout Itemize
Contacts
\layout Itemize
Schedule
\layout Itemize
Notes
\layout Itemize
Todo
\layout Standard
These services are represented already in places such as existing groupware
client-server applications and also in the PalmOS basic-4 buttons and applicati
ons.
Different systems may have different names for these services internally,
e.g.
Contacts - addresses, addressbook, people, Schedule - calendar, agenda,
meetings.
\layout Standard
Within each of these services are some common methods that would be called
to store, retreive, or update data:
\layout Itemize
read_list
\layout Itemize
read
\layout Itemize
save
\layout Itemize
delete
\layout Subsection
Detail
\layout Subsubsection
Contacts
\layout Standard
The concept of contacts may encompass local addressbooks, LDAP, and lists
stored in other media.
The purpose of the contacts service is not to duplicate or attempt to replace
these.
In some respects, it might do just that.
But its goal is more so to provide a common and shareable way for the other
core services to create, edit, and read a common user and address list.
All of the other services may use the contact service to obtain record
owner information to be used in access control.
They would also use them when it is required to share this data, as with
a meeting where other local and non-local users will be invited to attend.
\layout Standard
Contacts may include the local installed user base, users on other cooperative
servers, or email addresses used for limited cooperation with other groupware
services that are not compliant with this service scheme or implementations
thereof.
It could also include individuals using web-based or local ISP email services.
The scope of this document, however, is to define the service with regard
to the common methods to be used for server-server and client-server communicat
ions:
\layout Itemize
read_list
\layout Standard
This method is used to list contacts, with or without limits, filters, or
search criteria.
In this way it can be used for simple lists or to search for contact records
and their identifiers.
The optional search criteria includes:
\layout Enumerate
start - Start at this identifier (integer: default 0)
\layout Enumerate
limit - Limit to this number of records returned(integer: unlimited by default)
\layout Enumerate
fieldlist - limit to showing only these fields (array: default to identifier,
owner identifier, possibly firstname and lastname)
\layout Enumerate
filter - Show records that are public or private only, or other system-specific
filters, e.g group or company(string: default '')
\layout Enumerate
query - Search internal fieldlist for a value (string: default '')
\layout Standard
The return for this method includes:
\layout Enumerate
count of number of records returned(integer)
\layout Enumerate
array consisting of: array: identifier => (array: fieldlist key => value
pairs)
\layout Itemize
read
\layout Standard
Once the identifier for a single contact record is known, the contact may
be read for more detail using this method.
This takes two parameters:
\layout Enumerate
identifier - (integer: no default)
\layout Enumerate
fieldlist - limit to showing only these fields (array: default to identifier,
owner identifier, possibly firstname and lastname)
\layout Standard
And returns:
\layout Enumerate
array consisting of: array: identifier => (array: fieldlist key => value
pairs)
\layout Itemize
save
\layout Standard
This is a method used to save an existing record or create a new one.
If the identifier for an existing record is not passed, a new entry will
be created.
\layout Itemize
delete
\layout Standard
This will allow deletion of a record by passing its identifier.
\layout Subsubsection
Schedule
\layout Subsubsection
Notes
\layout Subsubsection
Todo
\layout Subsection
Examples in XML-RPC
\layout Standard
Query the contacts service for read_list, using only start and limit to
grab the first 5 records, starting with identifier 1.
Additionally, return only the firstname and lastname fields n_given and
n_family (firstname and lastname in pseudo vcard format):
\layout Code
<methodCall>
\layout Code
<methodName>service.contacts.read_list</methodName>
\layout Code
<params>
\layout Code
<param>
\layout Code
<value><struct>
\layout Code
<member><name>start</name>
\layout Code
<value><string>1</string></value>
\layout Code
</member>
\layout Code
<member><name>limit</name>
\layout Code
<value><string>5</string></value>
\layout Code
</member>
\layout Code
<member><name>fields</name>
\layout Code
<value><struct>
\layout Code
<member><name>n_given</name>
\layout Code
<value><string>n_given</string></value>
\layout Code
</member>
\layout Code
<member><name>n_family</name>
\layout Code
<value><string>n_family</string></value>
\layout Code
</member>
\layout Code
</struct></value>
\layout Code
</member>
\layout Code
<member><name>query</name>
\layout Code
<value><string></string></value>
\layout Code
</member>
\layout Code
<member><name>filter</name>
\layout Code
<value><string></string></value>
\layout Code
</member>
\layout Code
</struct></value>
\layout Code
</param>
\layout Code
</params>
\layout Code
</methodCall>
\layout Section
Conclusion
\layout Standard
This document outlined the following services and methods:
\layout Subsection
Contacts:
\layout Itemize
service.contacts.read_list([search criteria])
\layout Itemize
service.contacts.read(identifier,[fieldlist])
\layout Itemize
service.contacts.save(fields)
\layout Itemize
service.contacts.delete(identifier)
\layout Subsection
Schedule:
\layout Itemize
service.schedule.read_list([search criteria])
\layout Itemize
service.schedule.read(identifier,[fieldlist])
\layout Itemize
service.schedule.save(fields)
\layout Itemize
service.schedule.delete(identifier)
\layout Subsection
Notes:
\layout Itemize
service.notes.read_list([search criteria])
\layout Itemize
service.notes.read(identifier,[fieldlist])
\layout Itemize
service.notes.save(fields)
\layout Itemize
service.notes.delete(identifier)
\layout Subsection
Todo:
\layout Itemize
service.todo.read_list(search criteria)
\layout Itemize
service.todo.read(identifer,[fieldlist])
\layout Itemize
service.todo.save(fields)
\layout Itemize
service.todo.delete(identifier)
\the_end

Binary file not shown.

View File

@ -0,0 +1,394 @@
<!doctype article public "-//OASIS//DTD DocBook V3.1//EN">
<article lang="en">
<!-- DocBook file was created by LyX 1.1
See http://www.lyx.org/ for more information -->
<artheader>
<title>
Common Groupware Interface Standard
</title>
</artheader>
<sect1>
<title>
Scope
</title>
<para>
As many different opensource and freesoftware groupware systems are being developed, the full realization of the dream of a connected world must be prefaced by an agreement to interoperate. There are limited ways in which cooperation with commercial groupware systems may be achecived, the majority if not all of which were derived via the establishment of open standards. These might include email (POP3/IMAP), contacts(LDAP,vcard), or scheduling(ical/vcal). It is felt that while these have proven themselves to be very useful, they are insufficient to satisfy the real needs of a typical corporate environment.
</para>
<para>
This document hopes to provide a reasonable recommendation for a set of standardized methods to be used for groupware services interaction. More specifically, it hopes to address the need for such a standard as well as to spur discussion about the common service names and methods themselves.
</para>
<para>
Examples will be given for implementations in XML-RPC, since this standard is relatively fixed and open.
</para>
<para>
This document does not provide recommendations for the underlying access control system which would allow or deny a particular action.
</para>
<para>
Also not discussed here is login and authorization to be used for initial access to a service provider.
</para>
</sect1>
<sect1>
<title>
The Services
</title>
<sect2>
<title>
Overview
</title>
<para>
There are a few common services types that will be needed for minimum useability of a groupware server or application. They are:
</para>
<itemizedlist>
<listitem>
<para>
Contacts
</para>
</listitem>
<listitem>
<para>
Schedule
</para>
</listitem>
<listitem>
<para>
Notes
</para>
</listitem>
<listitem>
<para>
Todo
</para>
</listitem>
</itemizedlist>
<para>
These services are represented already in places such as existing groupware client-server applications and also in the PalmOS basic-4 buttons and applications.
</para>
<para>
Within each of these services are some common methods that would be called to store, retreive, or update data:
</para>
<itemizedlist>
<listitem>
<para>
read_list
</para>
</listitem>
<listitem>
<para>
read
</para>
</listitem>
<listitem>
<para>
save
</para>
</listitem>
<listitem>
<para>
delete
</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>
Detail
</title>
<sect3>
<title>
Contacts
</title>
<para>
The concept of contacts may encompass local addressbooks, LDAP, and lists stored in other media. The purpose of the contacts service is not to duplicate or attempt to replace these. In some respects, it might do just that. But its goal is more so to provide a common and shareable way for the other core services to create, edit, and read a common user and address list. All of the other services may use the contact service to obtain record owner information to be used in access control. They would also use them when it is required to share this data, as with a meeting where other local and non-local users will be invited to attend.
</para>
<para>
Contacts may include the local installed user base, users on other cooperative servers, or email addresses used for limited cooperation with other groupware services that are not compliant with this service scheme or implementations thereof. It could also include individuals using web-based or local ISP email services. The scope of this document, however, is to define the service with regard to the common methods to be used:
</para>
<itemizedlist>
<listitem>
<para>
read_list
</para>
</listitem>
</itemizedlist>
<para>
This method is used to list contacts, with or without limits, filters, or search criteria. In this way it can be used for simple lists or to search for contact records and their identifiers. The optional search criteria includes:
</para>
<orderedlist>
<listitem>
<para>
start - Start at this identifier (integer: default 0)
</para>
</listitem>
<listitem>
<para>
limit - Limit to this number of records returned(integer: unlimited by default)
</para>
</listitem>
<listitem>
<para>
fieldlist - limit to showing only these fields (array: default to identifier, owner identifier, possibly firstname and lastname)
</para>
</listitem>
<listitem>
<para>
filter - Show records that are public or private only, or other system-specific filters, e.g group or company(string: default '')
</para>
</listitem>
<listitem>
<para>
query - Search internal fieldlist for a value (string: default '')
</para>
</listitem>
</orderedlist>
<para>
The return for this method includes:
</para>
<orderedlist>
<listitem>
<para>
count of number of records returned(integer)
</para>
</listitem>
<listitem>
<para>
array consisting of: array: identifier =&gt; (array: fieldlist key =&gt; value pairs)
</para>
</listitem>
</orderedlist>
<itemizedlist>
<listitem>
<para>
read
</para>
</listitem>
</itemizedlist>
<para>
Once the identifier for a single contact record is known, the contact may be read for more detail using this method. This takes two parameters:
</para>
<orderedlist>
<listitem>
<para>
identifier - (integer: no default)
</para>
</listitem>
<listitem>
<para>
fieldlist - limit to showing only these fields (array: default to identifier, owner identifier, possibly firstname and lastname)
</para>
</listitem>
</orderedlist>
<para>
And returns:
</para>
<orderedlist>
<listitem>
<para>
array consisting of: array: identifier =&gt; (array: fieldlist key =&gt; value pairs)
</para>
</listitem>
</orderedlist>
<itemizedlist>
<listitem>
<para>
save
</para>
</listitem>
</itemizedlist>
<para>
This is a method used to save an existing record or create a new one. If the identifier for an existing record is not passed, a new entry will be created.
</para>
<itemizedlist>
<listitem>
<para>
delete
</para>
</listitem>
</itemizedlist>
<para>
This will allow deletion of a record by passing its identifier.
</para>
</sect3>
<sect3>
<title>
Schedule
</title>
</sect3>
<sect3>
<title>
Notes
</title>
</sect3>
<sect3>
<title>
Todo
</title>
</sect3>
</sect2>
<sect2>
<title>
Examples in XML-RPC
</title>
<para>
Query the contacts service for read_list, using only start and limit to grab the first 5 records, starting with identifier 1. Additionally, return only the firstname and lastname fields n_given and n_family (firstname and lastname in pseudo vcard format):
</para>
<programlisting>
<![ CDATA [<methodCall>
]]><![ CDATA [<methodName>service.contacts.read_list</methodName>
]]><![ CDATA [<params>
]]><![ CDATA [<param>
]]><![ CDATA [<value><struct>
]]><![ CDATA [<member><name>start</name>
]]><![ CDATA [<value><string>1</string></value>
]]><![ CDATA [</member>
]]><![ CDATA [<member><name>limit</name>
]]><![ CDATA [<value><string>5</string></value>
]]><![ CDATA [</member>
]]><![ CDATA [<member><name>fields</name>
]]><![ CDATA [<value><struct>
]]><![ CDATA [<member><name>n_given</name>
]]><![ CDATA [<value><string>n_given</string></value>
]]><![ CDATA [</member>
]]><![ CDATA [<member><name>n_family</name>
]]><![ CDATA [<value><string>n_family</string></value>
]]><![ CDATA [</member>
]]><![ CDATA [</struct></value>
]]><![ CDATA [</member>
]]><![ CDATA [<member><name>query</name>
]]><![ CDATA [<value><string></string></value>
]]><![ CDATA [</member>
]]><![ CDATA [<member><name>filter</name>
]]><![ CDATA [<value><string></string></value>
]]><![ CDATA [</member>
]]><![ CDATA [<member><name>sort</name>
]]><![ CDATA [<value><string></string></value>
]]><![ CDATA [</member>
]]><![ CDATA [<member><name>order</name>
]]><![ CDATA [<value><string></string></value>
]]><![ CDATA [</member>
]]><![ CDATA [</struct></value>
]]><![ CDATA [</param>
]]><![ CDATA [</params>
]]><![ CDATA [</methodCall>
]]> </programlisting>
</sect2>
</sect1>
<sect1>
<title>
Conclusion
</title>
<para>
This document outlined the following services and methods:
</para>
<sect2>
<title>
Contacts:
</title>
<itemizedlist>
<listitem>
<para>
service.contacts.read_list(&lsqb;search criteria&rsqb;)
</para>
</listitem>
<listitem>
<para>
service.contacts.read(identifier,&lsqb;fieldlist&rsqb;)
</para>
</listitem>
<listitem>
<para>
service.contacts.save(fields)
</para>
</listitem>
<listitem>
<para>
service.contacts.delete(identifier)
</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>
Schedule:
</title>
<itemizedlist>
<listitem>
<para>
service.schedule.read_list(&lsqb;search criteria&rsqb;)
</para>
</listitem>
<listitem>
<para>
service.schedule.read(identifier,&lsqb;fieldlist&rsqb;)
</para>
</listitem>
<listitem>
<para>
service.schedule.save(fields)
</para>
</listitem>
<listitem>
<para>
service.schedule.delete(identifier)
</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>
Notes:
</title>
<itemizedlist>
<listitem>
<para>
service.notes.read_list(&lsqb;search criteria&rsqb;)
</para>
</listitem>
<listitem>
<para>
service.notes.read(identifier,&lsqb;fieldlist&rsqb;)
</para>
</listitem>
<listitem>
<para>
service.notes.save(fields)
</para>
</listitem>
<listitem>
<para>
service.notes.delete(identifier)
</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>
Todo:
</title>
<itemizedlist>
<listitem>
<para>
service.todo.read_list(search criteria)
</para>
</listitem>
<listitem>
<para>
service.todo.read(identifer,&lsqb;fieldlist&rsqb;)
</para>
</listitem>
<listitem>
<para>
service.todo.save(fields)
</para>
</listitem>
<listitem>
<para>
service.todo.delete(identifier)
</para>
</listitem>
</itemizedlist>
</sect2>
</sect1>
</article>

View File

@ -0,0 +1,277 @@
Common Groupware Interface Standard
1 Scope
As many different opensource and freesoftware groupware systems
are being developed, the full realization of the dream of
a connected world must be prefaced by an agreement to interoperate.
There are limited ways in which cooperation with commercial
groupware systems may be achecived, the majority if not
all of which were derived via the establishment of open
standards. These might include email (POP3/IMAP), contacts(LDAP,vcard),
or scheduling(ical/vcal). It is felt that while these have
proven themselves to be very useful, they are insufficient
to satisfy the real needs of a typical corporate environment.
This document hopes to provide a reasonable recommendation
for a set of standardized methods to be used for groupware
services interaction. More specifically, it hopes to address
the need for such a standard as well as to spur discussion
about the common service names and methods themselves.
Examples will be given for implementations in XML-RPC, since
this standard is relatively fixed and open.
This document does not provide recommendations for the underlying
access control system which would allow or deny a particular
action.
Also not discussed here is login and authorization to be
used for initial access to a service provider.
2 The Services
2.1 Overview
There are a few common services types that will be needed
for minimum useability of a groupware server or application.
They are:
* Contacts
* Schedule
* Notes
* Todo
These services are represented already in places such as
existing groupware client-server applications and also in
the PalmOS basic-4 buttons and applications.
Within each of these services are some common methods that
would be called to store, retreive, or update data:
* read_list
* read
* save
* delete
2.2 Detail
2.2.1 Contacts
The concept of contacts may encompass local addressbooks,
LDAP, and lists stored in other media. The purpose of the
contacts service is not to duplicate or attempt to replace
these. In some respects, it might do just that. But its
goal is more so to provide a common and shareable way for
the other core services to create, edit, and read a common
user and address list. All of the other services may use
the contact service to obtain record owner information to
be used in access control. They would also use them when
it is required to share this data, as with a meeting where
other local and non-local users will be invited to attend.
Contacts may include the local installed user base, users
on other cooperative servers, or email addresses used for
limited cooperation with other groupware services that are
not compliant with this service scheme or implementations
thereof. It could also include individuals using web-based
or local ISP email services. The scope of this document,
however, is to define the service with regard to the common
methods to be used:
* read_list
This method is used to list contacts, with or without limits,
filters, or search criteria. In this way it can be used
for simple lists or to search for contact records and their
identifiers. The optional search criteria includes:
1. start - Start at this identifier (integer: default 0)
2. limit - Limit to this number of records returned(integer:
unlimited by default)
3. fieldlist - limit to showing only these fields (array:
default to identifier, owner identifier, possibly firstname
and lastname)
4. filter - Show records that are public or private only,
or other system-specific filters, e.g group or company(string:
default '')
5. query - Search internal fieldlist for a value (string:
default '')
The return for this method includes:
1. count of number of records returned(integer)
2. array consisting of: array: identifier => (array: fieldlist
key => value pairs)
* read
Once the identifier for a single contact record is known,
the contact may be read for more detail using this method.
This takes two parameters:
1. identifier - (integer: no default)
2. fieldlist - limit to showing only these fields (array:
default to identifier, owner identifier, possibly firstname
and lastname)
And returns:
1. array consisting of: array: identifier => (array: fieldlist
key => value pairs)
* save
This is a method used to save an existing record or create
a new one. If the identifier for an existing record is not
passed, a new entry will be created.
* delete
This will allow deletion of a record by passing its identifier.
2.2.2 Schedule
2.2.3 Notes
2.2.4 Todo
2.3 Examples in XML-RPC
Query the contacts service for read_list, using only start
and limit to grab the first 5 records, starting with identifier
1. Additionally, return only the firstname and lastname
fields n_given and n_family (firstname and lastname in pseudo
vcard format):
<methodCall>
<methodName>service.contacts.read_list</methodName>
<params>
<param>
<value><struct>
<member><name>start</name>
<value><string>1</string></value>
</member>
<member><name>limit</name>
<value><string>5</string></value>
</member>
<member><name>fields</name>
<value><struct>
<member><name>n_given</name>
<value><string>n_given</string></value>
</member>
<member><name>n_family</name>
<value><string>n_family</string></value>
</member>
</struct></value>
</member>
<member><name>query</name>
<value><string></string></value>
</member>
<member><name>filter</name>
<value><string></string></value>
</member>
<member><name>sort</name>
<value><string></string></value>
</member>
<member><name>order</name>
<value><string></string></value>
</member>
</struct></value>
</param>
</params>
</methodCall>
3 Conclusion
This document outlined the following services and methods:
3.1 Contacts:
* service.contacts.read_list([search criteria])
* service.contacts.read(identifier,[fieldlist])
* service.contacts.save(fields)
* service.contacts.delete(identifier)
3.2 Schedule:
* service.schedule.read_list([search criteria])
* service.schedule.read(identifier,[fieldlist])
* service.schedule.save(fields)
* service.schedule.delete(identifier)
3.3 Notes:
* service.notes.read_list([search criteria])
* service.notes.read(identifier,[fieldlist])
* service.notes.save(fields)
* service.notes.delete(identifier)
3.4 Todo:
* service.todo.read_list(search criteria)
* service.todo.read(identifer,[fieldlist])
* service.todo.save(fields)
* service.todo.delete(identifier)