Простой скрипт для вызова SOAP веб-сервиса из конфигуратора

17.06.16

Интеграция - WEB-интеграция

Этой публикации не было бы без "Расширяем конфигуратор без Снегопата и ТурбоКонфа" http://infostart.ru/public/339035/

На уникальность нисколько не претендую, но хотел бы поделиться опытом и показать, что эту тему можно развивать "под себя", а не только пользоваться готовыми решениями.

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Для инфостарта.zip
.zip 2,41Kb
0
0 Скачать (1 SM) Купить за 1 850 руб.

Предисловие: стандарт документирования кода в нашей организации обязывает вставлять метки-идентификаторы задачи непосредственно в код 1С, а также в поле "Комментарий" к новым объектам. Удобство такого подхода никому доказывать не нужно. Что делает разработчик, когда видит такую метку? Выделяет идентификатор, ctrl+c, открывает учетную систему, поиск, ctrl+v, открывается веб-страничка... И так для каждой метки. При обновлении конфы можно запариться. А что если делать всё это хоткеем?

Но ведь API конфигуратора 1с закрыт, скажете вы (неслышавшие про опенконф и снегопат). Пользующиеся снегопатом пойдут писать скрипт для снегопата. Знающие про удобство и простоту AutoHotkey пойдут писать скрипт под него.

И отправят коллегу писать веб-сервис в системе учета задач =)

Всё ниженаписанное предназначено в основном для тех, кто не писал раньше подобный скрипт для конфигуратора (я начинал с нуля).

Инструментарий: AutoHotkey (free), блокнот для написания JavaScript, браузер для его тестирования. JavaScript тут нужен для расширения возможностей AutoHotkey в плане вызова веб-сервиса.

Забегая вперед скажу, что AHK нужен только для написания и отладки, потом его можно смело удалять, и скрипт продолжит работать без него.

Итак, ознакомьтесь с документацией AHK на русском тут.

Скачали AHK, запускаем скрипт KeyCodes.ahk (есть во вложении) для определения скан-кода горячей клавиши. Ну и пишем код соответственно задаче. Язык AHK похож на основные языки программирования.

Далее просто приведу мой скрипт с комментариями:

return


!sc21:: ; alt+F - сканкод (!-alt и sc21-f)
AutoTrim On ; Не Сохраняет любой межстрочный интервал и пробел в конце текстовой строки в буфере обмена.
ClipboardOld = %ClipboardAll%; переменная буфера обмена
Clipboard = ; Чтобы обнаружение заработало, нужно начать с пустого значения.
Send ^{sc2E} ; имитация нажатия CTRL+C
ClipWait 1 ; обработчик ожидания
if ErrorLevel ; Время ожидания ClipWait вышло.
	return
;
IfInString, Clipboard, rfc - ищем в строке кодовую метку "rfc"
{
StringReplace, Clipboard, Clipboard, rfc, RFC, All - если есть "rfc", то заменяем на "RFC" (разработчик может ошибиться и написать как ему удобно, но стандарт предписывает писать в верхнем регистре)
}
StringGetPos, pos, Clipboard, RFC - определяем позицию начала метки
;
StringTrimLeft, Clipboard, Clipboard, pos - образаем всё, что слева от нее
;
Result := StrLen(Clipboard) - вычисляем длину оставшейся строки
;
ResultTr := Result - 10 - вычисляем сколько нужно отрезать справа (метка всегда состоит из 10 символов)
;

StringTrimRight, RFC, Clipboard, ResultTr - образаем всё справа
;

RunWait, wscript.exe JSrfc.js %RFC% - запускаем JavaScript, передаем ему параметр (метку вида RFC-000001)
;
FileRead, newText, tmp\result.tmp - ответ от веб-сервиса JS пишет в промежуточный файл, читаем его
ClipWait, 1
Clipboard := newText - помещаем прочитанное в буфер обмена
ClipWait, 1

if (Clipboard = "http://tfs_server/NOT_FOUND") {
MsgBox, Ошибка: задача не найдена! - выводим окно с ошибкой
}
else {
try {
    Run, %Clipboard%, , max - открываем http-ссылку на задачу (запустится веб-браузер, назначенный по умолчанию)
} catch e {
}
}
return
;

Теперь раскажу, что мне понадобилось для написания вызова веб-сервиса из JS.

Вначале мы протестируем веб-сервис и заодно получим структуру Soap-запроса. Очень удобно это делать с помощью SoapUI.

Тестирование и отладку JS в основном делал в IE11, тк FireBug в мозилле неверно интерпретировал ошибку, из-за чего было убито много времени на решение несуществующей проблемы.

Ниже код JS с комментариями:

function Run() //главная функция
{
arg=WScript.Arguments; //тут как раз содержатся передаваемые параметры

            var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); //создается объект XMLHTTP
           
            var sr = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v="http://адрес/omniintegration/v1"><soapenv:Header/><soapenv:Body><v:GetLinksToWIOneS><v:RfcId>'
+arg(0)+ 
'</v:RfcId></v:GetLinksToWIOneS></soapenv:Body></soapenv:Envelope>'; //формируется заголовок SOAP

            // Send the POST request

            xmlhttp.open('POST', 'http://адрес/TfsIntegrationService.svc', false); //тут обязательно указываем False - запрос должен быть синхронный
            xmlhttp.setRequestHeader('Content-Type', 'text/xml; charset=utf-8');
xmlhttp.setRequestHeader('SOAPAction', 'http://адрес/ITfsIntegrationService/GetLinksToWIOneS'); //устанавливаем заголовок SOAPAction
            xmlhttp.send(sr); //отсылаем запрос
      
  
     if(xmlhttp.status == 200) { //если сервер вернул ОК
       elements = xmlhttp.responseXML.getElementsByTagName('GetLinksToWIOneSResult'); //разбираем XML по тегам

wtiteToResultFile("tmp/result.tmp",elements[0].text); //результат пишем в файл
         }
  }

var fso = new ActiveXObject("Scripting.FileSystemObject");

function wtiteToResultFile(file_name, file_data) {//тут всё примитивно
	f = fso.CreateTextFile(file_name, true);
	f.Write(file_data);
	f.Close();
}

Run();//запускает главную функцию при открытии скрипта

Итак, что мы получаем: 3 файла, из файла *.ahk можно скомпилировать exe-шник и поместить его в автозапуск. Работает исправно, ОЗУ съедает около 3 Мб.

Никакие файлы не заменяли, никакие DLL не регистрировали. Обновим платформу - всё продолжит работать.

 

Спасибо за внимание, с вопросами прошу в комментарии

autohotkey снегопат javascript webservice веб-сервис soap

См. также

WEB-интеграция Администрирование веб-серверов Платные (руб)

Веб-портал обеспечивает удобный доступ к конфигурации 1С:ITIL(ИТИЛ), 1С:ITILIUM, Управление IT-отделом 8 через интернет с любого устройства посредством браузера, увеличивая эффективность работы пользователей и снижая нагрузку на сервер. Быстрая инсталляция портала за пару часов, удобный и интуитивно понятный интерфейс и безопасность данных помогут упростить работу с порталом и ускорить выполнение бизнес-процессов компании.

128000 руб.

19.12.2023    2887    3    0    

11

WEB-интеграция Анализ продаж Системный администратор Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Модуль "Подсистема интеграции AmoCRM с 1С" позволяет обеспечить единое информационное пространство, в котором пользователи могут эффективно управлять клиентской базой, следить за статусами сделок и поддерживать актуальность данных как в AmoCRM, так и в 1С.

60000 руб.

07.05.2019    34957    69    45    

27

Оптовая торговля Розничная торговля WEB-интеграция 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Онлайн-заказ - это решение для автоматизации процесса оформления заказов на сайте в торговых организациях. Продукт обеспечивает легкое взаимодействие между компанией и клиентами через веб-интерфейс, интегрированный с 1С:Предприятие. Система позволяет снизить операционные расходы, повысить лояльность клиентов и оптимизировать работу отдела продаж.

57600 руб.

26.11.2024    2636    2    3    

5

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 1C:Бухгалтерия 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    4485    4    2    

4

WEB-интеграция Программист Бизнес-аналитик Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

14400 руб.

20.12.2024    994    5    2    

7

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    19221    23    22    

20

WEB-интеграция Программист Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    18991    54    50    

31
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. bulpi 217 19.06.16 16:04 Сейчас в теме
Не понял, зачем все это. Автор как-то на своей волне, но вот это :
"Удобство такого подхода никому доказывать не нужно. Что делает разработчик, когда видит такую метку? Выделяет идентификатор, ctrl+c, открывает учетную систему, поиск, ctrl+v, открывается веб-страничка... И так для каждой метки. При обновлении конфы можно запариться. А что если делать всё это хоткеем?"

ему понятно, а мне нет. Или я один такой ?
4. roofless 23 20.06.16 08:48 Сейчас в теме
(1) bulpi, я не понял, что именно вам не понятно) в выделенном вами абзаце написано, что вместо переключения между окнами можно просто жахнуть хоткей
2. pumbaE 19.06.16 17:36 Сейчас в теме
tfs - ох извращенцы. Сделали бы что-бы при помещении в хранилище автомтатом добавляло номер текущей задачи и последующее заполнение описание, той задачи у которой стоит "в работе".
3. roofless 23 20.06.16 08:43 Сейчас в теме
(2) pumbaE, сделаем, это следующий этап
5. roofless 23 20.06.16 09:19 Сейчас в теме
(2) pumbaE, первый раз я вас неправильно понял.
добавляло номер текущей задачи и последующее заполнение описание

в код 1с?
6. pumbaE 20.06.16 09:35 Сейчас в теме
(5) нет не в код, а в комментарий при помещении в хранилище. Зачем это нужно в коде то? Если вы уже используете монстра в виде tfs, то как минимум можете поднять еще сервер git и автоматом синхронизировать хранилище с git, а при правильных комментариях то каждый коммит привяжется к той задаче что выполняли и прямо на web портале вы сможете посмотреть изменение кода при выполнении задачи.
7. roofless 23 20.06.16 09:42 Сейчас в теме
(6) pumbaE, всё верно говорите. как и писал выше - это планируется. тфс у 1сников пока используется только для учета задач, без связи с кодом. Остальные отделы используют бОльший функционал

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