Чт май 16, 2019 2:31 pm Чт май 16, 2019 2:31 pm
//Автоматически добавляем новых пользователей в общий список контактов
//и удаляем оттуда заблокированных
var i:integer;
UserActive:string;
begin
for i:=2 to mGetMaxRegisteredUIN do
begin
//1. Удаляем заблокированных
UserActive:=mGetUserAttribute(i,'Active'); //0-заблочен, 1-включён, пустая строка - нет такого
//if (UserActive='0') and (Length(mGetUserDepartmentName(i))>0) then mDeleteUserFromCommonContacts(i);
if (UserActive='0') and (mGetUserDepartmentID(i)>0) then mDeleteUserFromCommonContacts(i);
//Добавляем новых пользователей в общий список контактов
if (UserActive='1') and (mGetUserDepartmentID(i)=-1) then mAddUserToCommonContacts(i,1);
end;
//Синхронизируем список контактов
mCommonContactsRebuild;
end.
Результат:
Ошибка #167: в скрипте "CommonContacts из события "hour" обнаружена ошибка: "Script timed out". Скрипт не выполнен
Ошибка #130: скрипт "CommonContacts" отключен из-за превышения времени выполнения (5288 ms)
Скрипт начинает выполняться и... Галка "Отключать скрипты из-за превышения времени выполнения" НЕ СТОИТ, но всё равно после 5 секунд (и всегда менее 6) скрипт останавливается. Специально проверил - проблема в функции mDeleteUserFromCommonContacts - комментирование этой строки даёт время выполнения в 234мс. Я даже пробовал заменить первоначальную функцию
Length(mGetUserDepartmentName(i))>0
mGetUserDepartmentID(i)>0
Я понимаю, что через некоторое время всё-таки, путём многократных запусков (а каждый раз оно часть работы проделывает и в следующий раз уже обработанные контакты пропускаются быстро) дойдётся всё до конца и дальше будет работать нормально, ибо в дальнейшем не будет массовых добавлений/удалений пользователей из общего списка контактов. Но всё же три вопроса остаются:
- - почему (или где настраивается) выкидывает по таймауту?
- - как в итоге выполнять такие скрипты (иногда они могут быть и разовыми, просто что бы облегчить ручную тупую работу)
- - что за ошибки #167 и #130? Они в виде ссылок, но она не ведёт на справку по ним.