понедельник, 13 января 2014 г.

Редактирование текстового фала с помощью PowerShell или как я делал обновляемый телефонный справочник в формате HTML на портале

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

Проблема


Для удобство пользователей решили разместить телефонный справочник в виде Excel таблицы.  Данные из учетной системы выгружаются в файл и этот файл необходимо визуализировать.
 В начале, т.к. данные выгружались в файл Excel, я решил использовать веб чать отображения Excel. Но веб часть не масштабировалась под размер таблицы, нужно было руками указывать высоту или была прокрутка в веб части (что не совсем удобно). Посмотрев учетную систему, увидели что можно выгружать данные в html. Кажется, что может быть легче, положил на страницу веб часть «Редактор контента» или «Просмотр HTML» и все, но оказалось немного сложнее. В файле HTML находился блок со стилем, который не только делал таблицу телефонного справочника приятной к просмотру, но и ломал разметку страницы SharePoint (логотип скрывался, окно для поиска становилось маленьким, на рибоне все становилось жирным шрифтом и т.д.)


Пример рибона
Пример изменения шрифтов в параметрах веб части




В начале я решил создать файлик CSS в котором указывал тот блок который «ехал», файл сохранил в библиотеке, на страницу с телефонным справочником клал еще одну веб часть «Редактор контента» и открывая ею файлик CSS. Частично мне это помогло. Результат все равно еще меня не устраивал.

Решение


Потом я вспомнил про замечательную программу PowerShell.
Написал скрипт, который брал файлы, выгруженные из учетной системы, удалял из них строки не нужного кода, модифицировал  и сохранял их в библиотеку SharePoint. А дальше файлы открывал веб частью «Редактор контента».
Создал задание на сервере, которое запускается с определённым периодом и выполняет PowerShell  скрипт.

Поясню код:


(get-content "C:\export\$file") – путь откуда берутся файлы
| where {$_ -ne ‘ не нужная строка'} – удаляем не нужную строку, таким образом можно удалять много строк.
| Foreach-Object {$_ -replace 'table-layout: fixed','table-layout: auto'} – меняем значения в строке, в моем случае «fixed»  на «auto»
| out-file \\server\davWWWroot\Shared%20Documents\$file  - конечная библиотека в SharePoint

Сам код:

 

# перечень нужных мне файлов
$files=
"Телефонный справочник_Москва.htm",
"Телефонный справочник_Филиалы.htm"

foreach ($file in $files)
{
(get-content "C:\export\$file") | where {$_ -ne 'body { background: #ffffff; margin: 0; font-family: Arial; font-size: 8pt; font-style: normal; }'} | where {$_ -ne '<BODY STYLE="background: #ffffff; margin: 0; font-family: Arial; font-size: 8pt; font-style: normal; ">'} | where {$_ -ne '<BODY STYLE="background: #ffffff; margin: 0; font-family: Calibri; font-size: 10pt; font-style: normal; font-weight: bold; ">'} | where {$_ -ne'td { padding: 0px; padding-left: 2px; overflow:hidden; }'} | where {$_ -ne '</BODY>'}| where {$_ -ne 'body { background: #ffffff; margin: 0; font-family: Calibri; font-size: 10pt; font-style: normal; font-weight: bold; }'} | where {$_ -ne'body {background: #ffffff; margin: 0; font-family: Calibri; font-size: 10pt; font-style: normal; font-weight: bold; }'} | Foreach-Object {$_ -replace 'table-layout: fixed','table-layout: auto' -replace '<TABLE style="width:0px; height:0px; " CELLSPACING=0>' , '<TABLE>'}  | out-file "\\server\davWWWroot\Shared%20Documents\$file"
write-host $file "- загружен"
}