I have managed to use DotCMIS to update aspect properties using the following
code and have a couple of questions. This code is an example and updates
cm:description of a document for which you know the id. Note that if you want
to use this it requires a small change to the source (from latest trunk) stated
below the code.
class Program
{
static void Main()
{
const string description = "this is a new description";
const string repositoryId = "7270744f-c07c-48c9-aa01-ef90089785e3";
string documentId =
"workspace://SpacesStore/f8e3dc76-4781-49d6-b5d1-d3af1299ea80";
Dictionary<string, string> parameters = new Dictionary<string,
string>();
parameters[SessionParameter.BindingType] = BindingType.AtomPub;
parameters[SessionParameter.AtomPubUrl] =
"http://localhost:8082/alfresco/service/cmis";
parameters[SessionParameter.User] = "admin";
parameters[SessionParameter.Password] = "admin";
parameters[SessionParameter.RepositoryId] = repositoryId;
SessionFactory factory = SessionFactory.NewInstance();
ISession session = factory.CreateSession(parameters);
string changeToken = null; // not sure why I need this
Properties props = new Properties();
props.Extensions = CreateData(description).Extensions;
session.Binding.GetObjectService().UpdateProperties(repositoryId,
ref documentId, ref changeToken, props, null);
}
private static ExtensionsData CreateData(string description)
{
ExtensionsData data = new ExtensionsData();
data.Extensions = new List<ICmisExtensionElement>();
CmisExtensionElement element = new CmisExtensionElement
{
Name = "alf:setAspects",
Namespace = "http://www.alfresco.org",
Children = new List<ICmisExtensionElement>
{
new CmisExtensionElement
{
Name = "alf:properties",
Namespace = "http://www.alfresco.org",
Children = new List<ICmisExtensionElement>
{
new CmisExtensionElement
{
Name = "cmis:propertyString",
Namespace =
"http://docs.oasis-open.org/ns/cmis/core/200908/",
Attributes = new
Dictionary<string, string>
{
{"propertyDefinitionId","cm:description"},
{"displayName","Description"},
{"queryName","cm:description"}
},
Children = new
List<ICmisExtensionElement>
{
new
CmisExtensionElement
{
Name =
"cmis:value",
Namespace =
"http://docs.oasis-open.org/ns/cmis/core/200908/",
Value =
description
}
}
}
}
}
}
};
data.Extensions.Add(element);
return data;
}
This works as long as you make the following change in converter.cs, line 1869
in Converter::CreateXMLElement(XmlDocument doc, ICmisExtensionElement element) :
result.Value = element.Value;
should be
result.InnerText = element.Value;
Questions:
1. In the future will we be expected to add Extensions to the Properties
as above, or will we be able to use the ExtensionsData attribute on
UpdateProperties call which is currently ignored in the code?
2. I am able to retrieve type information for an aspect by calling, for
example, GetTypeDefinition("P:cm:titled"). But I do not know of any way to find
out which aspects exist without finding a specific object first. Is there any
way to find out what aspects are applied to a *type* without getting hold of an
object first?
It would seem to me that, since cm:content is mapped to cmis:document, that
calling GetTypeDefinition("cmis:document") would return aspect information in
the Extensions, but this does not seem to be the case.
3. How actively is DotCMIS developed? If you are looking for devs I have
spent some time looking at the code to work this out and would be happy to help.
Kind Regards,
Phil Barr.
IMPORTANT NOTICE
This e-mail contains information which is confidential and may be privileged
and is for the exclusive use of the recipient. If you are not the named
recipient please contact the sender immediately and delete the communication
from your system. You are hereby notified that any disclosure, distribution or
copying of this communication, in whole or in part, is strictly prohibited. It
is the responsibility of the recipient to ensure that this message and its
attachments are virus free. Any views or opinions presented are solely those of
the author and do not necessarily represent those of the Company, its directors
or officers unless otherwise specifically stated. The Company is not
responsible for any reliance placed on the information contained herein and
excludes all liability.
SynApps Solutions Limited is a company registered in England & Wales. Company
Registration No.: 047702224. VAT No.: 823778892