<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en_US" lang="en_US"> <head> <title> GmManualXmlRpcApiRu < Gnumed < Foswiki</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <meta name="robots" content="noindex" /> <link rel="alternate" type="application/rss+xml" title="RSS Feed" href="WebRss.html" /> <link rel="icon" href="../rsrc/System/ProjectLogos/favicon.ico" type="image/x-icon" /> <link rel="shortcut icon" href="../rsrc/System/ProjectLogos/favicon.ico" type="image/x-icon" /> <link rel="alternate" href="http://wiki.gnumed.de/bin/edit/Gnumed/GmManualXmlRpcApiRu?t=1362919420" type="application/x-wiki" title="edit GmManualXmlRpcApiRu" /> <meta name="description" content="GmManualXmlRpcApiRu" /> <!--[if IE]></base><![endif]--> <style type="text/css" media="all"> @import url('../rsrc/System/SkinTemplates/base.css'); </style> <style type="text/css" media="all"> @import url('../rsrc/System/SkinTemplates/default.css'); </style> <!--[if IE]><style type="text/css" media="screen"> pre { overflow-x:auto; padding-bottom:expression(this.scrollWidth > this.offsetWidth ? 16 : 0); } </style> <![endif]--> <meta name="foswiki.PUBURL" content="http://wiki.gnumed.de/pub" /> <!-- PUBURL --> <meta name="foswiki.PUBURLPATH" content="/pub" /> <!-- PUBURLPATH --> <meta name="foswiki.SCRIPTSUFFIX" content="" /> <!-- SCRIPTSUFFIX --> <meta name="foswiki.SCRIPTURL" content="http://wiki.gnumed.de/bin" /> <!-- SCRIPTURL --> <meta name="foswiki.SCRIPTURLPATH" content="/bin" /> <!-- SCRIPTURLPATH --> <meta name="foswiki.SERVERTIME" content="10%20Mar%202013%20-%2013:43" /> <!-- SERVERTIME --> <meta name="foswiki.SKIN" content="twikinet%2c%20pattern" /> <!-- SKIN --> <meta name="foswiki.SYSTEMWEB" content="System" /> <!-- SYSTEMWEB --> <meta name="foswiki.TOPIC" content="GmManualXmlRpcApiRu" /> <!-- TOPIC --> <meta name="foswiki.USERNAME" content="KarstenHilbert" /> <!-- USERNAME --> <meta name="foswiki.USERSWEB" content="Main" /> <!-- USERSWEB --> <meta name="foswiki.WEB" content="Gnumed" /> <!-- WEB --> <meta name="foswiki.WIKINAME" content="KarstenHilbert" /> <!-- WIKINAME --> <meta name="foswiki.WIKIUSERNAME" content="Main.KarstenHilbert" /> <!-- WIKIUSERNAME --> <meta name="foswiki.NAMEFILTER" content="%5b%5cs%5c*%3f~%5e%5c%24%40%25%60%22'%26%3b%7c%3c%3e%5c%5b%5c%5d%23%5cx00-%5cx1f%5d" /> <!-- NAMEFILTER --><!--JQUERYPLUGIN::FOSWIKI::META--> <script type='text/javascript' src='../rsrc/System/JQueryPlugin/jquery-1.4.3.js'></script><!--JQUERYPLUGIN--> <script type='text/javascript' src='../rsrc/System/JQueryPlugin/plugins/livequery/jquery.livequery.js'></script><!--JQUERYPLUGIN::LIVEQUERY--> <script type='text/javascript' src='../rsrc/System/JQueryPlugin/plugins/foswiki/jquery.foswiki.js'></script><!--JQUERYPLUGIN::FOSWIKI--> <script type='text/javascript' src='../rsrc/System/JSTreeContrib/jquery.jstree.js'></script><!--JQUERYPLUGIN::JSTREE--> </head> <body class=""><div class="foswikiPage"> <a name="PageTop"></a> <p></p> <p></p> <h1><a name="GNUmed_44_aka_slave"></a> Удаленное управление клиентом GNUmed, aka режим slave </h1> <p></p> Функции клиента в API XML-RPC GNUmed допускают другое программное обеспечение для подключения к запущенному клиенту и указывают ему выполнение определенных задач. Это называется <em>защищенный режим</em> (slave). Одно из преимуществ перед запуском клиента GNUmed по запросу является то, что запуск и проверку подлинности нужно делать только один раз. <p></p> Многие устаревшие приложения сторонних производителей будут недоступны в исходном коде и, таким образом, будет невозможно получить возможность напрямую использовать API XML-RPC. Для таких случаев также имеется помощник <code>gm_ctl_client.py</code>, который соответствует API XML-RPC для комбинации параметров командной строки и параметров файла конфигурации. Так как он написан тоже на Python, то легко расширяем. Таким образом, любое приложение, которое может вызывать другие приложения, можно отсортировать удаленным управлением GNUmed. <p></p> В защищенном режиме каждый удаленно управляемый клиент должен принимать различные "персоналии", так что контроллеры подключения могут установить различие между клиентами, подходящими и неподходящими для них. <p></p> <h2><a name="GNUmed"></a> Системная настройка GNUmed </h2> <p></p> <h3><a name="A_"></a> Клиент </h3> <p></p> <h4><a name="A_AN1"></a> Настройка </h4> <p></p> Предположим, что нужно, чтобы GNUmed отображал список документов для любого отдельного пациента. Поэтому, мы даем этому клиенту персональный <em>doc-viewer</em>. <p></p> В файле конфигурации (из <code>--conf-file</code>, или <code>~/.gnumed/gnumed.conf</code>, или <code>./gnumed.conf</code>) необходимо задать следующие параметры: <p></p> <ul> <li> <em>slave personality = doc-viewer</em> </li> <li> <em>xml-rpc port = 9999</em> <ul> <li> этот по умолчанию, даже если этот параметр не установлен </li> <li> можно использовать любой другой свободный порт, целесообразен вышеуказанный 1024 </li></ul> </li></ul> <p></p> <h4><a name="A_AN2"></a> Запуск </h4> <p></p> В окне системного входа можно активировать/деактивировать защищенный режим через флажок. Для регулярного использования рекомендуется настроить сценарий shell или пакетный файл, который вызывает <code>gnumed.py</code> с параметром <code>--slave</code>, который предусматривается соответствующим флажком. <p></p> Пользователь должен войти, как обычно. Наблюдайте вид <em>защищенного режима</em> в заголовке панели окна GNUmed. GNUmed затем перечисляет входящие запросы. Обратите внимание, что будет невозможно переключиться на другого пациента из защищенного клиента GNUmed. <p></p> Если GNUmed должен быть отключен для освобождения порта, он прослушивает (из-за сбоя), какой порт остается открытым (блокированным) за короткий промежуток времени (зависит от параметра времени ожидания в подсистеме сокетов TCP/IP ядра операционной системы). Либо переподключите через короткое время, или настройте GNUmed на другой порт для прослушивания. <p></p> <h3><a name="A_AN3"></a> Контроллер </h3> <p></p> Вспомогательный сценарий <code>gm_ctl_client.py</code> предоставляет интерфейс командной строки в сочетании с некоторыми параметрами файла конфигурации, позволяющий контролировать экземпляр клиента GNUmed. <p></p> Конфигурационный файл передается через параметр командной строки <code>--conf-file</code>, который далее описан <a href="GmManualConfigFilesRu.html">здесь</a>. Необходимо настроить следующим образом: <pre> [GNUmed instance] # same port as in gnumed.conf (see above) port = 9999 # see gnumed.conf personality = doc-viewer </pre> <p></p> следующая команда используется для запуска клиента GNUmed, если ни один не работает, можете написать сценарий shell или пакетный файл для упрощения этого параметра, в Debian GNU/Linux можно просто свалить "gnumed --slave", в других случаях можно запустить с любой командой, обычно запускающей GNUmed, но приложить "--slave" startup command = <вставьте здесь одной строкой для запуска клиента gnumed> <pre> [script] # show the documents plugin target plugin = gmShowMedDocs </pre> <p></p> если нужно расширить <code>gm_ctl_client.py</code>, посмотрите <a href="http://cvs.savannah.gnu.org/viewvc/gnumed/gnumed/client/wxpython/gmMacro.py?root=gnumed&view=markup" target="_top">здесь</a> для поиска, что можно сделать для подключения XML-RPC. <p></p> <h2><a name="A_AN4"></a> Настройка стороннего приложения </h2> <p></p> Для управления GNUmed из приложения (например, устаревшая система управления практикой) понадобятся некоторые настройки. Для этого обратитесь в <a href="LegacyAppConfigurationRu.html">соответствующий раздел</a> вашего программного обеспечения. <p></p> По существу, ваше приложение должно: <p></p> <ul> <li> экспортировать текущего пациента в формате xDT <ul> <li> только в том случае, когда нужно, чтобы GNUmed <a href="GmManualExternalPatientImportRu.html">импортировал этого пациента</a> </li></ul> </li> <li> вызовите <code>gm_ctl_client.py --conf-file=control-gnumed.conf</code> </li></ul> <p></p> Который должен быть! <p></p> <a name="TopicEnd"></a> <p></p> <p></p> <p></p> <p></p> </div> </body></html>