Кастомизация
04
Июн
7

Файловый менеджер для CRM

Очень часто к MS CRM прикручивают функции файловых менеджеров, т.е. делают из него своего рода систему документооборота. Это нужно в основном для хранения различной документации по клиентам и договорам которые ведутся в CRM. Одним из наиболее упоминаемых способов является использование контролов SharePoint. Но SharePoint есть далеко не у всех и далеко не все захотят его установить ради одной «фичи» 🙂 Поэтому воспользуемся другими предложениями на рынке OpenSource! 🙂 И тут Вас ждет сюрприз… логично было бы использовать вместе с MS CRM файловый веб-менеджер на основе ASP.NET. Но к сожалению ситуация на этом фронте весьма печальна – их нет! А те что есть мягко говоря не очень (как по качеству так и по подаче материала). Поэтому обратимся к детищам других платформ (а что? никто не клялся в верности .Net’у 🙂 ). А именно – к PHP 🙂

Итак, задача на сегодня: прикрутить к MS CRM открытый файловый веб-менеджер elFinder (выбор был сделан как по критериям качества, так и по наличию русскоязычной документации и форуму поддержки)!

Дружим PHP и IIS

Т.к. elFinder работает на PHP, то первым делом нужно заставить IIS понимать этот язык (что он конечно, по идеологическим причинам, по дефолту делать не хочет 🙂 ). Приступим:

  • Для начала необходимо включить в IIS модуль FastCGI, с помощью которого и будет происходить работа PHP-интерпритатора:
  • Перейдите Start — All Progrms — Administrative Tools — Server Manager;
    • В дереве на левой панели разверните узел Roles и выделите пункт Web Server (IIS). Прокрутуте основную область до раздела Role Services и щелкните Add Role Services;
    • Откроется окно визарда в котором Вы сможете доустановить необходимые компоненты. В данном случае нам необходим только один – CGI – его и выделяйте галкой. Завершите установку.


  • Далее, с php.net качаем последний стабильный релиз PHP-интерпритатора (обязательно zip в виде бинарный файлов Windows). З.Ы. в данном примере используется версия 5.2.13 (локальное зеркало: php-5.2.13-Win32.zip). Разархивируйте архив в папку inetpub;
  • Откройте папку в которую разархивировали PHP и найдите файл php.ini-recommended. Переименуйте его в php.ini.



  • Сейчас осталось самую малость: заставить IIS использовать PHP-интерпритатор при обработке файлов с расширением *.php (основное расширение php-приложений). Но маленькое отступление: в целом можно настроить использование PHP-интерпритатора для всего IIS’а, но т.к. я собираюсь расположить elFinder в папке ISV\filemanager сайта CRM, то достаточно будет чтобы сопоставление файлов *.php (с PHP-интерпритатором) работало только для для этой папки. Поэтому:
    • Создайте в папке <сайт CRM>\ISV подпапку filemanager;
    • Откройте IIS и разверните иерархическое дереве сайта CRM до только что созданной папки filemanager;
    • В основной области IIS (представлении Features View) дважды щелкните на Handler Mappings.
    • Откроется список сопоставлений различных ресурсов (DLL-файлов например) с различными расширениями файлов. Нам необходимо добавить новое для *.php 🙂 Щелкните правой кнопкой где-нибудь на списке и выберите Add Module Mapping. В открывшемся диалоге сделайте такие настройки:
      • Request Path: *.php
      • Module: FastCgiModuale
      • Executable: путь к файлу php-cgi.exe, который находится в распакованном архиве (в данном примере архив был распакован в папку inetpub\php)
      • Name: любое имя для создаваемого сопоставления (лучше «гворящее» 🙂 )
    • Ну, что же… PHP настроен 🙂 пора настраивать файл-менеджер 🙂



П.С. В качестве теста Вы можете создать в папке filemanager файл test.php (название можете изменить) с таким содержимым:

<?php
phpinfo();
?>

И открыть его по URL:

http://<сервер CRM>/isv/filemanager/test.php

В браузере должна отобразится служебная информация об установленном PHP-интерпритаторе 🙂


Установка elFinder’а

  • Скачайте последнюю версию elFinder’а (в данном примере использовалась версия 1.1; локальная копия: elFinder 1.1);
  • Разархивируйте содержимое архива в папку filemanager, созданную на предыдущем этапе;
  • Переименуйте файл elfinder.php.html (расположенный в корневой директории) в elfinder.php и откройте в каком-нибудь текстовом редакторе. Замените его содержимое на следующее:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
       "http://www.w3.org/TR/html4/strict.dtd">
    
    <html lang="en">
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    	<title>elFinder</title>
    	<!--
    	<script type='text/javascript' src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>
    	-->
    	<link rel="stylesheet" href="js/ui-themes/base/ui.all.css" type="text/css" media="screen" title="no title" charset="utf-8">
    	<link rel="stylesheet" href="css/elfinder.css" type="text/css" media="screen" title="no title" charset="utf-8">
    
    	<!--	
    	<script src="js/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>
    	<script src="js/jquery-ui-1.8b1.min.js" type="text/javascript" charset="utf-8"></script>
    	-->
    
    	<script src="js/jquery-1.4.1.min.js" type="text/javascript" charset="utf-8"></script>
    	<script src="js/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="utf-8"></script>
    
    	<script src="js/elfinder.min.js" type="text/javascript" charset="utf-8"></script>
    
    	<script src="js/i18n/elfinder.ru.js" type="text/javascript" charset="utf-8"></script>
    
    
    	<script type="text/javascript" charset="utf-8">
    		$().ready(function() {
    			
    			var f = $('#finder').elfinder({
    				url : 'connectors/php/connector.php',
    				lang : 'ru'
    			})
    		});
    		
    		// Динамическое изменение размеров elFinder'а для заполнения всего доступного пространства
    		$(window).resize(function() {
    			var root = document.getElementById('finder');
    			root.childNodes[1].childNodes[0].style.height = (parent.document.body.clientHeight - 241);
    			root.childNodes[1].childNodes[1].style.height = (parent.document.body.clientHeight - 241);
    		});
    
    	</script>
    </head>
    <body>
    	<div id="finder">finder</div>
    </body>
    </html>
    
  • Откройте в текстовом редакторе файл filemanager\css\elfinder.css и внестие в него такие изменения:
    • Добавьте селектор для тега BODY:
      body {
      	margin: 0;
      	padding: 0;
      }
      
    • Удалите свойство width для класса .el-finder;
  • Далее открйте файл filemanager\connectors\php\connector.php и измените параметры root и URL в соответствии с расположением той папки, которая будет являться корневой дирректорией для файл-менеджера;




Нуссс, приготовления в самим elFinder’ом закончены, теперь займемся CRM 🙂

  • Откройте форму редактирования объекта, на котором хотите разместить файл-менеджер;
  • Добавьте новую вкладку и новый раздел на ней. В этотм размеле создайте iFrame:
    • В качестве URL iFrame’а укажите:
    • Обязательно снимите галку ограничивающую использование сценариев между кадрами;
    • Помимо этого поставьте галку разворачивать iFrame на всю доступную область, запретите полосы прокрутки и уберите отображение границ (настроки находятся на второй вкладке);
  • Публикуем и любуемся 🙂



З.Ы. По дефолту у учетки под которой работает сайт нет доступа на создание и/или изменение файлов в папке files (которую я использую в данном примере). Поэтому попытка закачать файл на сервер приведет к ошибке. Чтобы это исправить выдайте для этой папке (или той что используется у Вас) все права для учетке Everyone: правый щелчек по папке — Properties — вкладка Security — Edit — Add — ищем юзвера Everyone, Ок — выдаем все права — Ок 🙂



Комментарии (7)
  • Vladislav Osmanov 04.06.2010

    Интересно, но зачем разводить технологический зоопарк на сервере?

    Я бы посмотрел в сторону WebDAV. Пример: http://www.webdavsystem.com/ajaxfilebrowser

    Полностью скриптовый (JS) клиент.

    Хотя, через sharepoint, наверное, полегче будет: http://blogs.msdn.com/b/crm/archive/2007/04/18/integrating-windows-explorer-files-and-folders-into-crm-tabs.aspx

  • slivka_83 04.06.2010

    1. Цена 🙂
    2. SP — лень изучать (пока) 🙂

  • dio 04.06.2010

    Напишите коннектор на .net и мы включим его в дистрибутив efinder. Протокол довольно простой и хорошо документирован в нашем wiki http://elrte.ru/redmine/projects/elfinder/wiki/Client-Server_Protocol_RU

  • slivka_83 04.06.2010

    Ну, это будет несколько проблематично 🙂 Я не программист 🙂 а то что выше — это хобби 🙂

  • Владислав 04.06.2010

    Хорошее у тебя Хобби! Им можно на жизнь зарабатывать!

  • Павел 04.06.2010

    Здравствуйте! у меня стоит Microsoft WINDOWS Server 2003 R2 Standart Edition Service Pack 2.

    на нем в AdministrativeTools нет Service Manager а есть только Manager Your Server и там нет такого менб как у вас на скриншотах.

    Как мне в моем случае настроить PHP?

    Спасибо!

  • slivka_83 04.06.2010

    Ну, да там менюшки отличаются 🙂 но в интете полно опсаний, как поставить PHP на 2003 сервер
    http://www.google.ru/#hl=ru&source=hp&q=install+PHP+to+2003&aq=f&aqi=&aql=&oq=&gs_rfai=&fp=3f69c78786943c13

*

code