понедельник, 9 марта 2009 г.

Интегрируем MyChat и .... 1С!

Один из наших клиентов задал такой вопрос: "у нас есть база 1С, мы хотим, чтобы по нажатию на кнопку информация, которая выгружается в файл, рассылалась определённым людям в чате".
Нет проблем. Начиная с версии 3.9.5 у нас есть встроенный скриптовый движок MSL на сервере чата. Схема взаимодействия:
  1. нажимаем кнопку в 1С;
  2. формируется специальный текстовый файл (ASCII) на диске, скажем, "c:\mychat.txt";
  3. формат текстового файла простой: строка начинается с цифры, затем пробел, затем текстовая строка, которая передаётся пользователю. Цифра - это UIN пользователя, который зарегистрирован в чате;
  4. MyChat Server раз в 30 секунд смотрит на диск и если видит файл, то вычитывает его, удаляет и рассылает нужным пользователям сообщения.
Для того, чтобы узнать UIN-ы пользователей, которым мы будем слать сообщения, заходим в "Управление пользователями" (Alt+U) на MyChat Server.

Схема относительно простая, теперь переходим к написанию скрипта. Заходим на MyChat Server, открываем "Редактор скриптов" (Alt+S). Затем в открывшемся окне редактора слева выбираем раздел "User defined scripts", "Every 30 seconds".


Теперь, собственно, исходный текст скрипта:
program Info1C;
var
s,st_file,st_uin,st_message:string;
x,i,uin,n:integer;
begin
st_file:='c:\mychat.txt';

if FileExists(st_file) then begin
x:=GetTextFileLinesCount(st_file);
for i:=1 to x do begin
LoadLineFromFile(st_file,i,s);
n:=pos(' ',s);
st_uin:=copy(s,1,n-1);
delete(s,1,n+2);
st_message:=s;
uin:=strtoint(st_uin);

mSendPrivateMessage(uin,st_message); 
end;
DeleteFile(st_file);
end;
end.
Ну и вкратце опишу, что же делает этот исходник. Функция FileExists проверяет, существует ли файл "c:\mychat.txt". Затем с помощью функции GetTextFileLinesCount мы узнаём, сколько строк в файле будет (т.е. сколько будет сообщений рассылаться).

После этого организовываем цикл FOR и построчно вычитываем наш текстовый файл, разбиваем каждую строчку на две части: UIN пользователя и собственно сообщение, после чего функцией mSendPrivateMessage шлём приватное сообщение нужному пользователю.

И в самом конце удаляем файл "c:\mychat.txt", чтобы исключить зацикливание.

После того, как скрипт написан, жмём Ctrl+F9, чтобы проверить правильность написания и не забываем включить галочку вверху "включить скрипт". Сообщения будут приходить от встроенного робота Elisa (uin=0).

Всё, работа началась.

Случайные статьи:

Комментариев нет: