SharePoint Alfresco PHP MySQL
О сайте Контакты
суббота, 23 апреля 2011 г.

Текст комментариев в RSS Alfresco

woodpeckerAlfresco ECM – удобная платформа для организации корпоративного документооборота и совместной работы. Пользователи могут генерировать новые документы, порождая их в процессе прозрачных обсуждений. Естественно, хочется получать уведомления о новых постах и комментариях к документам. По умолчанию Alfresco может транслировать RSS ленты событий пользователя, где участник может видеть все события, происходящие на его сайтах. Здесь есть досадное неудобство: в RSS не приходит текст комментария, тело и тема  в RSS Alfresco полностью совпадают. Как это исправить, я опишу далее.

Все действия пользователей попадают в подсистему Activity Service. Само действие совершается посредством подпрограмм JavaScript, в функциях которых имеется вызов процедур отправки в хранилище событий. Почему-то разработчики Alfresco Community сознательно заложили туда отправку одинаковых тела и темы RSS.

Сформированное сообщение проходит через шаблонизатор, который оборачивает строки в соответствии с локальными языковыми настройками.

Пример из файла activity-list.get.properties:

org.alfresco.comments.comment-updated={1} updated comment on {0}

Переменные в фигурных скобках – это и есть те сущности, которые попадают в Activity Service. Их значение описывается в самом файле в виде комментария:

## 0 = Item title / page link, 1 = User profile link, 2 = custom0, 3 = custom1, 4 = Site link

magpieФайл activity-list.get.properties существует для каждого языка, в том числе и для русского. Таким образом, именно благодаря этому шаблону сообщений мы можем получать русскоязычный текст в нашем RSS. Сразу обратим внимание на переменную custom0, ее код – {2}, и она не используется в этом файле. Мы будем ее использовать.

{4} - ссылка на сайт, {0} - в зависимости от контекста либо заголовок, либо ссылка на страницу, {1} - ссылка на профиль пользователя.

Чтобы обернуть текстовые сообщения в вид потока RSS, используется файл activity-list.get.atomfeed.ftl. Обратим внимание на его странную особенность:

<#assign detailHTML = msg(activity.type, itemLink, userLink, activity.custom0, activity.custom1)>     
  <#if mode = "user" && !activity.suppressSite><#assign detailHTML = msg("in.site", detailHTML, siteLink)></#if>      
  <#if activity.custom0 != ""><#assign detailHTML = activity.custom0></#if>      
  <summary type="html">      
    <![CDATA[${msg(detailHTML)}]]>      
  </summary>

Особенность в том, что механизм получения title и summary практически идентичен (title по коду выше, я не стал его здесь приводить). Красным я выделил добавленную мной строку. Ее суть в том, чтобы при непустом поле custom0 выводить его в качестве тела сообщения RSS, иначе по умолчанию туда выведется то же самое, что и в title.

Теперь необходимо подготовить сами сообщения для использования поля custom0. Ниже я опишу, какие изменения и в каких файлах нужно сделать.

Директория \Alfresco\tomcat\webapps\alfresco\WEB-INF\classes\alfresco\templates\webscripts\org\alfresco\repository\links

Файл links.post.json.js

var siteId = url.templateArgs.site;     
   var linkUrl = json.get("url");      
   
   var data =      
   {      
      title: json.get("title"),      
      page: json.get("page") + "?linkId=" + nodeName,      
      custom0: json.get("description") + "<br/><a href='" + linkUrl + "'>" + linkUrl + "</a>"      
   };

Файл links.put.json.js – сделать то же самое, что указано выше.

Директория \Alfresco\tomcat\webapps\alfresco\WEB-INF\classes\alfresco\templates\webscripts\org\alfresco\repository\discussions\posts

Файл forum-post.put.json.js

var data =     
         {      
            title: topicData.post.properties.title,      
            page: json.get("page") + "?topicId=" + topicData.topic.name,      
            custom0: model.postData.post.content,      
            params:      
            {      
               topicId: topicData.topic.name      
            }      
         }

Файл forum-post-replies.post.json.js

var data =     
      {      
         title: topicData.post.properties.title,      
         page: json.get("page") + "?topicId=" + topicData.topic.name,      
         custom0: model.postData.post.content      
      }

Директория \Alfresco\tomcat\webapps\alfresco\WEB-INF\classes\alfresco\templates\webscripts\org\alfresco\repository\discussions\forum

Файл forum-posts.post.json.js

var data =     
      {      
         title: model.postData.post.properties.title,      
         page: json.get("page") + "?topicId=" + model.postData.topic.name,      
         custom0: model.postData.post.content      
      }

После применения всех вышеуказанных действий Alfresco начнет использовать поле custom0 и выводить его в качестве тела сообщения. Таким образом, в RSS можно делать абсолютно любые преобразования, и даже добавлять события по своему усмотрению.

Sergey Lysenko, суббота, 23 апреля 2011 г.

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