የግል መለኪያዎችን በሚያስቀምጡበት ጊዜ የፕሮግራም ቅንብሮችን መለወጥ

prehistory

አንድ የሕክምና ድርጅት በኦርታንክ PACS አገልጋዮች እና በRadiant DICOM ደንበኛ ላይ በመመስረት መፍትሄዎችን ተግባራዊ አድርጓል። በማዋቀር ጊዜ እያንዳንዱ የDICOM ደንበኛ በPACS አገልጋዮች ውስጥ እንደሚከተለው መገለጽ እንዳለበት አውቀናል፡-

  • የደንበኛ ስም
  • የ AE ስም (ልዩ መሆን አለበት)
  • የTCP ወደብ በራስ ሰር በደንበኛው በኩል ይከፈታል እና ከPACS አገልጋይ የDICOM ዳሰሳዎችን የሚቀበል (ማለትም፣ አገልጋዩ ወደ ደንበኛው ይገፋቸዋል - ግንኙነቱን መጀመሪያ ይጀምራል)
  • የአይፒ አድራሻ

ራዲያንትን ካዘጋጁ በኋላ ደንበኞቻቸው የሚከተለውን ምግብ ለሐሳብ ተቀብለዋል፡ ለእያንዳንዱ ደንበኛ ሶፍትዌሩን ከላይ ባሉት መለኪያዎች ማዋቀር ፋይሉ እንዲሞላ አድርጓል። pacs.xmlበተጠቃሚ መገለጫ ውስጥ የነበረ (መንገድ፡- %APPDATA%RadiantViewerpacs.xml). በተመሳሳይ ጊዜ የአንድ ደንበኛ ውቅር ከሌላው ቢያንስ በሁለት ግቤቶች ይለያል (የ AE ስም ለሁሉም ሰው የተለየ ነው, እና ወደቡ በመሠረቱ ተመሳሳይ ነው, በተመሳሳይ አገልጋይ ላይ ከሚሰሩ ተርሚናል ደንበኞች በስተቀር - እዚያም ወደቦች እንዲሁ ነበሩት. የተለየ መመደብ)።

ምሳሌ pacs.xml ፋይል በ ማያያዣ:

ለስድስት ወራት ያህል ሁሉም ነገር ጥሩ ነበር, ስርዓቱ መስራት ጀመረ ... ከዚያም ወደ እኛ መጣ "በውሃ ውስጥ ድንጋዮች"

  • አሮጌዎቹን የሚተኩ (የዲስክ ቦታ ማለቅ የጀመረበት) በርካታ አዲስ የPACS አገልጋዮችን ወደ ስራ ማስገባት አለብን። በምናባዊ ማሽኖች ውስጥ PACS አገልጋዮች, ነገር ግን እኛ ስለምንናገረው አይደለም;
  • በ 200 ማሽኖች (ቁጥራቸው በየጊዜው እየጨመረ ነበር) ልዩ አወቃቀሮችን (በሁለት የተለያዩ መለኪያዎች) በማዕከላዊ በሆነ መንገድ መለወጥ አለብን;
  • የዳሰሳ ጥራዞችን የእድገት መጠን ግምት ውስጥ በማስገባት አንድ መፍትሄ አንድ ጊዜ ብቻ ሳይሆን በተደጋጋሚ እና በመደበኛነት (ለምሳሌ በየ 1-3 ወሩ አንድ ጊዜ) ያስፈልጋል.

መፍትሄው ከዚህ በታች ነው.

ችግሩን ለመፍታት መሳሪያዎችን መምረጥ

መጀመሪያ ላይ የ pacs.xml ፋይልን በደንበኛው በኩል የሚያስተካክል እና በPACS አገልጋዮች ዝርዝር ላይ የ AE ስም እና የ TCP ወደብ ቅንጅቶችን ሳይነኩ ለውጦችን የሚያደርጉ አንዳንድ መፍትሄዎችን ለማግኘት ሙከራዎች ነበሩ። በዚያን ጊዜ የዊንዶውስ ደንበኞች በዊንዶውስ ኤክስፒ እና በዊንዶውስ 7 ላይ የተመሰረቱ ናቸው - ስለዚህ በ VBScript ላይ በመመስረት እንደዚህ ያለ ነገር ለመጻፍ ሙከራዎች ነበሩ. ግን ወዮለት ፣ በዚህ ቋንቋ ውስጥ ማንኛውንም ውስብስብ እና ውስብስብ ነገር ለመፃፍ ሙሉ ልምድ ባለመኖሩ ምክንያት እንዲህ ያለውን ተግባር ለመቆጣጠር አልተቻለም። ለማግኘት እና እንደገና ለመፃፍ የተደረገው ሙከራም አልተሳካም (በጭንቅላቴ ውስጥ የተለየ እቅድ እንዳለኝ ልብ ሊባል ይገባል ስለዚህ ከ 3-4 ሰአታት በላይ በቪቢስክሪፕት ውስጥ አልገባሁም)።

በመጨረሻ በሚከተለው መፍትሄ ላይ ወሰንኩ ።

  • የቡድን ፖሊሲን በመጠቀም ሁሉንም የ pacs.xml ፋይሎችን በአንድ ቦታ ላይ በማንኛውም የአውታረ መረብ ምንጭ ውስጥ ባለው አገልጋይ ላይ ይሰብስቡ;
  • ፋይሎችን በጅምላ ይቀይሩ (ከዚህ በፊት ፐርል በመጠቀም እንደዚህ ያሉ ችግሮችን የመፍታት ልምድ ነበረኝ);
  • እንዲሁም የደንበኛ ቅንብሮችን ለማዘመን የቡድን ፖሊሲዎችን ይጠቀሙ።

የቡድን ፖሊሲን በመጠቀም ፋይሎችን መሰብሰብ

በጣም ቀላሉ ክፍል አንድ ደንበኛ ወደ ፕሮፋይሉ ሲገባ በመብቱ የተወሰነ .bat ፋይል ያከናውናል፣ይህም ይላል፡-

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

ስለዚህ፣ pacs.xml ፋይሎች በአገልጋዩ ላይ በተደበቀ ሀብት ውስጥ ይከማቻሉ፣ስሙም ከየትኛው ኮምፒውተር እና ከየትኛው ተጠቃሚ እንደተገለበጠ መረጃ የያዘ ነው።

በጣም አስቸጋሪው ነገር ይህ መመሪያ ለሁሉም ተጠቃሚዎች እስኪሰራ ድረስ መጠበቅ ነበር።

የፐርል ስክሪፕት በመጠቀም ውቅሮችን መቀየር

እንፈልጋለን ንቁ ፐርል ለዊንዶውስ ከ ActiveState, እንዲሁም የ XML :: ጸሐፊ ሞጁል, ትዕዛዙን በመጠቀም ሊጫን ይችላል. ppm ኤክስኤምኤል-ጸሐፊን ይጫኑ.

ስክሪፕቱ ራሱ በጣም ቀላል ሆኖ ተገኘ፡-

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);				
			}
	}
 
}

የአሠራሩ መርህ;

  • የ pacs.xml አወቃቀሮችን ከደንበኞች የሰበሰብንበትን ማውጫ እንከፍተዋለን እና የፋይሎችን ዝርዝር በ scalars (@report_files) ውስጥ እናስቀምጣለን።
  • በ loop ውስጥ አንድ ፋይል በአንድ ጊዜ እናስኬዳለን እና በመስመር እናነባለን;
  • ስንጥቅ በመጠቀም እያንዳንዱን መስመር በ 5 ክፍሎች እንከፍላለን ፣ ጥቅሶችን እንደ መለያየት እንጠቀማለን ።
  • አድማጭ ከሚለው ቃል ጋር አንድ መስመር እናገኛለን እና ለእያንዳንዱ ፋይል (AE ደንበኛ ስም እና የቲሲፒ ወደብ ቁጥር) ልዩ በሆነ ቦታ ላይ በሁለት ተለዋዋጮች ውስጥ;
  • ከዚህ በኋላ በቀላሉ አዲስ የኤክስኤምኤል ፋይል እንፈጥራለን ፣ ልዩ መለኪያዎችን ወደ እሱ እናስገባለን እና አስፈላጊውን የ PACS አገልጋዮችን ከመለኪያዎቻቸው ጋር እናስገባለን - እነዚያ። ምን እንደጀመረ)
  • አዲሱን የኤክስኤምኤል ፋይል በአሮጌው ላይ እንደገና እንጽፋለን።

በእውነቱ ፣ ይህንን ስክሪፕት ሙሉ በሙሉ በራስ-ሰር እንዳልጠቀም ልብ ሊባል ይገባል - በእውነቱ ፣ የተሰበሰቡትን ውቅሮች ወደ የተለየ ማውጫ ውስጥ ገልብጣለሁ እና ከዚያ ስክሪፕቱን አሂድ እና ሁሉንም በጅምላ እለውጣለሁ። በመቀጠል, የዘፈቀደ ቼክ - እና ውቅሮቹ ወደ ማሽኖቹ ሊከፋፈሉ ይችላሉ.

የተሻሻሉ pacs.xml ፋይሎችን ለደንበኞች በማሰራጨት ላይ

ወደ አእምሯችን የመጣው በጣም ቀላሉ ነገር ከደንበኞች ውቅሮችን በሚሰበስብ እና መስመሩን ለመጨመር ቀድሞውኑ በሚሰራው .bat ፋይል ላይ ለውጦችን ማድረግ ነው።

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

የመጨረሻው .bat ፋይል ይህን ይመስላል፡-

@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

መደምደሚያ

እንደዚህ ነው"ጉልበት"መፍትሄ. አስቀድመን ሁለት ጊዜ ሞክረነዋል (በሴፕቴምበር 2018 እና በፌብሩዋሪ 2019)፣ እስካሁን በረራው የተለመደ ነው። እርግጥ ነው, 100% ደንበኞች አያዘምኑም, ግን ወደዚህ እሴት ቅርብ ነው - የቀረውን በርቀት እናጠናቅቃለን. ስክሪፕት በ ማያያዣ.

ምንጭ: hab.com

አስተያየት ያክሉ