Нужен GrepSearch для версии Terrasoft CRM 3.1

В нашей версии Terrasoft CRM 3.1 (бинарные файлы 3.1.0.41) нет функционала поиска текста по скриптам - GrepSearch. Напишите как его добавить. Пытался выгрузить с версии 3.3 и загрузить на версию 3.1, но выдает ошибку:
Неизвестный тип элемента ''

Нравится

12 комментариев

Скорее всего какой-то визуальный компонент, используемый в 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.

SDK

"Кошкаров Андрей" написал:Только что понял почему в версии 3.0 обошлись без GrepSearch.

Мне кажется, что не "обошлись", а просто его тогда ещё не придумали. Интересно другое, почему в новых версиях перестали вкладывать этот CHM?

"Зверев Александр" написал:Интересно другое, почему в новых версиях перестали вкладывать этот CHM?

Думаю из-за сложности ведения такой документации, трудоемкости этого процесса.

Дело в том, что продукты начали существенно отличаться между собой да и функционала стало в несколько раз больше.

Поэтому, файл бы принял вид целой энциклопедии. А если брать тот факт, что начинающим разработчикам в любом случае будет мало базовой информации, то пришлось бы выпускать целые тома по продукту - это не целесообразно.

А было бы неплохо...
dummies
Справочник по всем функциям действительно не особо нужен при наличии исходников, а вот бы систематизировать всякие паттерны для наиболее типичных доработок.

Показать все комментарии