|
Открытые ресурсы (netfile)
Введение
|
      
Сетевая файловая система построенная на модели разделяемых (shared) ресурсов от Microsoft исползуется повсеместно для организации, так сказать,
единого информационного пространства доукментов, отчетов, таблиц и т.п. Как правило, доступ к этим документам с возможностью внесения изменений
трбуется нескольким сотрудникам. Если именно данная модель используется и в вашей организации, то несомненно, рано или поздно вы столкнетесь с проблемой
"блокировки" требуемого вам файла. Заячастую, выяснить пользователя, который "держит" нужный документ вам просто не хватает полномочий.
     
Описываемый COM-компонент предоставляет вам способ выяснить "держателя" документа и в случае необходимости отключить его, тем самым разблокировав
документ. Естественно, что применять такого рода меры можно только в крайних случаях - для начала вы можете просто попросить человека "отпустить"
необходимый файл или каталог, однако, бывают ситуации, когда, например, сотрудник уже ушел с работы, заболел или просто оставил открытым каталог
в одной из панелей Far-а на ночь.
|
Установка
|
      
Компонент регистрируется на том сервере, ресурсы которого вам необходимо контролировать. Его необходимо запускать под учетной записью, входящую
в группу локальных администраторов сервера (сделать такие настройки можно при помощи DCOM). Пути к открытым ресурсам представляются в локальном формате,
однако отключать пользователей от ресурсов можно и по UNC-пути. Для наделения эксклюзивными полномочиями отключать пользователей от ресурсов
инсталлируйте данный компонент как COM+ Application, настроив роли, вы сможете более четко управлять этими правами.
|
Описание интерфейса
|
| getOpenFiles([out, retval] BSTR *xml) - возвращает xml-документ содержащий информацию об используемых ресурсах. |
| getServerName([out, retval] BSTR *pName) - возвращает имя сервера, на котором осуществляется мониторинг ресурсов. |
| closeFile([in] BSTR path) - отключает пользователей от заданного ресурса. Путь может быть как локальным так и в UNC-формате. |
|
Идентификация
|
ProgID | IPM.NetFile |
Потоковая модель | Apartment |
CLSID | {7A8ABF2C-2B37-4A21-828D-0374034384D7} |
Версия | 1 |
|
Список открытых ресурсов
|
      
Функция getOpenFiles возвращает xml-документ следующей структуры:
<?xml version="1.0" encoding="UTF-8" ?>
<files srvname="WER">
<file path="e:\temp" user="SAVITSKYEVGENY"/>
<file path="e:\projects" user="POPOVRUSGEN"/>
</files>
|
Пример использования
|
      
Далее предлагается пример .asp-страницы, которая отображает список файлов и пользователей открывших их на вашем
внутрикорпоративном сайт и позволяет сотрировать список либо по ресурсам, либо по пользователям.
=================== openfiles.asp =================
<html>
<% @Language = "VBScript" %>
<%
Set net = CreateObject("IPM.netfile")
Set files = CreateObject("Microsoft.XMLDOM")
files.async = false
files.loadXML net.getOpenFiles
Set filesxsl = CreateObject("Microsoft.XMLDOM")
filesxsl.async = false
filesxsl.load Server.MapPath("OpenShareList.xsl")
%>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1251">
</head>
<%
szSortType = request("sort")
<!-- сортировка по пользователю или пути -->
Set sort = filesxsl.documentElement._
selectSingleNode("xsl:template/body/table" & _
"/tr/td/table/xsl:apply-templates/xsl:sort")
if not sort is Nothing then
if szSortType = "user" then
sort.setAttribute "select", "@user"
end if
if szSortType = "path" then
sort.setAttribute "select", "@path"
end if
end if
response.write files.transformNode(filesxsl)
Set sort = Nothing
Set filesxsl = Nothing
Set files= Nothing
Set net = Nothing
%>
</html>
============================================
      
Файл xsl-преобразований представлен ниже. В его задчу входит на основании xml-документа
со списком ресурсов и пользователей сформировать html-документ для отображения на странице:
======================== opensharelist.xsl ==========
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/files">
<head>
<title>Список открытых файлов на сервере
<xsl:value-of select="@srvname"/>
</title>
<style type="text/css">
body, td, p { font-family: Verdana, Arial,
Helvetica, sans-serif; font-size: 8pt}
.book { font-size: 12pt; color:black;}
.course { color:black;
border-bottom:.5pt solid #e0f0ee;
border-top:.5pt solid #e0f0ee;
border-left:.5pt solid #e0f0ee;
border-right:.5pt solid #e0f0ee;}
</style>
</head>
<body>
<table border="0" cellpadding="0" cellspacing="0" width="99%">
<tr valign="top">
Список открытых файлов на сервере
<xsl:value-of select="@srvname"/>:
</tr>
<tr>
<td height="5"/>
</tr>
<tr>
<td>
<table border="0" cellpadding="0" cellspacing="0" width="99%">
<tr><td width="2%" height="35" />
<td>
<table border="0" cellpadding="0" cellspacing="0" width="99%">
<tr><td width="15%">
<a href='OpenShareList.asp?sort=user'>Пользователь</a>
</td>
<td>
<a href='OpenShareList.asp?sort=path'>Путь к ресурсу</a>
</td></tr>
</table>
</td></tr>
<xsl:apply-templates select="file">
<xsl:sort data-type="text" select="@path"/>
</xsl:apply-templates>
</table>
</td>
</tr>
</table>
</body>
</xsl:template>
<xsl:template match="file">
<tr><td width="2%"/>
<td>
<table border="0" cellpadding="0" cellspacing="0" width="99%">
<tr>
<td width="15%">
<xsl:value-of select="@user"/>
</td>
<td>
<xsl:value-of select="@path"/>
</td>
</tr>
</table>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
===============================================
|
|
|