Yiyipada awọn eto eto lakoko fifipamọ awọn aye ara ẹni

prehistory

Ile-iṣẹ iṣoogun kan ṣe awọn solusan ti o da lori awọn olupin Orthanc PACS ati alabara Radiant DICOM. Lakoko iṣeto, a rii pe alabara DICOM kọọkan gbọdọ jẹ apejuwe ni awọn olupin PACS bi atẹle:

  • Orukọ onibara
  • Orukọ AE (gbọdọ jẹ alailẹgbẹ)
  • Ibudo TCP kan ti o ṣii laifọwọyi ni ẹgbẹ alabara ati gba awọn iwadii DICOM lati olupin PACS (ie, olupin naa titari wọn si alabara - bẹrẹ asopọ ni akọkọ)
  • Adirẹsi IP

Lẹhin ti ṣeto Radiant, awọn alabara gba ounjẹ atẹle fun ironu: fun alabara kọọkan, ṣeto sọfitiwia pẹlu awọn aye ti o wa loke yorisi ni kikun faili naa. pacs.xml, eyiti o wa ninu profaili olumulo (ọna: %APPDATA%RadiantViewerpacs.xml). Ni akoko kanna, atunto ti alabara kan yatọ si omiiran ni o kere ju awọn aye meji (orukọ AE yatọ fun gbogbo eniyan, ati pe ibudo jẹ ipilẹ kanna, ayafi fun awọn alabara ebute ti n ṣiṣẹ lori olupin kanna - nibẹ ni awọn ebute oko oju omi tun ni. lati yan yatọ si).

Apere faili pacs.xml nipasẹ ọna asopọ:

Fun bii oṣu mẹfa ohun gbogbo dara, eto naa bẹrẹ si ṣiṣẹ… lẹhinna o wa si wa “labẹ omi okuta»:

  • A nilo lati fi ọpọlọpọ awọn olupin PACS titun ṣiṣẹ ti yoo rọpo awọn atijọ (nibiti aaye disk ti bẹrẹ lati ṣiṣe). Awọn olupin PACS ni awọn ẹrọ foju, ṣugbọn kii ṣe ohun ti a n sọrọ nipa;
  • A nilo lati bakan ni aarin yipada awọn atunto alailẹgbẹ (pẹlu awọn aye oriṣiriṣi meji) lori awọn ẹrọ 200 (nọmba wọn n pọ si nigbagbogbo);
  • Ṣiyesi iwọn idagba ti awọn ipele iwadi, ojutu kan ko nilo lẹẹkan, ṣugbọn tun ṣe ati deede (fun apẹẹrẹ, lẹẹkan ni gbogbo oṣu 1-3).

Ojutu wa ni isalẹ.

Yiyan awọn irinṣẹ lati yanju iṣoro kan

Ni akọkọ, awọn igbiyanju wa lati wa diẹ ninu awọn ojutu ti yoo ṣe atunṣe faili pacs.xml ni ẹgbẹ onibara ati ṣe awọn ayipada si akojọ awọn olupin PACS lai ni ipa lori orukọ AE ati awọn eto ibudo TCP. Awọn alabara Windows ni akoko yẹn da lori Windows XP mejeeji ati Windows 7 - nitorinaa awọn igbiyanju wa lati kọ nkan bii eyi da lori VBScript. Ṣugbọn ala, ko ṣee ṣe lati ṣakoso iru iṣẹ-ṣiṣe bẹ, nitori aini pipe ti iriri ni kikọ ohunkohun ti o nipọn ati okeerẹ ni ede yii. Awọn igbiyanju lati wa ati atunkọ tun ko ni aṣeyọri (o yẹ ki o ṣe akiyesi pe Mo ti ni eto ti o yatọ ni ori mi, nitorina emi ko fi VBScript fun diẹ ẹ sii ju wakati 3-4).

Ni ipari Mo yanju lori ojutu wọnyi:

  • Lilo eto imulo ẹgbẹ, gba gbogbo awọn faili pacs.xml ni aaye kan lori olupin eyikeyi ni orisun nẹtiwọki;
  • Yi awọn faili pada ni ọpọ (Mo ti ni iriri tẹlẹ ni lohun iru awọn iṣoro nipa lilo Perl);
  • Tun lo awọn eto imulo ẹgbẹ lati ṣe imudojuiwọn awọn eto alabara.

Gbigba awọn faili nipa lilo Ẹgbẹ Afihan

Apakan ti o rọrun julọ ni pe nigba ti alabara ba wọle sinu profaili rẹ, oun, pẹlu awọn ẹtọ rẹ, ṣiṣẹ faili .bat kan kan, eyiti o sọ pe:

echo off
If exist %APPDATA%RadiantViewerpacs.xml copy %APPDATA%RadiantViewerpacs.xml srv.test.localpconfigs$pacs-%COMPUTERNAME%-%USERNAME%.xml

Nitorinaa, awọn faili pacs.xml yoo kojọpọ sori olupin ni orisun ti o farapamọ, orukọ eyiti o ni alaye ninu kọnputa wo ati lati ọdọ olumulo wo ni a daakọ atunto yii.

Ohun ti o nira julọ ni lati duro titi eto imulo yii yoo ṣiṣẹ fun gbogbo awọn olumulo.

Yiyipada awọn atunto nipa lilo iwe afọwọkọ Perl

A yoo nilo Perl ti nṣiṣe lọwọ fun Windows lati ActiveState, bakanna bi XML :: module onkọwe, eyiti o le fi sii nipa lilo aṣẹ ppm fi sori ẹrọ XML-Onkqwe.

Iwe afọwọkọ funrararẹ yipada lati rọrun pupọ:

use XML::Writer;
 
# Открываем папку с отчетами, обрабатываем ссписок (удаляем лишнее):
	$report_dir = "C:Perl64WORKPACS-xml3";
	opendir(DIR, "$report_dir") or die "Не могу открыть папку с отчетами!";
	@report_files = readdir DIR;
	shift (@report_files); # удаляем точку из элементов массива (.)
	shift (@report_files); # удаляем две точки из элементов массива (..)
#	print "@report_files";
	closedir(DIR);
 
# Начинаем обрабатывать файлы - по одному за раз. Нужно считать параметр AET и номер порта в переменные.
foreach $analiz_file (@report_files) 
{
	$full_path_to_file="C:Perl64WORKPACS-xml3".$analiz_file;
	open (INFO, $full_path_to_file);
 
	while ($line = <INFO>)
	{
		# Переменные $aet и $port содержат уникальные данные для каждого XML файла:
		my ($other1, $aet, $other2, $port, $other3) = split /"/, $line, 5;
		# Если встречается строка listener - то мы дошли до нужной строчки и можно формировать новый XML:
		if ($other1 =~ 'listener')
			{
				# Формируем новый XML c нужными полями и данными:
				my $writer = XML::Writer->new(OUTPUT => 'self', DATA_MODE => 1, DATA_INDENT => 2, );
				$writer->xmlDecl('utf-8');
				$writer->startTag('pacs');
				$writer->startTag('listener', ae => $aet, port => $port);
				$writer->endTag();
				$writer->startTag('hosts');
				$writer->startTag('host', name => 'MRT', ae => 'ORTHANC', ip => 'XX.YY.214.17', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
				$writer->endTag();
				$writer->startTag('host', name => 'KT', ae => 'ORTHANC2', ip => 'XX.YY.215.253', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
				$writer->endTag();
				$writer->startTag('host', name => 'R', ae => 'ORTHANC3', ip => 'XX.YY.215.252', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
				$writer->endTag();
				$writer->startTag('host', name => 'KT-20180501-20180831', ae => 'ORTHANC4', ip => 'XX.YY.215.251', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
				$writer->endTag();
				$writer->startTag('host', name => 'KT-20180901-20181130', ae => 'ORTHANC5', ip => 'XX.YY.215.250', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
				$writer->endTag();
				$writer->endTag('hosts');
				$writer->startTag('presets');
				$writer->endTag();
				$writer->startTag('lastsearch', dt => '4', mfid => '1048592');
				$writer->endTag();
				$writer->endTag('pacs');
 
				# Помещаем готовый XML в переменную:
				my $xml = $writer->end();
				# Подготавливаем файл для перезаписи:
				$rewritexml = $full_path_to_file;
				# Переписываем XML файлы новыми данными:
				open (NEWXML, ">$rewritexml");
				print NEWXML $xml;
				close (NEWXML);				
			}
	}
 
}

Ilana ti iṣẹ rẹ:

  • A ṣii liana ninu eyiti a ti gba awọn atunto pacs.xml lati ọdọ awọn alabara ati gbe atokọ ti awọn faili sinu titobi ti scalars (@report_files);
  • Ni lupu, a ṣe ilana faili kan ni akoko kan ati ka laini nipasẹ laini;
  • Lilo pipin, a pin laini kọọkan si awọn ẹya 5, ni lilo awọn agbasọ bi oluyapa;
  • A wa laini kan pẹlu olutẹtisi ọrọ ati gbe data alailẹgbẹ fun faili kọọkan (orukọ alabara AE ati nọmba ibudo TCP) si awọn oniyipada meji;
  • Lẹhin eyi, a rọrun lati ṣe agbekalẹ faili XML tuntun kan, tẹ awọn paramita alailẹgbẹ sinu rẹ lẹhinna fi nọmba ti a beere fun awọn olupin PACS pẹlu awọn aye wọn - awon. ohun ti o bere fun gbogbo)
  • A tun kọ faili XML tuntun si oke ti atijọ.

O yẹ ki o ṣe akiyesi pe ni otitọ, Emi ko lo iwe afọwọkọ yii patapata laifọwọyi - ni otitọ, Mo daakọ awọn atunto ti a gba sinu itọsọna lọtọ ati lẹhinna ṣiṣe iwe afọwọkọ naa ki o yi gbogbo wọn pada ni ọpọ. Next, a ID ayẹwo - ati awọn atunto le ti wa ni pin pada si awọn ẹrọ.

Pinpin awọn faili pacs.xml ti a ti yipada si awọn alabara

Ohun ti o rọrun julọ ti o wa si ọkan ni lati ṣe awọn ayipada si faili .bat ti n ṣiṣẹ tẹlẹ ti o gba awọn atunto lati ọdọ awọn alabara ati ṣafikun laini naa:

If exist %APPDATA%RadiantViewerpacs.xml copy /Y srv.test.localpconfigsnew$pacs-%COMPUTERNAME%-%USERNAME%.xml %APPDATA%RadiantViewerpacs.xml

Faili .bat ikẹhin dabi eyi:

@echo off
If exist %APPDATA%RadiantViewerpacs.xml copy %APPDATA%RadiantViewerpacs.xml srv.test.localpconfigs$pacs-%COMPUTERNAME%-%USERNAME%.xml
If exist %APPDATA%RadiantViewerpacs.xml copy /Y srv.test.localpconfigsnew$pacs-%COMPUTERNAME%-%USERNAME%.xml %APPDATA%RadiantViewerpacs.xml

ipari

O dabi eyi "orokun"ojutu. A ti gbiyanju tẹlẹ lẹẹmeji (ni Oṣu Kẹsan 2018 ati Kínní 2019), titi di isisiyi ọkọ ofurufu naa jẹ deede. Nitoribẹẹ, kii ṣe 100% ti imudojuiwọn awọn alabara, ṣugbọn o sunmọ iye yii - a pari iyokù latọna jijin. Iwe afọwọkọ nipasẹ ọna asopọ.

orisun: www.habr.com

Fi ọrọìwòye kun