Объявление

Свернуть
Пока нет объявлений.

Show Rule

Свернуть
X
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

  • Show Rule

    Представляю простой инструмент, который показывает условия правила (Rule), скопированные в буфер, как строку.

    Для чего это нужно
    Иногда бывает, что правило выполнения action'a не помещается на экране целиком, или правило сложное (и написано не вами, или вами пару лет назад), а умный сервер убрал лишние скобки, которыми вы группировали условия, в общем хотелось бы это правило видеть целиком и желательно как текст - для медитации путем переставления условий местами.
    А иногда вы вносите изменения в условия правила, но хотели бы просто и быстро сохранить определение предыдущего варианта.

    Как сделать
    Cоздаем глобальную форму «ShowRule» - см. вложение.
    Свойства формы: Minimize, Maximize, Resizable.
    Свойства комбобокса «cbx_Folder»: Sorted.
    Свойства контрола «edt_FilterData»: Multiline, Word Wrap.
    Свойства контрола «edt_RuleAsString»: Multiline, Word Wrap.

    Скрипт на OnOpen формы:
    Код:
    For Each objFolder in ActiveSession.RequestFolders
        cbx_Folder.AddItem objFolder.Path, objFolder.UniqueId, -1
    Next
    Скрипт на OnClick кнопки «btn_AsString»:
    Код:
     If cbx_Folder.ListIndex = -1 Then
        edt_RuleAsString.Text = "не выбрана папка, в которой определен фильтр"
    Else
        If edt_FilterData.Text = "" Then
            edt_RuleAsString.Text = "фильтр не скопирован в поле выше"
        Else
            Set objFolder = ActiveSession.GetRequestFolderByUniqueId(cbx_Folder.ItemData(cbx_Folder.ListIndex))
            Set objFilter = objFolder.MakeFilter
            Execute "objFilter.Data = " & edt_FilterData.Text
            edt_RuleAsString.Text = Replace(objFilter.Rule.AsString, chr(10), vbCrLf)
        End If
    End If
    Скрипт на OnClick кнопки «btn_Clear»:
    Код:
    edt_FilterData.Text = ""
    edt_RuleAsString.Text = ""
    Скрипт на OnClick кнопки «btn_OK»:
    Код:
    Form.Close
    Форма готова, теперь в меню «Инструменты» создаем инструмент «ShowRule» со скриптом:
    Код:
    Set objForm = OpenForm("ShowRule", False)
    objForm.Show
    Готово. Очень просто – пара полей, кнопка, несколько строк скрипта.

    Как использовать
    Перед тем как открыть определение папки, запускаем из меню «Инструменты» инструмент «ShowRule».
    Заходим в наше правило (это может быть в Actions, в условиях отображения форм, в условиях на самих формах и т.д. где угодно) и копируем его в буфер в формате VBScript (кнопка справа).
    Вставляем из буфера в соответствующее поле нашего инструмента, выбираем папку, нажимаем кнопку.
    Теперь имеем правило в виде строки, которую можно обдумать расстановкой скобок и CrLf, скопировать в Description action’а и т.д.

    Как оказалось, чаще применяется для оперативного документирования, чем для разборок с правилами, но польза несомненно есть - за месяц использования больше нервов сэкономлено, чем пару часов потрачено.

    Где можно навести красоту (может у кого-то будет время и желание) – попробовать не выбирать папку руками, а брать ее автоматом из XML в поле edt_FilterData.
    Сергей Осадчий

  • #2
    Re: Show Rule

    Класс! А я их скриншотил обычно, деревня.
    С уважением,
    Цимбалистов Александр
    Команда российского форума OMNITRACKER
    http://www.omniway.ru/forum/

    Комментарий


    • #3
      Некроманта вызывали? прошу сильно не бить за воскрешение столь старой темы

      Развитие идеи (если этим кто-то пользуется конечно или интересно начать):
      • копировать надо не как VBS, а как XML - не надо будет делать "execute" для очистки XML от: " + _
      • достаточно 1 едита - не надо самому руками из клипбоарда вставлять - ОТ умеет клипбоард чтить.
      • выбирать папку самому руками не надо: она уже есть в XML => '<environment target_folder="700">'
      всякие проверки и сообщения добавляются по вкусу: наличие текста в буфере, например. это заготовка - рюшечки каждый рисует сам.

      по кнопке show:
      Код:
      Dim data : data = ActiveSession.Application.GetClipboardText
      Dim targetStr : targetStr = "environment target_folder=""\d*"
      Dim folderId
       
      dim matches, re : set re = CreateObject("VBScript.RegExp")
      re.pattern = targetStr
      re.IgnoreCase = True
      re.global = True
       
      Set matches = re.Execute(data)
      if matches.count > 0 then
          folderId = split(matches.item(0).value, """")(1)
          Set objFolder = ActiveSession.GetRequestFolderByUniqueId(cint(folderId))
          cbx_Folder.value = objFolder.path
          Set objFilter = objFolder.MakeFilter
          objFilter.Data = data
          edt_RuleAsString.Text = Replace(objFilter.Rule.AsString, Chr(10), vbCrLf)
      end if
      или форма целиком (сохранить в файл "show rule.xoo", импортировать в глобальных формах и повесить на пункт меню "инструменты"):

      Комментарий

      Обработка...
      X