2024 Update Rollup 2

For DevelopersPermanent link for this heading

If you want to write your own CMIS client, profound knowledge about the CMIS standard is mandatory. As a starting point the OpenCMIS client examples may be helpful: https://chemistry.apache.org/java/examples/: new window

Note: Apache Chemistry does not support aspects.

Available RepositoriesPermanent link for this heading

The available repositories can be configured the following way:

  • The desk of the user is a repository by default.
  • The repositories defined in the CMIS configuration (see chapter “Configuration of the Fabasoft Integration for CMIS”).
  • The repositories returned by the use case FSCCMIS@1.1001:CMISFilterRepositories.

Syntax

override CMISFilterRepositories{
  variant User {
    impl = expression {
      RepositoryFilterType repo1 = coort.CreateAggregate(#RepositoryFilterType);
      repo1.repositorybaseurl = "https://s1.fabasoft.com/fsc/cmis";
      repo1.repositoryid = "root";
      repo1.repositoryname = "S1";

      RepositoryFilterType repo2 = coort.CreateAggregate(#RepositoryFilterType);
      repo2.repositorybaseurl = "https://s2.fabasoft.com/fsc/cmis";
      repo2.repositoryid = "root";
      repo2.repositoryname = "S2";

      repositories += repo1;
      repositories += repo2;
    }
  }
}

The “aspect” ParameterPermanent link for this heading

The aspect parameter can be used to retrieve all properties of an object that are defined on a specified form and that contain a value. Additionally, the standard properties atom:icon, cmis:baseTypeId and cmis:createdBy are available.

Usage:

To get a list of all child objects following URL can be used:

https://<webserver>/<vdir>/cmis/<repository>/<object>/children?aspect=<action>

Note: When accessing object lists via CMIS, a maximum of 1000 objects can be loaded without paging. When using paging (maxItems parameter), more than 1000 objects can still be loaded. In addition, in children requests that set the aspect parameter, the estimated total number of objects in a list is transmitted in the fsc:estimatedNumItems XML attribute.

To get the values of all available properties (that contain a value) the following URL can be used:

https://<webserver>/<vdir>/cmis/<repository>/<object>/entry?aspect=<action>

The value of the aspect parameter is matched with the value of the Action property. The Action property can be defined on the desired object class, on the “User Interface” tab in the Forms property. The matching action determines the used form. The form contains form pages. All properties of a basic type (string, integer, date, contents and so on) that are assigned to the form pages and that contain a value are included in the response XML. Properties that contain no value are not included in the XML due to performance reasons.

In the following example properties of the form that matches the COOATTREDIT@1.1:EditObjectAttributes action are returned.

Example

https://at.cloud.fabasoft.com/folio/cmis/COO.1.3285.1.1346/COO.1.3285.4.945/
entry?aspect=COOATTREDIT_1_1_EditObjectAttributes

In the following example the properties objname and objversmaxnr of the object COO.1.3285.4.945 are set.

Example

curl.exe -X PUT -u "user":"passwd" " https://at.cloud.fabasoft.com/folio/cmis/COO.1.3285.1.1346/COO.1.3285.4.945/
entry?aspect=COOATTREDIT_1_1_EditObjectAttributes" -d @changeprops.xml

changeprops.xml

<?xml version="1.0" encoding="utf-8"?>

<entry xmlns="http://www.w3.org/2005/Atom" xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/" xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/">
  <cmisra:object>
    <cm
is:properties>
      <cmis:propertyString propertyDefinitionId="COOSYSTEM@1.1:objname">
        <cmis:value>My object name</cmis:value>
      </cmis:propertyString>

      <cmis:propertyInteger propertyDefinitionId="COOSYSTEM@1.1:objversmaxnr">
        <cmis:value>3</cmis:value>
      </cmis:propertyInteger>

    </cmis:properties>

  </cmisra:object>

</entry>

In the following example a Microsoft Word document is created directly on the desk. The name “My document” and the subject “My subject” are set.

Example

curl.exe -X POST -u "user":"passwd" " https://at.cloud.fabasoft.com/folio/cmis/COO.1.3285.1.1346/COO.1.3285.1.1346/
children?aspect=COOATTREDIT_1_1_EditObjectAttributes" -d @createdoc.xml

createdoc.xml

<?xml version="1.0" encoding="utf-8"?>

<entry xmlns="http://www.w3.org/2005/Atom" xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/" xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/">
  <cmisra:object>

    <cmis:properties>

      <cmis:propertyString propertyDefinitionId="cmis:name">
        <cmis:value>My document</cmis:value>
      </cmis:propertyString>

      <cmis:propertyId propertyDefinitionId="cmis:objectTypeId">
        <cmis:value>COOMSOFFICE@1.1:WinWordObject</cmis:value>
      </cmis:propertyId>

      <cmis:propertyId propertyDefinitionId="cmis:baseTypeId">
        <cmis:value>cmis:document</cmis:value>
      </cmis:propertyId>

      <cmis:propertyString propertyDefinitionId="COOSYSTEM@1.1:objsubject">
        <cmis:value>My subject</cmis:value>
      </cmis:propertyString>

    </cmis:properties>

  </cmisra:object>

</entry>

In the following example an object should be created in a folder that consists of several object lists. The document should be created in the folder COO.1.3285.4.934 in the object list COO.1.1.1.1907.

Example

curl.exe -X POST -u "user":"passwd" " https://at.cloud.fabasoft.com/folio/cmis/COO.1.3285.1.1346/
COO.1.3285.4.934$COO.1.1.1.1907/
children?aspect=COOATTREDIT_1_1_EditObjectAttributes" -d @createdoc.xml

aspect=truePermanent link for this heading

The aspect=true parameter is only for internal use. It reduces the amount of data that is transferred to the client (the response XML contains only the most important information). This setting does not conform to the CMIS specification.

Note: The URL pointing to the PDF overview is included for objects without content.

Update of PropertiesPermanent link for this heading

The CMIS service “updateProperties” can be used to modify properties that are defined in the aspect.

SOAP Message ExamplePermanent link for this heading

The following example shows how to use the aspect parameter in a SOAP message.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://docs.oasis-open.org/ns/cmis/messaging/200908/" xmlns:fsc="http://www.fabasoft.com/">
  <soapenv:Header/>
   <
soapenv:Body>
      <
ns:getChildren>
         <
ns:repositoryId>COO.1.506.1.215</ns:repositoryId>
         <
ns:folderId>COO.1.506.1.345</ns:folderId>
         <
ns:extension>
           <
fsc:aspect>true</fsc:aspect>
         </
ns:extension>
      </
ns:getChildren>
   </
soapenv:Body>
</
soapenv:Envelope>

Long ListsPermanent link for this heading

The HTTP header x-fsc-statekey enables optimized loading of long object lists by using a state server.

  1. The client enables the use of a state by including the header with the value “none”.
  2. The server can respond with a new key in the response header.
  3. The client can use the received key in subsequent requests.

User-Defined FormsPermanent link for this heading

The properties of user-defined forms can be accessed like any other property.

When you create a “Container With User Data” or “Room With User Data” containing one list or several lists on the same form page the first list can be retrieved the following way.

Example

curl.exe -u "user":"passwd" " https://at.cloud.fabasoft.com/folio/cmis/root/
COO.1.506.3.4498/children"

If several lists on different form pages are available the $ operator can be used to access each list.

Example

Provides an overview of all available lists:

curl.exe -u "user":"passwd" " https://at.cloud.fabasoft.com/folio/
cmis
/root/COO.1.506.3.4539/children"

As a result, the following entries are returned:

<id>cmisrep:entry:COO.1.506.3.4539$COO.1.506.1.8467</id>
<id>cmisrep:entry:COO.1.506.3.4539$COO.1.506.1.8469</id>
<id>cmisrep:entry:COO.1.506.3.4539$COO.1.506.1.8471</id>

The following way one of these lists can be accessed:

curl.exe -u "user":"passwd" " https://at.cloud.fabasoft.com/folio/cmis/root/
COO.1.506.3.4539$COO.1.506.1.8469/children"

Note: Depending on the used shell, the $ sign may need to be escaped (\$).

In the following example, properties of the form that matches the COOATTREDIT@1.1:EditObjectAttributes action are returned. The properties of the user-defined form are included.

Example

curl.exe -u "user":"passwd" " https://at.cloud.fabasoft.com/folio/
cmis/root/COO.1.506.3.4534/entry?aspect=COOATTREDIT_1_1_EditObjectAttributes"

QuotaPermanent link for this heading

If a user quota is defined for a Fabasoft Folio Domain, the data is also available in the response XML of the following call:

https://<webserver>[<port>]/<vdir>/cmis

  • fsc:maxquota
    Maximum available storage space (in MB) for the user.
  • fsc:curquota
    Currently used storage space (in KB) by the user.
  • fsc:maxobjcount
    Maximum available number of objects for the user.
  • fsc:curobjcount
    Number of objects created by the user.
  • fsc:maxcontsize
    Maximum size (in bytes) of a single document.

Example:

<fsc:properties>
  <cmis:property propertyDefinitionId="fsc:maxquota">
   <cmis:value>10240</cmis:value>
  </
cmis:property>
  <cmis:property propertyDefinitionId="fsc:maxobjcount">
    <cmis:value>10000</cmis:value>
  </
cmis:property>
  <cmis:property propertyDefinitionId="fsc:curobjcount">
   <cmis:value>115</cmis:value>
  </
cmis:property>
  <cmis:property propertyDefinitionId="fsc:curquota">
    <cmis:value>1701483</cmis:value>
  </
cmis:property>
  <cmis:property propertyDefinitionId="fsc:maxcontsize">
    <cmis:value>2147483647</cmis:value>
  </
cmis:property>
</fsc:properties>

Synchronized CollectionPermanent link for this heading

The following URL can be used to get a collection of all objects that are marked as synchronized by a user:

https://<webserver>[<port>]/<vdir>/cmis/<repository>/-/synchronize

Additional PropertiesPermanent link for this heading

Following properties are available:

  • The property fsc:objTeamRoom returns the Teamroom (COO address) of a document or folder.
  • The property fsc:objDeleted returns true if the object is in the wastebasket.
  • The property fsc:canSetContentStream determines whether the object can be modified.
  • The property fsc:contentStreamEncryption determines the encryption method of the object.

The properties canSetContentStream and contentStreamEncryption are only included in the response XML if the object is modifiable or encrypted.

Example:

<cmis:propertyBoolean propertyDefinitionId="fsc:canSetContentStream">
  <
cmis:value>true</cmis:value>
</cmis:propertyBoolean>

<cmis:propertyString propertyDefinitionId="fsc:contentStreamEncryption">
  <cmis:value>AES 256 CBC</cmis:value>
</
cmis:propertyString>

Providing DocumentsPermanent link for this heading

The available document types are defined in the Web Service Configuration:

  • Object Classes for Newly Created Content Objects
    Objects of object classes in this list are included.
  • Object Classes Allowed in Web Folders
    Objects of object classes in this list are included. If Show PDF Summary is set to “Yes” a PDF overview is generated. Additionally, for objects not in this list (and that are not excluded) a PDF overview is generated.
  • Object Classes Not Allowed in Web Folders
    Objects of object classes in this list are excluded.

PerformancePermanent link for this heading

Please be aware that some operations like getting the folder tree of a large structure may exceed the system resources.

Additional ArgumentsPermanent link for this heading

The following additional arguments are available:

Parameter needChoices

To reduce the amount of data generated choices are no longer provided by default, starting with version 2019. If these additional choices are needed the URL parameter needChoices=true may be added.