This project has retired. For details please refer to its Attic page.
Apache Chemistry - Getting started with DotCMIS
     
   
 

Connecting to a CMIS AtomPub endpoint

Connecting to the first repository

    Dictionary<string, string> parameters = new Dictionary<string, string>();
    
    parameters[SessionParameter.BindingType] = BindingType.AtomPub;
    parameters[SessionParameter.AtomPubUrl] = "http://<host>/<serviceDocumentPath>";
    parameters[SessionParameter.User] = "<username>";
    parameters[SessionParameter.Password] = "<password>";
    
    SessionFactory factory = SessionFactory.NewInstance();
    ISession session = factory.GetRepositories(parameters)[0].CreateSession();

Connecting to a specific repository

    Dictionary<string, string> parameters = new Dictionary<string, string>();
    
    parameters[SessionParameter.BindingType] = BindingType.AtomPub;
    parameters[SessionParameter.AtomPubUrl] = "http://<host>/<serviceDocumentPath>";
    parameters[SessionParameter.User] = "<username>";
    parameters[SessionParameter.Password] = "<password>";
    parameters[SessionParameter.RepositoryId] = "<repositoryId>";
    
    SessionFactory factory = SessionFactory.NewInstance();
    ISession session = factory.CreateSession(parameters);

Connecting to a CMIS Web Services endpoint

Connecting to the first repository

    Dictionary<string, string> parameters = new Dictionary<string, string>();
    
    parameters[SessionParameter.BindingType] = BindingType.WebServices;
    parameters[SessionParameter.WebServicesRepositoryService] = "http://<host>/<RepositoryServiceWSDL>";
    parameters[SessionParameter.WebServicesAclService] = "http://<host>/<AclServiceWSDL>";
    parameters[SessionParameter.WebServicesDiscoveryService] = "http://<host>/<DiscoveryServiceWSDL>";
    parameters[SessionParameter.WebServicesMultifilingService] = "http://<host>/<MultifilingServiceWSDL>";
    parameters[SessionParameter.WebServicesNavigationService] = "http://<host>/<NavigationServiceWSDL>";
    parameters[SessionParameter.WebServicesObjectService] = "http://<host>/<ObjectServiceWSDL>";
    parameters[SessionParameter.WebServicesPolicyService] = "http://<host>/<PolicyServiceWSDL>";
    parameters[SessionParameter.WebServicesRelationshipService] = "http://<host>/<RelationshipServiceWSDL>";
    parameters[SessionParameter.WebServicesVersioningService] = "http://<host>/<VersioningServiceWSDL>";
    parameters[SessionParameter.User] = "<username>";
    parameters[SessionParameter.Password] = "<password>";
    
    SessionFactory factory = SessionFactory.NewInstance();
    ISession session = factory.GetRepositories(parameters)[0].CreateSession();

Connecting to a specific repository

    Dictionary<string, string> parameters = new Dictionary<string, string>();
    
    parameters[SessionParameter.BindingType] = BindingType.WebServices;
    parameters[SessionParameter.WebServicesRepositoryService] = "http://<host>/<RepositoryServiceWSDL>";
    parameters[SessionParameter.WebServicesAclService] = "http://<host>/<AclServiceWSDL>";
    parameters[SessionParameter.WebServicesDiscoveryService] = "http://<host>/<DiscoveryServiceWSDL>";
    parameters[SessionParameter.WebServicesMultifilingService] = "http://<host>/<MultifilingServiceWSDL>";
    parameters[SessionParameter.WebServicesNavigationService] = "http://<host>/<NavigationServiceWSDL>";
    parameters[SessionParameter.WebServicesObjectService] = "http://<host>/<ObjectServiceWSDL>";
    parameters[SessionParameter.WebServicesPolicyService] = "http://<host>/<PolicyServiceWSDL>";
    parameters[SessionParameter.WebServicesRelationshipService] = "http://<host>/<RelationshipServiceWSDL>";
    parameters[SessionParameter.WebServicesVersioningService] = "http://<host>/<VersioningServiceWSDL>";
    parameters[SessionParameter.User] = "<username>";
    parameters[SessionParameter.Password] = "<password>";
    parameters[SessionParameter.RepositoryId] = "<repositoryId>";
    
    SessionFactory factory = SessionFactory.NewInstance();
    ISession session = factory.CreateSession(parameters);

Listing folder children

    /// get the root folder
    IFolder rootFolder = session.GetRootFolder();
    
    // list all children
    foreach (ICmisObject cmisObject in rootFolder.GetChildren())
    {
        Console.WriteLine(cmisObject.Name);
    }
    
    // get a page
    IItemEnumerable<ICmisObject> children = rootFolder.GetChildren();
    IItemEnumerable<ICmisObject> page = children.SkipTo(20).GetPage(10); // children 20 to 30
    
    foreach (ICmisObject cmisObject in page)
    {
        Console.WriteLine(cmisObject.Name);
    }

Fetching a document

    IObjectId id = session.CreateObjectId("12345678");
    IDocument doc = session.GetObject(id) as IDocument;
    
    // properties
    Console.WriteLine(doc.Name);
    Console.WriteLine(doc.GetPropertyValue("my:property"));
    
    IProperty myProperty = doc["my:property"];
    Console.WriteLine("Id:	  " + myProperty.Id);
    Console.WriteLine("Value: " + myProperty.Value);
    Console.WriteLine("Type:  " + myProperty.PropertyType);
    
    // content
    IContentStream contentStream = doc.GetContentStream();
    Console.WriteLine("Filename:   " + contentStream.FileName);
    Console.WriteLine("MIME type:  " + contentStream.MimeType);
    Console.WriteLine("Has stream: " + (contentStream.Stream != null));

Creating a document

    IFolder folder = ...
    
    IDictionary<string, object> properties = new Dictionary<string, object>();
    properties[PropertyIds.Name] = "Hello World Document";
    properties[PropertyIds.ObjectTypeId] = "cmis:document";
    
    byte[] content = UTF8Encoding.UTF8.GetBytes("Hello World!");
    
    ContentStream contentStream = new ContentStream();
    contentStream.FileName = "hello-world.txt";
    contentStream.MimeType = "text/plain";
    contentStream.Length = content.Length;
    contentStream.Stream = new MemoryStream(content);
    
    IDocument doc = folder.CreateDocument(properties, contentStream, null);

Updating properties

    ICmisObject cmisObject = ...
    
    IDictionary<string, object> properties = new Dictionary<string, object>();
    properties["my:string"] = "a string";
    properties["my:int"] = 42;
    properties["my:date"] = DateTime.Now;
    
    IObjectId newId = cmisObject.UpdateProperties(properties);
    
    if (newId.Id == cmisObject.Id) 
    {
        // the repository updated this object - refresh the object
        cmisObject.Refresh();
    }
    else
    {
        // the repository created a new version - fetch the new version
        cmisObject = session.GetObject(newId);
    }

Deleting an object

    IObjectId newId = session.CreateObjectId("12345678"):
    ICmisObject cmisObject = session.GetObject(newId);
    
    cmisObject.Delete(true);

Performing a query

    IItemEnumerable<IQueryResult> qr = session.Query("SELECT * FROM cmis:document", false);
    
    foreach (IQueryResult hit in qr)
    {
        Console.WriteLine(hit["cmis:name"].FirstValue + " (" + hit["cmis:objectId"].FirstValue + ")");
    }