> проекты > компоненты инфраструктуры
Открытые ресурсы (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>
    ===============================================

     Evgeny Savitsky © 2002-2003