Синхронизация:Настройка PHP-скриптов
Материал из wiki.standart-n.ru
Версия от 11:37, 6 апреля 2015; Vlasova (обсуждение | вклад)
Содержание
Используемые сокращения
ГБ - Глобальная база КБ - Клиентская база
В скриптах настраиваются только файлы: declare.php, checkupd.php, getrelationtype.php. ВНИМАНИЕ!!!! Перед исправлением любого из скрипта, необходимо сделать резервную копию.
DECLARE.PHP (настройка параметров синхронизации)
$GLOBALS["DB_USER"]="LOGIN"; $GLOBALS["DB_PASSWD"]="PASSOWRD"; $GLOBALS["CODEKEY"]="njHtdlf146s8mkGFrejhsw875HJgf~sfkksheu69js"; $GLOBALS["PATH_ROOT"]="C:\\wamp\\www\\sinhro\\engine\\"; $GLOBALS["PATH_USERS"]="C:\\wamp\\www\\sinhro\\engine\\users\\"; $GLOBALS["PACKETSIZELIMIT"]=10000000; $GLOBALS["CLEARDIR"]=true; $GLOBALS["XFIELDS0"]=" AGENTS.GLOBAL_AGENT_ID "; $GLOBALS["XFIELDS1"]=" WARES.SNAME CASH_DOCS.GLOBAL_ID CASH_DOC_TYPES.GLOBAL_ID DEPS.GLOBAL_ID "; $GLOBALS["USEQUEUE"]=true; $GLOBALS["QUEUEDIR"]="C:\\wamp\\www\\sinhro\\engine\\queue\\"; $GLOBALS["QUEUELIMIT"]=100; $GLOBALS["NODELETE"]=false; ?> Скрипт установки параметров синхронизации. Описание параметров. DB_USER – Логин для подключения к ГБ DB_PASSWD – Пароль для подключения к ГБ PATH_ROOT – Корневой каталог синхронизации PATH_USERS – Каталог для сохранения пакетов с клиентов PACKETSIZELIMIT – Ограничение размера пакета в байтах CLEARDIR – Признак удаления пакета после успешной загрузки XFIELDS0 – Список полей таблиц для исключения из синхронизации для профилей с relationtype=0 (Частичная синхронизация). (Как правило, при двухсторонней синхронизации структура таблиц должна быть идентична, но при необходимости мы можем добавлять необходимые колонки к таблицам, которые не будут участвовать в синхронизации. Как правило. Это специфические поля ГБ, но могут быть и в КБ) (Для удобства просмотра списка полей в скрипте, можно сделать перенос строки следующим образом $GLOBALS["XFIELDS0"]=" AGENTS.GLOBAL_AGENT_ ID "; $GLOBALS["XFIELDS0"].=" AGENTS.GLOBAL_ ID "; В таком случае в параметр XFIELDS0 будет содержать значение «AGENTS.GLOBAL_AGENT_ ID AGENTS.GLOBAL_ ID») XFIELDS1 – Список полей таблиц для исключения из синхронизации для профилей с relationtype=1 (Полная синхронизация). USEQUEUE – Признак наличия очереди загрузки в схеме синхронизации QUEUEDIR – Каталог для хранения пакетов, обрабатываемых очередью загрузки QUEUELIMIT – Максимальное количество незагруженных пакетов состоящих в очереди к загрузке Если данный размер превышен, то очередной пакет синхронизации уже не будет поставлен в очередь. NODELETE – Запрет удаления данных при синхронизации. На данный момент параметр не работает.
CHECKUPD.PHP (форсированное обновление)
<?php //<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> function checkupd(&$params, &$zipfilename, $userfolder, $it) { $reltype=0; $profile_id=getprofile_id($it,$params["profile_id"],$reltype); if (!$profile_id){die(" error : профиль клиента не найден");} if ($profile_id==0){die(" error : профиль клиента равен нулю");} $fn=$GLOBALS["PATH_ROOT"]."shellupd/exe.ver"; $f=fopen($fn,"r"); $s_ver=fread($f,filesize($fn)); fclose($f); $c_ver=$params["exever"]; if (!is_num($s_ver,false)){die("error Ошибка в определении версии обновления (server)");} if (!is_num($c_ver,false)){die("error Ошибка в определении версии обновления (client)");} if ($c_ver>=$s_ver) {die("infoВерсия клиента актуальна! (".$s_ver.")");} $fn=$GLOBALS["PATH_ROOT"]."shellupd/data.zip"; if (!file_exists($fn)) {die("error Не найдено обновление!");} readfile($fn); } function CheckForceUpd(&$params, &$zipfilename, $userfolder, $it) { // return false; $reltype=0; $profile_id=getprofile_id($it,$params["profile_id"],$reltype); if (!$profile_id){die(" error : профиль клиента не найден");} if ($profile_id==0){die(" error : профиль клиента равен нулю");} $fn=$GLOBALS["PATH_ROOT"]."shellupd/exe.ver"; $f=fopen($fn,"r"); $s_ver=fread($f,filesize($fn)); fclose($f); $c_ver=$params["exever"]; if (!is_num($s_ver,false)){return false;}//{die("error Ошибка в определении версии обновления (server)");} if (!is_num($c_ver,false)){return false;}//{die("error Ошибка в определении версии обновления (client)");} if ($c_ver>=$s_ver) {return false;}//{die("infoВерсия клиента актуальна! (".$s_ver.")");} $fn=$GLOBALS["PATH_ROOT"]."shellupd/data.zip"; if (!file_exists($fn)) {die("error Не найдено обновление!");} readfile($fn); $GLOBALS["echo"].="1DF57BEEBA2C163BC206E002D74E1B5B"; $params["cmd"]="forceupd"; } ?> В данном скрипте исправляем только одну выделенную строку. Если эта строка закомментирована, то обновление DtClient будет по требованию пользователя. Правой кнопкой мыши по значку с DtClient в области уведомлений – «проверить обновления», в случае расхождения версий, DtClient загрузит свежую версию, обновится и перезапустится. Если строка раскомментирована, то автоматического обновления не будет, и не важно что будет указано после return.
Новый Distributeclient.exe архивируем в корневой каталог синхронизации (смотри declare.php) папка shellupd и называем файл data.zip. Версию нового обновления указываем в папке shellupd в файле exe.ver.
GETRELATIONTYPE.PHP (настройка частичной синхронизации)
<?php function getrelationtype($tablename, $uuid, $profile_id, $fieldvals) { if (strpos(" WAREBASE_D SP\$ANALITICS SP\$WDICTS SP\$GROUPS SP\$FRREPORTS G\$PROFILES RECEPTS RECEPT_CLIENTS RECEPT_DOCTORS_FIO RECEPT_LPU RECEPT_MO RECEPT_SICK RECEPT_VIDUD "," ".$tablename." ")>0) { /*die("error dbg0");*/ return 1;}
if (!isset($fieldvals["ID"])){return 0;} $id=$fieldvals["ID"]; switch ($tablename) { case "AGENTS": return 1; break; case "ADDRS":; case "REPORTS":if (($id>9999) && ($id<1000000000)){return 1;} else {return 0;} break; default: return 0; } } ?> В выделенном блоке описывается распределение таблицы для частичной синхронизации. Для каждой таблицы определяются условия, когда можно отправлять данные с ГБ в ГБ (return 0), а когда нельзя (return 1). В приведенном примере таблица AGENTS для профилей с relationtype=1 будет синхронизироваться только в одну сторону КБ –> ГБ. В обратную сторону не будет, т.к. данный скрипт будет блокировать отправку для всех записей таблицы. Таблицы ADDRS, напротив, отправляется в КБ безусловно. Таблица REPORTS отправляется с ГБ в КБ только для строк, где 10000<=id<=1000000000. Для описания условий доступны любые поля таблицы.