Интеграция Showcase и Alfresco

Материал из Course Orchestra
Перейти к: навигация, поиск
Showcase

Создание решений на КУРС:Showcase

Класс AlfrescoManager

Основной класс интеграции с Alfresco, находится в package ru.curs.showcase.util.alfresco. Ниже представлены функции этого класса

Функция login

AlfrescoLoginResult login(String alfURL, String alfUser, String alfPass)

Осуществляет логин пользователя в Alfresco и получает тикет для передачи в другие функции взаимодействия с Alfresco

Входные параметры

  • alfURL - URL Alfresco,
  • alfUser - пользователь Alfresco,
  • alfPass - пароль пользователя Alfresco

Возвращает объект класса AlfrescoLoginResult со следующими функциями:

  • int getResult() - целочисленный признак успешности, значение 0 - успех, отличное от 0 - неудача,
  • String getErrorMessage() - сообщение об ошибке,
  • String getTicket() - тикет для залогиненного пользователя

Функция uploadFile

AlfrescoUploadFileResult uploadFile(String fileName, InputStream file, String alfURL, String alfTicket, PyDictionary alfUploadParams)

Загружает файл в Alfresco

Входные параметры

  • fileName - название файла,
  • file - сам файл,
  • alfURL - URL Alfresco,
  • alfTicket - тикет, полученный в результате логина пользователя Alfresco, под которым будет загружен файл,
  • alfUploadParams - параметры, определяющие как и куда именно будет загружен файл в Alfresco

Допустимы -- согласно документации Alfresco -- следующие значения параметров alfUploadParams:

  • siteid - идентификатор сайта,
  • containerid - идентификатор контейнера,
  • uploaddirectory - директория загрузки,
  • updatenoderef - идентификатор файла для обновления (в случае загрузки новой версии),
  • description - описание загружаемого файла,
  • contenttype - тип контента загружаемого файла,
  • majorversion - major версия загружаемого файла,
  • overwrite - переписать ли содержимое загружаемого файла,
  • thumbnails - создавать ли thumbnail для загружаемого файла.

При этом, особенность Alfresco состоит в том, что не все эти параметры будут учитываться на стороне Alfresco при загрузке файла (похоже, зависит от версии Alfresco). Так, например, в версии 5.0.d Alfresco Community Edition не учитываются параметры majorversion, thumbnails.

Примеры задания alfUploadParams

Загрузка файла на сайт
    alfUploadParams = {}
    alfUploadParams["siteid"] = "demo"
    alfUploadParams["containerid"] = "documentlibrary"
    alfUploadParams["uploaddirectory"] = "/abc"

Файл будет загружен на сайт "demo", в "documentlibrary", в директорию "/abc"

Загрузка файла в ноду
    alfUploadParams = {}
    alfUploadParams["destination"] = "workspace://SpacesStore/8096d4bd-4e97-4c4d-9849-73275b722f0f"
    alfUploadParams["uploaddirectory"] = "/folder1"

Файл будет загружен в ноду Alfresco "workspace://SpacesStore/8096d4bd-4e97-4c4d-9849-73275b722f0f", в директорию "/folder1"

Загрузка нового файла (если в директории загрузки уже есть файл с таким названием, то имя файла будет немного измененным (например, name-1.ext))
    alfUploadParams = {}
    alfUploadParams["overwrite"] = "no"
Загрузка новой версии определенного файла (при этом, загружаемый файл может иметь другое имя)
    alfUploadParams = {}
    alfUploadParams["updatenoderef"] = "workspace://SpacesStore/97cf8b94-0407-40ed-9582-711f4d42dfa0"    
    alfUploadParams["description"] = "Это комментарий44"
  • updatenoderef - идентификатор файла в Alfresco, новая версия которого загружается,
  • description - описание загружаемой версии.

Функция uploadFile возвращает объект класса AlfrescoUploadFileResult со следующими функциями:

  • int getResult() - целочисленный признак успешности, значение 0 - успех, отличное от 0 - неудача,
  • String getErrorMessage() - сообщение об ошибке,
  • String getNodeRef() - координаты загруженного файла в Alfresco

Функция getFileMetaData

AlfrescoGetFileMetaDataResult getFileMetaData(String alfFileId, String alfURL, String alfTicket, String acceptLanguage)

Получает метаданные файла из Alfresco

Входные параметры

  • alfFileId - идентификатор файла,
  • alfURL - URL Alfresco,
  • alfTicket - тикет, полученный в результате логина пользователя Alfresco,
  • acceptLanguage - acceptLanguage броузера (выяснилось, что для разных acceptLanguage Alfresco хранит разные метаданные. Если этот параметр не задан или равен "", то будет использоваться acceptLanguage броузера по умолчанию).

Функция getFileMetaData возвращает объект класса AlfrescoGetFileMetaDataResult со следующими функциями:

  • int getResult() - целочисленный признак успешности, значение 0 - успех, отличное от 0 - неудача,
  • String getErrorMessage() - сообщение об ошибке,
  • String getMetaData() - метаданные файла в формате json.

Функция setFileMetaData

AlfrescoSetFileMetaDataResult setFileMetaData(String alfFileId, String metaData, String alfURL, String alfTicket, String acceptLanguage)

Задает (обновляет) метаданные файла в Alfresco

Входные параметры

  • alfFileId - идентификатор файла,
  • metaData - метаданные файла,
  • alfURL - URL Alfresco,
  • alfTicket - тикет, полученный в результате логина пользователя Alfresco,
  • acceptLanguage - acceptLanguage броузера (выяснилось, что для разных acceptLanguage Alfresco хранит разные метаданные. Если этот параметр не задан или равен "", то будет использоваться acceptLanguage броузера по умолчанию).

Функция setFileMetaData возвращает объект класса AlfrescoSetFileMetaDataResult со следующими функциями:

  • int getResult() - целочисленный признак успешности, значение 0 - успех, отличное от 0 - неудача,
  • String getErrorMessage() - сообщение об ошибке,

Функция getFileVersions

AlfrescoGetFileVersionsResult getFileVersions(String alfFileId, String alfURL, String alfTicket)

Получает версии файла из Alfresco

Входные параметры

  • alfFileId - идентификатор файла,
  • alfURL - URL Alfresco,
  • alfTicket - тикет, полученный в результате логина пользователя Alfresco.

Функция getFileVersions возвращает объект класса AlfrescoGetFileVersionsResult со следующими функциями:

  • int getResult() - целочисленный признак успешности, значение 0 - успех, отличное от 0 - неудача,
  • String getErrorMessage() - сообщение об ошибке,
  • String getVersions() - список версий файла в формате json.

Функция deleteFile

AlfrescoDeleteFileResult deleteFile(String alfFileId, String alfURL, String alfTicket)

Удаляет файл из Alfresco

Входные параметры

  • alfFileId - идентификатор файла,
  • alfURL - URL Alfresco,
  • alfTicket - тикет, полученный в результате логина пользователя Alfresco, под которым будет загружен файл,

Функция deleteFile возвращает объект класса AlfrescoDeleteFileResult со следующими функциями:

  • int getResult() - целочисленный признак успешности, значение 0 - успех, отличное от 0 - неудача,
  • String getErrorMessage() - сообщение об ошибке.

Функция createFolder

AlfrescoCreateFolderResult createFolder(String alfParentFolderId, String alfCreateFolderParams, String alfURL, String alfTicket)

Создает новую директорию в Alfresco

Входные параметры

  • alfParentFolderId - идентификатор родительской директории (той, в которой будет создана новая),
  • alfCreateFolderParams - параметры создания новой директории (в формате json),
  • alfURL - URL Alfresco,
  • alfTicket - тикет, полученный в результате логина пользователя Alfresco.

Параметры создания новой директории alfCreateFolderParams

 alfCreateFolderParams = unicode("{\"name\": \"Новая директория1\", \"title\": \"Заголовок новой директории1\", \"description\": \"Описание новой директории1\", \"type\": \"cm:folder\"}")

где

  • name - название новой директории,
  • title - заголовок новой директории,
  • description - описание новой директории,
  • type - тип создаваемой ноды (в данном случае, это директория, поэтому "cm:folder"). Данный параметр можно не указывать, в таком случае значение по умолчанию будет "cm:folder. Нужен для возможности задания специфических типов директорий, наследников от "cm:folder" (см. документацию по Alfresco).

Функция createFolder возвращает объект класса AlfrescoCreateFolderResult со следующими функциями:

  • int getResult() - целочисленный признак успешности, значение 0 - успех, отличное от 0 - неудача,
  • String getErrorMessage() - сообщение об ошибке,
  • String getNodeRef() - координаты созданной директории в Alfresco

Для удаления, получения/задания метаданных директории можно использовать те же функции, что и для файла.

Примеры использования

Находятся в тестовом решении на Дженкинсе, перспектива celesta, пункт навигатора Alfresco

Получение файла из Alfresco для отображения на странице

...
from ru.curs.showcase.util.alfresco import AlfrescoManager
...

def webtext(context, main, add, filterinfo, session, elementId):
    alfURL = "http://127.0.0.1:8080/alfresco"
    alfUser = "user222" 
    alfPass = "пароль"    
    
    alfTicket = ""
    
    resultLogin = AlfrescoManager.login(alfURL, alfUser, alfPass)
    if resultLogin.getResult() == 0:
        alfTicket = resultLogin.getTicket() 
    else:
        context.error(resultLogin.getErrorMessage());           
    
    data = u'''
    <h1>
<!--  Guest        
        
  <a href="#">
   <img src="http://127.0.0.1:8080/alfresco/service/api/node/content/workspace/SpacesStore/2c31a645-549c-4479-b939-9cd11cbf8f10?guest=true" 
   width="1100px" height="700px" alt="lorem"></img>
  </a>
-->

  <a href="#">
   <img src="http://127.0.0.1:8080/alfresco/service/api/node/content/workspace/SpacesStore/2c31a645-549c-4479-b939-9cd11cbf8f10?alf_ticket='''+alfTicket+'''" 
   width="1100px" height="700px" alt="lorem"></img>
  </a>
        
    </h1>
    '''
    settings = u'''
    <properties>
        <event name="single_click" linkId="testIdClient">
             <action >
                <main_context>Москва</main_context>
                <client>
                    <activity id="activityClientID" name="showcaseShowAddContext">
                        <add_context>
                            add_context действия.
                        </add_context>
                    </activity>
                </client>
            </action>
        </event>
        <event name="single_click" linkId="testIdServer">
             <action >
                <main_context>Москва</main_context>
                <server>
                    <activity id="activityServerID" name="g1.activity.simple.celesta">
                         <add_context>
                             add_context для действия
                         </add_context>  
                    </activity>             
                </server>
            </action>
        </event>
    </properties>
    '''    

    return JythonDTO(data, settings)

При этом, файл может быть получен под пользователем Guest Alfresco, тогда в url файла должен быть добавлен параметр guest=true. А может быть получен под конкретным пользователем Alfresco, тогда сначала логинимся и получаем тикет, а после добавляем его в url файла: alf_ticket="TICKET_7ce821cf644e2fa2a1c004bf806e0bbd9c05f715"

Получение определенной версии файла из Alfresco для отображения на странице

...
from ru.curs.showcase.util.alfresco import AlfrescoManager
...

def webtextParticularVersion(context, main, add, filterinfo, session, elementId):
    alfURL = "http://127.0.0.1:8080/alfresco"
    alfUser = "user222" 
    alfPass = "пароль"    
    
    alfTicket = ""
   
    alfFileId = "97cf8b94-0407-40ed-9582-711f4d42dfa0"
    
    alfVersionId = "" 

    
    resultLogin = AlfrescoManager.login(alfURL, alfUser, alfPass)
    if resultLogin.getResult() == 0:
        alfTicket = resultLogin.getTicket() 
        
        resultGetFileVersions = AlfrescoManager.getFileVersions(alfFileId, alfURL, resultLogin.getTicket());
        if resultGetFileVersions.getResult() == 0:
            versions = resultGetFileVersions.getVersions()
            
# Далее на основе полученных версий, находим идентификатор нужной нам версии. Предположим, что это
            alfVersionId = "b3984526-43e8-44d7-9ba5-b50318959750"
        else:
            context.error(resultGetFileVersions.getErrorMessage());
    else:
        context.error(resultLogin.getErrorMessage());           
    
    data = u'''
    <h1>
        <a href="#" onclick="gwtWebTextFunc('${elementId}','testIdClient');">Показать сообщение (client activity)</a>
        <br/>
        <a href="#" onclick="gwtWebTextFunc('${elementId}','testIdServer');">Показать сообщение (server activity)</a>
        <br/>        
        

  <a href="#">
<img src="http://127.0.0.1:8080/alfresco/service/api/node/content/workspace/version2Store/'''+alfVersionId+'''?alf_ticket='''+alfTicket+'''" 
   width="1100px" height="700px" alt="lorem"></img>
  </a>
  
        
    </h1>
    '''
    settings = u'''
    <properties>
        <event name="single_click" linkId="testIdClient">
             <action >
                <main_context>Москва</main_context>
                <client>
                    <activity id="activityClientID" name="showcaseShowAddContext">
                        <add_context>
                            add_context действия.
                        </add_context>
                    </activity>
                </client>
            </action>
        </event>
        <event name="single_click" linkId="testIdServer">
             <action >
                <main_context>Москва</main_context>
                <server>
                    <activity id="activityServerID" name="g1.activity.simple.celesta">
                         <add_context>
                             add_context для действия
                         </add_context>  
                    </activity>             
                </server>
            </action>
        </event>
    </properties>
    '''    

    return JythonDTO(data, settings)

Обратите, внимание, что, в отличие от получения файла, получение версии происходит по URL несколько другой конструкции,

получение файла

"http://127.0.0.1:8080/alfresco/service/api/node/content/workspace/SpacesStore/id"

получение версии файла

"http://127.0.0.1:8080/alfresco/service/api/node/content/workspace/version2Store/id"

Загрузка файла в Alfresco

...
from ru.curs.showcase.util.alfresco import AlfrescoManager
...

def uploadFile(context, main, add, filterinfo, session, elementId, data, fileName, file):

#    alfUploadParams = {}
#    alfUploadParams["siteid"] = "demo"
#    alfUploadParams["containerid"] = "documentlibrary"
#    alfUploadParams["uploaddirectory"] = "/abc"
    
    alfURL = "http://127.0.0.1:8080/alfresco"
    alfUser = "user222" 
    alfPass = "пароль"
    
    alfUploadParams = {}
    alfUploadParams["destination"] = "workspace://SpacesStore/4bb7e4a3-7281-4d37-ba80-bcd4cba22f45"
    alfUploadParams["uploaddirectory"] = "/test_folder1"
    
    
    resultLogin = AlfrescoManager.login(alfURL, alfUser, alfPass)
    if resultLogin.getResult() == 0:
        resultUploadFile = AlfrescoManager.uploadFile(fileName, file, alfURL, resultLogin.getTicket(), alfUploadParams);
        if resultUploadFile.getResult() == 0:
            context.message(u"Файл успешно загружен в Alfresco. Координаты файла в Alfresco: "+resultUploadFile.getNodeRef());            
        else:
            context.error(resultUploadFile.getErrorMessage());
    else:
        context.error(resultLogin.getErrorMessage());

При этом, сначала логинимся и получаем тикет, а затем передаем его в uploadFile для непосредственной загрузки файла

Получение метаданных файла из Alfresco

...
from ru.curs.showcase.util.alfresco import AlfrescoManager
...

def submitGetFileMetaData(context, main, add, filterinfo, session, data):
   
    alfURL = "http://127.0.0.1:8080/alfresco"
    alfUser = "user222" 
    alfPass = "пароль"
    
    alfFileId = "97cf8b94-0407-40ed-9582-711f4d42dfa0"
    
#    acceptLanguage = ""
    acceptLanguage = "en-US,en;"
#    acceptLanguage = "ru-RU,ru;"
    
    resultLogin = AlfrescoManager.login(alfURL, alfUser, alfPass)
    if resultLogin.getResult() == 0:
        resultGetFileMetaData = AlfrescoManager.getFileMetaData(alfFileId, alfURL, resultLogin.getTicket(), acceptLanguage);
        if resultGetFileMetaData.getResult() == 0:
            metaData = resultGetFileMetaData.getMetaData()

# Далее использование полученных метаданных
# ............

        else:
            context.error(resultGetFileMetaData.getErrorMessage());
    else:
        context.error(resultLogin.getErrorMessage());        

    return XMLJSONConverter.jsonToXml(data);

При этом, сначала логинимся и получаем тикет, а затем передаем его в getFileMetaData для получения метаданных файла

Пример возвращаемых метаданных

{
	"nodeRef": "workspace://SpacesStore/97cf8b94-0407-40ed-9582-711f4d42dfa0",
	"aspects": ["{http://www.alfresco.org/model/rendition/1.0}renditioned",
	"{http://www.alfresco.org/model/content/1.0}versionable",
	"{http://www.alfresco.org/model/system/1.0}referenceable",
	"{http://www.alfresco.org/model/content/1.0}taggable",
	"{http://www.alfresco.org/model/system/1.0}localized",
	"{http://www.alfresco.org/model/content/1.0}thumbnailModification",
	"{http://www.alfresco.org/model/forum/1.0}discussable",
	"{http://www.alfresco.org/model/exif/1.0}exif",
	"{http://www.alfresco.org/model/content/1.0}titled",
	"{http://www.alfresco.org/model/content/1.0}auditable",
	"{http://www.alfresco.org/model/forum/1.0}commentsRollup",
	"{http://www.alfresco.org/model/content/1.0}failedThumbnailSource",
	"{http://www.alfresco.org/model/content/1.0}author"],
	"mimetype": "image/png",
	"type": "{http://www.alfresco.org/model/content/1.0}content",
	"properties": {
		"{http://www.alfresco.org/model/exif/1.0}yResolution": 96,
		"{http://www.alfresco.org/model/content/1.0}created": "2015-08-18T10:48:52.081Z",
		"{http://www.alfresco.org/model/content/1.0}lastThumbnailModification": ["doclib:1440406448405",
		"imgpreview:1440406448898"],
		"{http://www.alfresco.org/model/content/1.0}description": "1Описание файла",
		"{http://www.alfresco.org/model/forum/1.0}commentCount": 3,
		"{http://www.alfresco.org/model/content/1.0}creator": "user222",
		"{http://www.alfresco.org/model/system/1.0}node-uuid": "97cf8b94-0407-40ed-9582-711f4d42dfa0",
		"{http://www.alfresco.org/model/content/1.0}name": "small.png",
		"{http://www.alfresco.org/model/content/1.0}content": "contentUrl=store://2015/8/24/11/58/bc8b6213-bb9a-4a8c-ac59-5bfbf2d13398.bin|mimetype=image/png|size=8596|encoding=UTF-8|locale=ru_RU_|id=320",
		"{http://www.alfresco.org/model/system/1.0}store-identifier": "SpacesStore",
		"{http://www.alfresco.org/model/content/1.0}versionLabel": "1.8",
		"{http://www.alfresco.org/model/content/1.0}autoVersion": true,
		"{http://www.alfresco.org/model/content/1.0}initialVersion": true,
		"{http://www.alfresco.org/model/exif/1.0}pixelYDimension": 12,
		"{http://www.alfresco.org/model/content/1.0}autoVersionOnUpdateProps": false,
		"{http://www.alfresco.org/model/content/1.0}title": "1Название файла",
		"{http://www.alfresco.org/model/exif/1.0}xResolution": 96,
		"{http://www.alfresco.org/model/content/1.0}taggable": null,
		"{http://www.alfresco.org/model/system/1.0}store-protocol": "workspace",
		"{http://www.alfresco.org/model/system/1.0}node-dbid": 866,
		"{http://www.alfresco.org/model/system/1.0}locale": "ru_RU",
		"{http://www.alfresco.org/model/content/1.0}modifier": "user222",
		"{http://www.alfresco.org/model/content/1.0}modified": "2015-08-24T08:58:09.220Z",
		"{http://www.alfresco.org/model/exif/1.0}pixelXDimension": 12,
		"{http://www.alfresco.org/model/content/1.0}author": "Boris1"
	}
}


Задание метаданных файла в Alfresco

...
from ru.curs.showcase.util.alfresco import AlfrescoManager
...

def submitSetFileMetaData(context, main, add, filterinfo, session, data):
   
    alfURL = "http://127.0.0.1:8080/alfresco"
    alfUser = "user222" 
    alfPass = "пароль"
    
    alfFileId = "97cf8b94-0407-40ed-9582-711f4d42dfa0"
    
#    acceptLanguage = ""
    acceptLanguage = "en-US,en;"
#    acceptLanguage = "ru-RU,ru;"
    
    metaData = unicode("{\"properties\":{\"title\":\"1Название файла\",\"description\":\"1Описание файла\"}}")
    
    resultLogin = AlfrescoManager.login(alfURL, alfUser, alfPass)
    if resultLogin.getResult() == 0:
        resultSetFileMetaData = AlfrescoManager.setFileMetaData(alfFileId, metaData, alfURL, resultLogin.getTicket(), acceptLanguage);
        if resultSetFileMetaData.getResult() == 0:
            context.message(u"Метаданные файла из Alfresco успешно заданы.");            
        else:
            context.error(resultSetFileMetaData.getErrorMessage());
    else:
        context.error(resultLogin.getErrorMessage());        
    
    return XMLJSONConverter.jsonToXml(data);

При этом, сначала логинимся и получаем тикет, а затем передаем его в setFileMetaData для задания метаданных файла


Получение версий файла из Alfresco

...
from ru.curs.showcase.util.alfresco import AlfrescoManager
...

def submitSetFileMetaData(context, main, add, filterinfo, session, data):
   
    alfURL = "http://127.0.0.1:8080/alfresco"
    alfUser = "user222" 
    alfPass = "пароль"
    
    alfFileId = "97cf8b94-0407-40ed-9582-711f4d42dfa0"
    
    resultLogin = AlfrescoManager.login(alfURL, alfUser, alfPass)
    if resultLogin.getResult() == 0:
        resultGetFileVersions = AlfrescoManager.getFileVersions(alfFileId, alfURL, resultLogin.getTicket());
        if resultGetFileVersions.getResult() == 0:
            versions = resultGetFileVersions.getVersions()

# Далее использование полученных версий
# ............
                       
        else:
            context.error(resultGetFileVersions.getErrorMessage());
    else:
        context.error(resultLogin.getErrorMessage());        
    
    return XMLJSONConverter.jsonToXml(data);

При этом, сначала логинимся и получаем тикет, а затем передаем его в setFileMetaData для задания метаданных файла

Пример полученных версий файла

[{
	"nodeRef": "versionStore:\/\/version2Store\/b3984526-43e8-44d7-9ba5-b50318959750",
	"name": "small.png",
	"label": "1.3",
	"description": "\u042d\u0442\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439",
	"createdDate": "18 \u0430\u0432\u0433 2015 16:42:06 GMT+0300 (MSK)",
	"createdDateISO": "2015-08-18T16:42:06.962+03:00",
	"creator": {
		"userName": "user222",
		"firstName": "user222",
		"lastName": ""
	}
},
{
	"nodeRef": "versionStore:\/\/version2Store\/72aa198e-c98b-4258-afb7-d97c2852b773",
	"name": "small.png",
	"label": "1.2",
	"description": "\u042d\u0442\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439",
	"createdDate": "18 \u0430\u0432\u0433 2015 16:41:51 GMT+0300 (MSK)",
	"createdDateISO": "2015-08-18T16:41:51.361+03:00",
	"creator": {
		"userName": "user222",
		"firstName": "user222",
		"lastName": ""
	}
},
{
	"nodeRef": "versionStore:\/\/version2Store\/9d873d2c-2a54-4d2f-9e8f-593fa34602e9",
	"name": "small.png",
	"label": "1.1",
	"description": "\u042d\u0442\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439",
	"createdDate": "18 \u0430\u0432\u0433 2015 13:51:14 GMT+0300 (MSK)",
	"createdDateISO": "2015-08-18T13:51:14.432+03:00",
	"creator": {
		"userName": "user222",
		"firstName": "user222",
		"lastName": ""
	}
},
{
	"nodeRef": "versionStore:\/\/version2Store\/87f24241-0f87-4338-bd03-155dfe2b5f38",
	"name": "small.png",
	"label": "1.0",
	"description": "",
	"createdDate": "18 \u0430\u0432\u0433 2015 13:48:52 GMT+0300 (MSK)",
	"createdDateISO": "2015-08-18T13:48:52.081+03:00",
	"creator": {
		"userName": "user222",
		"firstName": "user222",
		"lastName": ""
	}
}]

Удаление файла из Alfresco

...
from ru.curs.showcase.util.alfresco import AlfrescoManager
...

def submitDeleteFile(context, main, add, filterinfo, session, data):
    
    alfURL = "http://127.0.0.1:8080/alfresco"
    alfUser = "user222" 
    alfPass = "пароль"
    
    alfFileId = "50694ed0-63b7-47d8-8e54-67ad19e3c359"
  
    
    resultLogin = AlfrescoManager.login(alfURL, alfUser, alfPass)
    if resultLogin.getResult() == 0:
        resultDeleteFile = AlfrescoManager.deleteFile(alfFileId, alfURL, resultLogin.getTicket());
        if resultDeleteFile.getResult() == 0:
            context.message(u"Файл успешно удален из Alfresco.");            
        else:
            context.error(resultDeleteFile.getErrorMessage());
    else:
        context.error(resultLogin.getErrorMessage());        

    return XMLJSONConverter.jsonToXml(data);

При этом, сначала логинимся и получаем тикет, а затем передаем его в deleteFile для непосредственного удаления файла


Создание директории в Alfresco

...
from ru.curs.showcase.util.alfresco import AlfrescoManager
...

def submitCreateFolder(context, main, add, filterinfo, session, data):
   
    alfURL = "http://127.0.0.1:8080/alfresco"
    alfUser = "user222" 
    alfPass = "пароль"
    
    alfParentFolderId = "a9488807-c96c-41e9-a9ee-8a176ae1ccf6"    
    
    alfCreateFolderParams = unicode("{\"name\": \"Новая директория1\", \"title\": \"Заголовок новой директории1\", \"description\": \"Описание новой директории1\", \"type\": \"cm:folder\"}")    
    
    
    resultLogin = AlfrescoManager.login(alfURL, alfUser, alfPass)
    if resultLogin.getResult() == 0:
        resultCreateFolder = AlfrescoManager.createFolder(alfParentFolderId, alfCreateFolderParams, alfURL, resultLogin.getTicket());
        if resultCreateFolder.getResult() == 0:
            nodeRef = resultCreateFolder.getNodeRef()
# Далее использование nodeRef созданной директории
# ............

        else:
            context.error(resultCreateFolder.getErrorMessage());
    else:
        context.error(resultLogin.getErrorMessage());        

    return XMLJSONConverter.jsonToXml(data);

При этом, сначала логинимся и получаем тикет, а затем передаем его в createFolder для создания директории