2017-10-06 8 views
0

J'ai le Presentation Web Script (script A) et le Data Web Script (script B). Dans le script A, je crée le dialogue qui interagit avec le script BEst-il possible de créer un dossier sur le site Alfresco en utilisant l'API OpenCMIS?

enter image description here

Ici, je suis en train de former un certain chemin où le fichier sera un peu chargé (group, year et number paramètres définissent ce chemin):

... 
var submitHandler = function() { 
    var dataWebScriptUrl = window.location.protocol + '//' + 
     window.location.host + "/alfresco/s/ms-ws/script-b?guest=true"; 

    var yearCombo = document.getElementById("year"); 
    var year = yearCombo.options[yearCombo.selectedIndex].value; 

    var groupCombo = document.getElementById("group"); 
    var group = groupCombo.options[groupCombo.selectedIndex].value; 

    var numberCombo = document.getElementById("number"); 
    var number = numberCombo.value; 

    var uploadedFile = document.getElementById("uploadedFile"); 
    var file = uploadedFile.files[0]; 

    var formData = new FormData(); 
    formData.append("year", year); 
    formData.append("group", group); 
    formData.append("number", number); 
    formData.append("uploadedFile", file);  

    var xhr = new XMLHttpRequest(); 
    xhr.open("POST", dataWebScriptUrl); 
    xhr.send(formData); 
}; 
... 

En script B, j'utilise le Apache Chemistry OpenCMIS API pour créer un chemin dans le référentiel Alfresco compatible CMIS:

public class CustomFileUploader extends DeclarativeWebScript implements OpenCmisConfig { 
    ... 
    private void retrievePostRequestParams(WebScriptRequest req) { 
     String groupName = null, year = null, number = null; 

     FormData formData = (FormData) req.parseContent(); 
     FormData.FormField[] fields = formData.getFields(); 
     for(FormData.FormField field : fields) { 
      String fieldName = field.getName(); 
      String fieldValue = field.getValue(); 

      if(fieldName.equalsIgnoreCase("group")) { 
       if(fieldValue.equalsIgnoreCase("services")) { 
        groupName = "Услуги"; 
       ...       
     } 

     firstLevelFolderName = "/" + groupName; 
     secondLevelFolderName = groupName + " " + year; 
     thirdLevelFolderName = number; 
    } 

    ... 

    Folder firstLevelFolder = 
       createFolderIfNotExists(cmisSession, docLibFolder, firstLevelFolderName); 

    ... 

    private Folder createFolderIfNotExists(Session cmisSession, 
      Folder parentFolder, String folderName) { 
     Folder subFolder = null; 
     for(CmisObject child : parentFolder.getChildren()) { 
      if(folderName.equalsIgnoreCase(child.getName())) { 
       subFolder = (Folder) child; 
      } 
     } 

     if(subFolder == null) { 
      Map<String, Object> props = new HashMap<>(); 
      props.put("cmis:objectTypeId", "cmis:folder"); 
      props.put("cmis:name", folderName); 

      subFolder = parentFolder.createFolder(props); 
     } 
     return subFolder; 
    } 

    private Folder getDocLibFolder(Session cmisSession, String siteName) { 
     String path = "/Sites/" + siteName + "/documentLibrary"; 
     return (Folder) cmisSession.getObjectByPath(path); 
    } 

    private Session getCmisSession() { 
     SessionFactory factory = SessionFactoryImpl.newInstance(); 
     Map<String, String> conf = new HashMap<>(); 

     // http://localhost:8080/alfresco/api/-default-/public/cmis/versions/1.1/atom 
     conf.put(SessionParameter.ATOMPUB_URL, ATOMPUB_URL); 
     conf.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value()); 
     conf.put(SessionParameter.USER, USER_NAME); 
     conf.put(SessionParameter.PASSWORD, PASSWORD); 

     // "org.alfresco.cmis.client.impl.AlfrescoObjectFactoryImpl" 
     conf.put(SessionParameter.OBJECT_FACTORY_CLASS, OBJECT_FACTORY_CLASS); 
     conf.put(SessionParameter.REPOSITORY_ID, "-default-"); 

     Session session = factory.createSession(conf); 

     return session; 
    } 

    ... 

Tout fonctionne bien ... Mais j'ai besoin de créer la structure de répertoire sur un site spécifique, par exemple. "Contrats de site", ici:

/site/contracts-site/documentlibrary 

Quand je précisant les points suivants:

/Sites/contracts-site/documentLibrary/Услуги 
/Sites/contracts-site/Услуги 
/site/contracts-site/documentlibrary/Услуги 

je reçois l'exception suivante (en fonction du chemin):

org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException: Object not found: /Sites/contracts-site/Услуги 

Quand je spécifier ce qui suit:

"/Услуги" 

Tout fonctionne, mais la structure du répertoire est créée en dehors du site ...

Comment créer un dossier sur le site Alfresco en utilisant OpenCMIS API?

Je serais très reconnaissant pour l'information. Merci à tous.

Merci à tous.

Répondre

1

Juste accidentellement trouvé la solution. Fonctionne parfaitement si spécifier le chemin suivant:

// locate the document library 
String path = "/Сайты/contracts-site/documentLibrary"; 

Ie, "Сайты" au lieu de "Sites" ... (alphabet cyrillique)

J'utilise locale ru_RU et UTF-8 encodage. Puis this example fonctionne également.

+0

C'était difficile. Je garderai à l'esprit ce comportement. – Akah

2

Vous ne manquez pas /company_home/?

Cela conduirait à

/company_home/Sites/contracts-site/documentLibrary/Услуги 
+0

Merci beaucoup pour votre réponse! Je vais essayer maintenant et vous le faire savoir ... –

+0

Non, cela n'a pas aidé. L'exception est la même: 'org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException: objet non trouvé:/company_home/Sites/contracts-site/documentLibrary/Услуги' AFAIK le chemin de' company_home' est '"/" '... –

+0

Désolé alors pour ne pas être utile. – Akah