В нашей версии Terrasoft CRM 3.1 (бинарные файлы 3.1.0.41) нет функционала поиска текста по скриптам - GrepSearch. Напишите как его добавить. Пытался выгрузить с версии 3.3 и загрузить на версию 3.1, но выдает ошибку:
Неизвестный тип элемента ''
Нравится
Скорее всего какой-то визуальный компонент, используемый в 3.3, отсутствует в 3.1.
Можно из 3.2 попробовать выгрузить... Если тоже не получится загрузить сервисы, найти в чем конкретно причина сбоя и "подправить" исходный сервис/скрипт в оригинальной версии для совместимости
Андрей, предлагаю перенести сервисы с версии 3.3.1:
Кроме того, в приложении также есть экспериментальная бета-версия расширенного GrepSearch, если Вам интересно, можно принять участие в тестировании.
grep16.11.12_beta.rar
"Арсений Белецкий" написал:Андрей, предлагаю перенести сервисы с версии 3.3.1
Арсений, я как раз с этой версии и пробовал накатить GrepSearch и возникли ошибки. По поводу экспериментальной версии списибо, может посмотрю.
Установил версию 3.2 Х25, попытался накатить сервисы GrepSearch на версию 3.1 - возникли те же ошибки.
Начал переделывать select query, dataset, window и наткнулся на то, что в версии 3.1 такого метода как GetAttributeAsBinaryStr, поэтому не отрабатывает следующий код в скрипте wnd_GrepSearchScript функции FindTextInServiceType:
var ScriptText = GrepSearch.XMLStorage.RootNode.GetAttributeAsBinaryStr('Text', '');
Вот список методов, которые доступны в этой версии:
Каким образом можно получить текст скрипта, чтобы осуществить в нём поиск?
Получилось написать свою функцию как аналог функции GetAttributeAsBinaryStr, этот участок кода стал выглядеть так:
function FindTextInServiceType(RegExpToFind, ServiceType) { ... // здесь я доработал var HexString = GrepSearch.XMLStorage.RootNode.GetAttributeAsStr('Text', ''); var ScriptText = hex2str(HexString); FindTextInScript(ServiceCode, ScriptText, RegExpToFind); .... } // добавил функцию function hex2str(hex) { var str = ''; for (var i = 4; i < hex.length; i += 4) { str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); } return str; }
После этого GrepSearch начал выводить список мест, где был найден искомый текст, то есть это успех.
Но вот достигнуть открытия сервиса в администраторе не получилось, в движке не реализован метод DesignService для IServices и вот этот участок кода не отрабатывает:
var Designer = System.DesignService(ServiceCode);
Функционал копирования текста в буфер обмена в грид также не работает.
Для копирования текста из конкретной строки найденных результатов добавил кнопку "Инфо в лог". В результате нажатия этой кнопки, а также при двойном клике на конкретной строчке, в лог пишутся код сервиса, найденный текст, строка и позиция, что позволяет его дальше скопировать и осуществить поиск нужного сервиса в дереве администратора Террасофт, и найти текст в коде скрипта.
Поиск тормозит сильно по сравнению с более поздними версиями Террасофт.
Внешний вид окна GrepSearch:
Что получилось в итоге:
Возможность поиска текста по скриптам конфигурации без возможности прямого перехода в нужный сервис скрипта. Лучше, чем ничего :smile:
Сервисы прилагаю в архиве grepsearch_3.1.zip
А если просто импортировать всю конфигурацию в виде файлов и искать в коммандере по Alt+F7?
"Зверев Александр" написал:А если просто импортировать всю конфигурацию в виде файлов и искать в коммандере по Alt+F7?
Я думаю это будет довольно громоздко и не удобно постоянно выгружать и загружать сервисы в Администратор Террасофт. В данный момент я остановился с вопросом GrepSearch, дальше развивать эту тему не буду. То, что я получил, этого хватит.
Только что понял почему в версии 3.0 обошлись без GrepSearch. В этой версии есть описание всех функций базовых скриптов в виде SDK.
"Кошкаров Андрей" написал:Только что понял почему в версии 3.0 обошлись без GrepSearch.
Мне кажется, что не "обошлись", а просто его тогда ещё не придумали. Интересно другое, почему в новых версиях перестали вкладывать этот CHM?
"Зверев Александр" написал:Интересно другое, почему в новых версиях перестали вкладывать этот CHM?
Думаю из-за сложности ведения такой документации, трудоемкости этого процесса.
Дело в том, что продукты начали существенно отличаться между собой да и функционала стало в несколько раз больше.
Поэтому, файл бы принял вид целой энциклопедии. А если брать тот факт, что начинающим разработчикам в любом случае будет мало базовой информации, то пришлось бы выпускать целые тома по продукту - это не целесообразно.
А было бы неплохо...
Справочник по всем функциям действительно не особо нужен при наличии исходников, а вот бы систематизировать всякие паттерны для наиболее типичных доработок.