TreeView во всех браузерах, использующих JQuery вместо VBScript в ActiveX Control - PullRequest
2 голосов
/ 13 сентября 2011

Существует TreeView, которым наша команда пользуется уже три или четыре года, что дает нашим пользователям Internet Explorer возможность просто просматривать данные из базы данных MS Access и MSSQL 2005 Server в одном списке TreeView.

С момента разработки этого у нас возникла дилемма. Пользователям начинают разрешать использовать Google Chrome и Firefox, которые не были включены в исходный вариант использования и не совместимы с элементом управления TreeView ActiveX. Этот объект закодирован вне Internet Explorer. Я полагаю, что оригинальная идея для этого пришла от этого типа Windows Common Control .

Что может быть простой альтернативой, позволяющей сделать это возможным с использованием JQuery или другой технологии, при условии, что в настоящее время существует ограничение на недоступность серверных сценариев ?

Опять же, цель здесь - сделать его совместимым с большинством основных браузеров.

Примечание: я пытался сделать доступными сценарии на стороне сервера, но это не вариант для этого проекта. Таким образом, ответы должны , а не с использованием JSP, PHP, ASP и т. Д. Вместо этого попытка найти способ сделать это с использованием локального файла в общая сеть .

И да, я знаю уязвимости безопасности, связанные с этим типом установки ... независимо от того, каково было направление.

Например, вот используемый объект:

 <body onload="SetupPage()">
      <object classid="CLSID:C74190B6-8589-11D1-B16A-00C0F0283628" id="MainTree" width="100%" height="290" style="font-family: times new roman; font-size: 16px; Visibility: visible">
        <param name="Style" value="7">
        <param name="_ExtentX" value="5292">
        <param name="_ExtentY" value="10583">
        <param name="_Version" value="393217">
        <param name="HideSelection" value="0">
        <param name="Indentation" value="767">
        <param name="LabelEdit" value="0">
        <param name="LineStyle" value="1">
        <param name="PathSeparator" value="\">
        <param name="Sorted" value="0">
        <param name="Checkboxes" value="0">
        <param name="FullRowSelect" value="0">
        <param name="HotTracking" value="1">
        <param name="Scroll" value="1">
        <param name="SingleSel" value="0">
        <param name="ImageList" value="ImgList">
        <param name="BorderStyle" value="1">
        <param name="Appearance" value="1">
        <param name="MousePointer" value="0">
        <param name="Enabled" value="1">
        <param name="OLEDragMode" value="0">
        <param name="OLEDropMode" value="0">
      </object>
      <object classid="CLSID:2C247F23-8591-11D1-B16A-00C0F0283628" id="ImgList" width="0" height="0" style="visibility: hidden"></object>
  <IFrame id="PrtFrame" style="width: 0px; height: 0px">
  </IFRAME>
 </body>

После размещения этого объекта в теле веб-страницы вызов некоторого VBScript позволяет заполнить этот объект, используя что-то вроде следующего:

 <script language="vbscript">

    Sub SetupPage()

        Call MainTree.Nodes.Clear
        Call PopulateImageList
        Call PopulateTree

    End Sub

    Sub PopulateTree()

        Dim rs       ' RecordSet
        Dim i        ' Index
        Dim ndParent ' Parent Node

        ' Assign the main html form to a variable xfrm
        Set xfrm = document.MainForm

        ' Setup a connection with the Database
        Set AccessConn = CreateObject("ADODB.Connection")
        AccessConn.open AccessConnectionString
        strSQL = "SELECT..."
        Set rs = AccessConn.Execute(strSQL) 

        ' Manually set the parent nodes
        i = 1
        Set ndActive = MainTree.Nodes.Add(, 2, "IDC" & i, "Active", ImageIndex("active"))

        ' Move one forward, since the parent node was set manually
        i = i + 1
        Do While rs.EOF = False

            ' Add the detail to each parent node for each record returned...
            rs.MoveNext
        Loop
        ' etc...
    End Sub

    Sub PopulateImageList()

      Dim lst
      set lst = ImgList.ListImages.Add(1,"header",LoadPicture(DirectoryPath & "TreeImages\header.gif"))
      set lst = ImgList.ListImages.Add(2,"hold",LoadPicture(DirectoryPath & "TreeImages\hold.gif"))
      set lst = ImgList.ListImages.Add(3,"reviewed",LoadPicture(DirectoryPath & "TreeImages\reviewed.gif"))
      set lst = ImgList.ListImages.Add(4,"completed",LoadPicture(DirectoryPath & "TreeImages\completed.gif"))
      set lst = ImgList.ListImages.Add(5,"rejected",LoadPicture(DirectoryPath & "TreeImages\rejected.gif"))
      set lst = ImgList.ListImages.Add(6,"printed",LoadPicture(DirectoryPath & "TreeImages\printer.gif"))
      set lst = ImgList.ListImages.Add(7,"active",LoadPicture(DirectoryPath & "TreeImages\active.gif"))
      set lst = ImgList.ListImages.Add(8,"archived",LoadPicture(DirectoryPath & "TreeImages\archived.gif"))
      set lst = ImgList.ListImages.Add(9,"emailed",LoadPicture(DirectoryPath & "TreeImages\emailed.gif"))
      set lst = ImgList.ListImages.Add(10,"assigned",LoadPicture(DirectoryPath & "TreeImages\assigned.gif"))

    End Sub
 </script>

Как только данные доступны в исходной базе данных, все, что нужно сделать пользователю, это открыть локальный файл в общей сети, и он увидит что-то вроде следующего: TreeView Picture Example

Будем весьма благодарны за любые идеи или методы для достижения этой цели.

Ответы [ 2 ]

1 голос
/ 16 января 2012

Вы можете использовать Access для обработки привязки данных, а затем использовать элемент управления веб-браузера (т.е. Internet Explorer), который динамически заполняется требуемым содержимым. Используя document.write, вы можете заполнить весь контент, не создавая HTML / JS / CSS на хост-машине. Для изображений вы можете просто вставить DataURI.

Вы можете связывать события, как требуется для взаимодействия с пользователем, это не красиво, но обеспечивает контролируемую среду (вы заставляете их использовать IE, не предоставляя им никакого исходного кода) и не требует специального взаимодействия с базой данных (поскольку MS Access делает все что для тебя).

MSDN имеет несколько статей о контроле: http://msdn.microsoft.com/en-us/library/aa752041(v=vs.85).aspx.

Я действующий военно-воздушный флот, работаю над «веб-приложением» для подразделения в Европе с очень похожими ограничениями. В итоге я использовал MS Access для запуска IE и перехвата событий Navigate2 для обработки. В Интернете у меня есть своего рода язык шаблонов на основе jQuery, который я создаю, чтобы справиться со всеми интересными SQL. Это позволяет мне писать приложение полностью на HTML / JS / CSS, в то время как Access обрабатывает собственно привязку JET. Он все еще находится в разработке, но когда я закончу, я добавлю созданную мной программу запуска C ++, чтобы пользователь запустил мой EXE-файл из сети, который запустит невидимый экземпляр Access, и пользователь увидит только экземпляр IE и приложение. .

https://github.com/jeff-mccoy/EET-Scenario-Builder

1 голос
/ 14 сентября 2011

Хорошо, давайте посмотрим на проблему под другим углом ... Забудем о доступе к базе данных со стороны клиента [JavaScript].Тогда что?Просто используйте SQL Server в качестве веб-сервера для извлечения данных.Он называется Конечная точка HTTP .Таким образом, вы можете реализовать логику доступа к данным на стороне SQL Server (в том числе в MS Access через любой из доступных интерфейсов).Итак, теперь веб-служба SQL Server возвращает данные, которыми можно манипулировать на стороне клиента (AJAX) с помощью jQuery (, прочитайте это для получения дополнительной информации ).

Вот несколько ссылок, которые я нашел длячасть конечной точки:

http://www.simple -talk.com / sql / администрация базы данных / sql-сервер-конечные точки-суп-к-орехам /

http://mscerts.programming4.us/sql_server/sql%20server%202008%20%20sql%20server%20web%20services%20-%20building%20web%20services%20(part%201).aspx

Я никогда не реализовывал конечную точку SQL Server, поэтому не могу сказать, легко это или нет.Тем не менее, я сделал подобное в базе данных InterSystems Cache , и это сработало очень хорошо.

Вот как я это вижу в любом случае ...

PS Я немного запутался сваш локальный файловый подход

...