Страницы

пятница, 3 февраля 2012 г.


Коннекторы Bonita к Alfresco


Для взаимодействия с Alfresco нужно использовать CMIS.
Для взаимодействия с Alfresco из Bonita нужно создать или использовать существующие коннекторы.


Коннектор - это Java класс, наследующий от org.ow2.bonita.connector.core.ProcessConnector.
Для создания коннекторов удобно использовать библиотеку Apache Chemistry. http://chemistry.apache.org/

Установка Apache Chemistry

  1. Скачиваем отсюда. http://chemistry.apache.org/java/download.html
  2. Кладем все .jar в lib Tomcat.

Разработка коннектора

Каждый коннектор состоит из 3-х файлов:
  1. ConnectorName.java - класс, реализующий логику коннектора (CreateFolder.java)
  2. ConnectorName.properties - свойства коннектора. (CreateFolder.properties)
  3. ConnectorName.xml - объявления интерфейса коннектора. (CreateFolder.xml)
Для взаимодействия с Alfresco с помощью Apache Chemistry нужно:
  1. Создать сессию
    SessionFactory f = SessionFactoryImpl.newInstance();
    Map<String, String> params = new HashMap<String, String>();
    params.put(SessionParameter.USER, username); 
    params.put(SessionParameter.PASSWORD, password);
    params.put(SessionParameter.ATOMPUB_URL, alfresco_url + "/service/cmis");
    params.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value()); 
    Session session = f.getRepositories(params).get(0).createSession();
    
  2. Получить объект, например документ:
    Folder folder = (Folder)session.getObject(session.createObjectId(folder_id));
    
  3. Использовать методы объекта для реализации действий

Разработка бизнес-процесса в Bonita

Открываем студию и обычным образом создаем процесс.
Для взаимодействия с Alfresco с использованием наших коннекторов нужно:

  1. Импортировать коннекторы, указав jar.
  2. Добавить коннектор к действию.
Для всех коннекторов нужны следующие переменные и их рекомендуемые значения:
Для коннектора создания папки CreateFolder нужны следующие переменные и их значения как пример:
  • parent_folder_name = /Договоры
  • folder_name = regId, который вычисляется на основе текущего времени
    пример вычисления regId:
    import java.security.*;
    byte bytesOfMessage = System.currentTimeMillis().byteValue();
    MessageDigest md = MessageDigest.getInstance("MD5");
    byte[] digest = md.digest(bytesOfMessage);
    BigInteger bigInt = new BigInteger(1,digest);
    return "07-03-" + bigInt.toString(10).substring(0, 3);
    
Для коннектора создания документа CreateDocument нужны следующие переменные и их значения как пример:
  • folder_id
  • document_name = regId, который вычисляется на основе текущего времени
  • document_type = D:iot:contract
Для коннектора обновления свойств документа UpdateDocument нужны следующие переменные и их значения как пример:
  • properties, например:
    Map<String, Object> ps = new HashMap<String, Object>();
    ps.put("iot:contract_number", contractNumber);
    ps.put("iot:reg_id", regId);
    ps.put("iot:contract_subject", contractSubject);
    ps.put("iot:contract_sum", contractSum);
    return ps;

Комментариев нет:

Отправить комментарий