{"id":259998,"date":"2015-06-24T09:03:02","date_gmt":"2015-06-24T05:03:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=259998"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=259998","title":{"rendered":"\u041f\u0438\u0448\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 InterSystems Cach\u00e9"},"content":{"rendered":"<p>     \t<img decoding=\"async\" alt=\"Monet impression sunrise\" src=\"https:\/\/habrastorage.org\/files\/c16\/e69\/e5e\/c16e69e5ee5f4d49b5b869985a8cf479.jpg\"\/><\/p>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u0412 <a href=\"http:\/\/habrahabr.ru\/company\/intersystems\/blog\/258081\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439<\/a> \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432, \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u0448\u0438\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u044b. \u041f\u0438\u0441\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<p>  \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u044b\u0439 \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0417\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u0432\u0440\u0435\u043c\u044f, \u0437\u0430\u0442\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u043d\u0430 \u043e\u0442\u043b\u0430\u0434\u043a\u0443 \u0438 \u0432\u044b\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0431\u0430\u0433\u043e\u0432. \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0447\u0430\u0441\u0442\u0435\u0439:  <\/p>\n<ul>\n<li>\u041a\u043b\u0430\u0441\u0441 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043b\u043e\u0433\u043e\u0432<\/li>\n<li>\u041d\u0430\u0431\u043e\u0440 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043b\u043e\u0433<\/li>\n<\/ul>\n<h3>\u041a\u043b\u0430\u0441\u0441 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043b\u043e\u0433\u043e\u0432<\/h3>\n<p>  \u0421\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c, \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u2014 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u042d\u0442\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u2014 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432, \u0433\u0434\u0435 \u043c\u044b, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0441\u0442\u0440\u0435\u043c\u0438\u043c\u0441\u044f \u0443\u0437\u043d\u0430\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043b\u043e\u0433\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438:  <\/p>\n<table>\n<tr>\n<th><b>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f<\/b><\/th>\n<th><b>\u0412\u0440\u0435\u043c\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f<\/b><\/th>\n<\/tr>\n<tr>\n<td>\u0422\u0438\u043f \u0441\u043e\u0431\u044b\u0442\u0438\u044f<\/td>\n<td>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f<\/td>\n<\/tr>\n<tr>\n<td>\u0418\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430<\/td>\n<td>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f<\/td>\n<\/tr>\n<tr>\n<td>\u0418\u043c\u044f \u043c\u0435\u0442\u043e\u0434\u0430<\/td>\n<td>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f<\/td>\n<\/tr>\n<tr>\n<td>\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043c\u0435\u0442\u043e\u0434<\/td>\n<td>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f<\/td>\n<\/tr>\n<tr>\n<td>\u2116 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0441\u0445. \u041a\u043e\u0434\u0430<\/td>\n<td>\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435<\/td>\n<\/tr>\n<tr>\n<td>\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f<\/td>\n<td>\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435<\/td>\n<\/tr>\n<tr>\n<td>\u0414\u0430\u0442\u0430\/\u0412\u0440\u0435\u043c\u044f<\/td>\n<td>\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435<\/td>\n<\/tr>\n<tr>\n<td>\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435<\/td>\n<td>\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435<\/td>\n<\/tr>\n<tr>\n<td>IP \u0430\u0434\u0440\u0435\u0441<\/td>\n<td>\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435<\/td>\n<\/tr>\n<\/table>\n<p> \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043b\u0430\u0441\u0441 App.Log. \u0412 \u043d\u0451\u043c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0432\u0441\u0435 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430. \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 App.Log \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0414\u0430\u0442\u0430\/\u0412\u0440\u0435\u043c\u044f, IP \u0430\u0434\u0440\u0435\u0441 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043b\u0430\u0441\u0441 App.Log<\/b><\/p>\n<div class=\"spoiler_text\"><font color=\"#000080\">Class&nbsp;App.Log&nbsp;Extends&nbsp;%Persistent<br \/>  <\/font><font color=\"#000000\">{<br \/>  <\/font><br \/>  <font color=\"#000080\">\/\/\/&nbsp;\u0417\u0430\u043c\u0435\u0449\u0435\u043d\u0438\u0435&nbsp;\u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445&nbsp;\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439<br \/>  Parameter&nbsp;<\/font><font color=\"#000000\">Null&nbsp;=&nbsp;<\/font><font color=\"#800080\">&quot;Null&quot;<\/font><font color=\"#000000\">;<br \/>  <\/font><br \/>  <font color=\"#000080\">\/\/\/&nbsp;\u0422\u0438\u043f&nbsp;\u0441\u043e\u0431\u044b\u0442\u0438\u044f<br \/>  Property&nbsp;<\/font><font color=\"#000000\">EventType&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String<\/font><font color=\"#000000\">(<\/font><font color=\"#000080\">MAXLEN&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#000080\">10<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#000080\">VALUELIST&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#800080\">&quot;,NONE,FATAL,ERROR,WARN,INFO,STAT,DEBUG,RAW&quot;<\/font><font color=\"#000000\">);<br \/>  <\/font><br \/>  <font color=\"#000080\">\/\/\/&nbsp;\u0418\u043c\u044f&nbsp;\u043a\u043b\u0430\u0441\u0441\u0430<br \/>  Property&nbsp;<\/font><font color=\"#000000\">ClassName&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String<\/font><font color=\"#000000\">(<\/font><font color=\"#000080\">MAXLEN&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#000080\">256<\/font><font color=\"#000000\">);<br \/>  <\/font><br \/>  <font color=\"#000080\">\/\/\/&nbsp;\u0418\u043c\u044f&nbsp;\u043c\u0435\u0442\u043e\u0434\u0430<br \/>  Property&nbsp;<\/font><font color=\"#000000\">MethodName&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String<\/font><font color=\"#000000\">(<\/font><font color=\"#000080\">MAXLEN&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#000080\">128<\/font><font color=\"#000000\">);<br \/>  <\/font><br \/>  <font color=\"#000080\">\/\/\/&nbsp;\u0421\u0442\u0440\u043e\u043a\u0430&nbsp;int&nbsp;\u043a\u043e\u0434\u0430<br \/>  Property&nbsp;<\/font><font color=\"#000000\">Source&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String<\/font><font color=\"#000000\">(<\/font><font color=\"#000080\">MAXLEN&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#000080\">2000<\/font><font color=\"#000000\">);<br \/>  <\/font><br \/>  <font color=\"#000080\">\/\/\/&nbsp;\u0418\u043c\u044f&nbsp;\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f<br \/>  Property&nbsp;<\/font><font color=\"#000000\">UserName&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String<\/font><font color=\"#000000\">(<\/font><font color=\"#000080\">MAXLEN&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#000080\">128<\/font><font color=\"#000000\">)&nbsp;[&nbsp;<\/font><font color=\"#000080\">InitialExpression&nbsp;<\/font><font color=\"#000000\">=&nbsp;{<\/font><font color=\"#0000ff\">$username<\/font><font color=\"#000000\">}&nbsp;];<br \/>  <\/font><br \/>  <font color=\"#000080\">\/\/\/&nbsp;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b,&nbsp;\u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0435&nbsp;\u0432&nbsp;\u043c\u0435\u0442\u043e\u0434<br \/>  Property&nbsp;<\/font><font color=\"#000000\">Arguments&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String<\/font><font color=\"#000000\">(<\/font><font color=\"#000080\">MAXLEN&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#000080\">32000<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#000080\">TRUNCATE&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#000080\">1<\/font><font color=\"#000000\">);<br \/>  <\/font><br \/>  <font color=\"#000080\">\/\/\/&nbsp;\u0414\u0430\u0442\u0430\/\u0432\u0440\u0435\u043c\u044f<br \/>  Property&nbsp;<\/font><font color=\"#000000\">TimeStamp&nbsp;<\/font><font color=\"#000080\">As&nbsp;%TimeStamp&nbsp;<\/font><font color=\"#000000\">[&nbsp;<\/font><font color=\"#000080\">InitialExpression&nbsp;<\/font><font color=\"#000000\">=&nbsp;{<\/font><font color=\"#0000ff\">$zdt<\/font><font color=\"#000000\">(<\/font><font color=\"#0000ff\">$h<\/font><font color=\"#000000\">,&nbsp;3,&nbsp;1)}&nbsp;];<br \/>  <\/font><br \/>  <font color=\"#000080\">\/\/\/&nbsp;\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0435&nbsp;\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435<br \/>  Property&nbsp;<\/font><font color=\"#000000\">Message&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String<\/font><font color=\"#000000\">(<\/font><font color=\"#000080\">MAXLEN&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#000080\">32000<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#000080\">TRUNCATE&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#000080\">1<\/font><font color=\"#000000\">);<br \/>  <\/font><br \/>  <font color=\"#000080\">\/\/\/&nbsp;\u0421\u0435\u0442\u0435\u0432\u043e\u0439&nbsp;\u0430\u0434\u0440\u0435\u0441&nbsp;\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f<br \/>  Property&nbsp;<\/font><font color=\"#000000\">ClientIPAddress&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String<\/font><font color=\"#000000\">(<\/font><font color=\"#000080\">MAXLEN&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#000080\">32<\/font><font color=\"#000000\">)&nbsp;[&nbsp;<\/font><font color=\"#000080\">InitialExpression&nbsp;<\/font><font color=\"#000000\">=&nbsp;{..<\/font><font color=\"#0000ff\">GetClientAddress<\/font><font color=\"#000000\">()}&nbsp;];<\/p>\n<p>  <\/font><font color=\"#000080\">Index&nbsp;<\/font><font color=\"#000000\">idxEventType&nbsp;On&nbsp;EventType&nbsp;[&nbsp;<\/font><font color=\"#000080\">Type&nbsp;<\/font><font color=\"#000000\">=&nbsp;bitmap&nbsp;];<br \/>  <\/font><font color=\"#000080\">Index&nbsp;<\/font><font color=\"#000000\">idxUserName&nbsp;On&nbsp;UserName&nbsp;[&nbsp;<\/font><font color=\"#000080\">Type&nbsp;<\/font><font color=\"#000000\">=&nbsp;bitmap&nbsp;];<br \/>  <\/font><font color=\"#000080\">Index&nbsp;<\/font><font color=\"#000000\">idxClassName&nbsp;On&nbsp;ClassName&nbsp;[&nbsp;<\/font><font color=\"#000080\">Type&nbsp;<\/font><font color=\"#000000\">=&nbsp;bitmap&nbsp;];<br \/>  <\/font><font color=\"#000080\">Index&nbsp;<\/font><font color=\"#000000\">idxTimeStamp&nbsp;On&nbsp;TimeStamp&nbsp;[&nbsp;<\/font><font color=\"#000080\">Type&nbsp;<\/font><font color=\"#000000\">=&nbsp;bitslice&nbsp;];<br \/>  <\/font><font color=\"#000080\">Index&nbsp;<\/font><font color=\"#000000\">idxClientIPAddress&nbsp;On&nbsp;ClientIPAddress;<br \/>  <\/font><br \/>  <font color=\"#000080\">\/\/\/&nbsp;\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c&nbsp;\u0441\u0435\u0442\u0435\u0432\u043e\u0439&nbsp;\u0430\u0434\u0440\u0435\u0441&nbsp;\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f<br \/>  ClassMethod&nbsp;<\/font><font color=\"#000000\">GetClientAddress()<br \/>  {<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008000\">\/\/&nbsp;\u0415\u0441\u043b\u0438&nbsp;\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442&nbsp;\u0441\u0435\u0441\u0441\u0438\u044f&nbsp;CSP,&nbsp;\u0442\u043e&nbsp;\u0432\u043e\u0437\u044c\u043c\u0451\u043c&nbsp;\u043e\u0442\u0442\u0443\u0434\u0430<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">#dim&nbsp;<\/font><font color=\"#800000\">%request&nbsp;<\/font><font color=\"#0000ff\">As&nbsp;<\/font><font color=\"#008080\">%CSP.Request<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">If&nbsp;<\/font><font color=\"#000000\">(<\/font><font color=\"#0000ff\">$d<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">%request<\/font><font color=\"#000000\">))&nbsp;<\/font><font color=\"#800080\">{<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Return&nbsp;<\/font><font color=\"#800000\">%request<\/font><font color=\"#000000\">.<\/font><font color=\"#0000ff\">CgiEnvs<\/font><font color=\"#000000\">(<\/font><font color=\"#008000\">&quot;REMOTE_ADDR&quot;<\/font><font color=\"#000000\">)<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800080\">}<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Return&nbsp;$system<\/font><font color=\"#008080\">.Process<\/font><font color=\"#000000\">.<\/font><font color=\"#0000ff\">ClientIPAddress<\/font><font color=\"#000000\">()<br \/>  }<br \/>  <\/font><br \/>  <font color=\"#000080\">\/\/\/&nbsp;\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435&nbsp;\u0441\u043e\u0431\u044b\u0442\u0438\u044f.<br \/>  \/\/\/&nbsp;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c&nbsp;\u043d\u0435&nbsp;\u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e,&nbsp;\u0430&nbsp;\u0447\u0435\u0440\u0435\u0437&nbsp;\u043c\u0430\u043a\u0440\u043e\u0441\u044b&nbsp;$$$LogEventTYPE().<br \/>  ClassMethod&nbsp;<\/font><font color=\"#000000\">AddRecord(<\/font><font color=\"#ff00ff\">ClassName&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#800080\">&quot;&quot;<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#ff00ff\">MethodName&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#800080\">&quot;&quot;<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#ff00ff\">Source&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#800080\">&quot;&quot;<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#ff00ff\">EventType&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#800080\">&quot;&quot;<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#ff00ff\">Arguments&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#800080\">&quot;&quot;<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#ff00ff\">Message&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#800080\">&quot;&quot;<\/font><font color=\"#000000\">)<br \/>  {<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Set&nbsp;<\/font><font color=\"#800000\">record&nbsp;<\/font><font color=\"#000000\">=&nbsp;..<\/font><font color=\"#0000ff\">%New<\/font><font color=\"#000000\">()<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Set&nbsp;<\/font><font color=\"#800000\">record<\/font><font color=\"#000000\">.<\/font><font color=\"#0000ff\">Arguments&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#800000\">Arguments<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Set&nbsp;<\/font><font color=\"#800000\">record<\/font><font color=\"#000000\">.<\/font><font color=\"#0000ff\">ClassName&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#800000\">ClassName<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Set&nbsp;<\/font><font color=\"#800000\">record<\/font><font color=\"#000000\">.<\/font><font color=\"#0000ff\">EventType&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#800000\">EventType<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Set&nbsp;<\/font><font color=\"#800000\">record<\/font><font color=\"#000000\">.<\/font><font color=\"#0000ff\">Message&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#800000\">Message<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Set&nbsp;<\/font><font color=\"#800000\">record<\/font><font color=\"#000000\">.<\/font><font color=\"#0000ff\">MethodName&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#800000\">MethodName<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Set&nbsp;<\/font><font color=\"#800000\">record<\/font><font color=\"#000000\">.<\/font><font color=\"#0000ff\">Source&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#800000\">Source<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Do&nbsp;<\/font><font color=\"#800000\">record<\/font><font color=\"#000000\">.<\/font><font color=\"#0000ff\">%Save<\/font><font color=\"#000000\">()<br \/>  }<br \/>  }<\/font>  <\/div>\n<\/div>\n<h3>\u041c\u0430\u043a\u0440\u043e\u0441\u044b \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<p>  \u041e\u0431\u044b\u0447\u043d\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0432\u044b\u0434\u0435\u043b\u044f\u044e\u0442 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 inc \u0444\u0430\u0439\u043b\u044b, \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043a \u043a\u043b\u0430\u0441\u0441\u0430\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <font color=\"#000080\">Include&nbsp;<\/font><font color=\"#ff0000\">MacroFileName<\/font>. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <font color=\"#000080\">Include&nbsp;<\/font><font color=\"#ff0000\">App<\/font><font color=\"#000000\">.<\/font><font color=\"#ff0000\">LogMacro<\/font>. <br \/>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043c\u0430\u043a\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u043a\u043e\u0434 \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f:<br \/>  <font color=\"#0000ff\">#define&nbsp;<\/font><font color=\"#000000\">LogEvent(%type,&nbsp;%message)&nbsp;<\/font><font color=\"#0000ff\">Do&nbsp;##class(App.Log).AddRecord($$$CurrentClass, $$$CurrentMethod, $$$StackPlace, %type,<br \/>  $$$MethodArguments, %message)<\/font><br \/>  \u041d\u0430 \u0432\u0445\u043e\u0434 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 2 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u2014 \u0422\u0438\u043f \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438 \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0437\u0430\u0434\u0430\u0451\u0442 \u0441\u0430\u043c, \u0430 \u0432\u043e\u0442 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0442\u0438\u043f\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b, \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0438\u0435 \u0422\u0438\u043f \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041c\u0430\u043a\u0440\u043e\u0441\u044b LogTYPE<\/b><\/p>\n<div class=\"spoiler_text\"><font color=\"#0000ff\">#define&nbsp;<\/font><font color=\"#000000\">LogNone(%message)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">$$$LogEvent<\/font><font color=\"#000000\">(<\/font><font color=\"#008000\">&quot;NONE&quot;<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#800000\">%message<\/font><font color=\"#000000\">)<br \/>  <\/font><font color=\"#0000ff\">#define&nbsp;<\/font><font color=\"#000000\">LogError(%message)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">$$$LogEvent<\/font><font color=\"#000000\">(<\/font><font color=\"#008000\">&quot;ERROR&quot;<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#800000\">%message<\/font><font color=\"#000000\">)<br \/>  <\/font><font color=\"#0000ff\">#define&nbsp;<\/font><font color=\"#000000\">LogFatal(%message)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">$$$LogEvent<\/font><font color=\"#000000\">(<\/font><font color=\"#008000\">&quot;FATAL&quot;<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#800000\">%message<\/font><font color=\"#000000\">)<br \/>  <\/font><font color=\"#0000ff\">#define&nbsp;<\/font><font color=\"#000000\">LogWarn(%message)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">$$$LogEvent<\/font><font color=\"#000000\">(<\/font><font color=\"#008000\">&quot;WARN&quot;<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#800000\">%message<\/font><font color=\"#000000\">)<br \/>  <\/font><font color=\"#0000ff\">#define&nbsp;<\/font><font color=\"#000000\">LogInfo(%message)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">$$$LogEvent<\/font><font color=\"#000000\">(<\/font><font color=\"#008000\">&quot;INFO&quot;<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#800000\">%message<\/font><font color=\"#000000\">)<br \/>  <\/font><font color=\"#0000ff\">#define&nbsp;<\/font><font color=\"#000000\">LogStat(%message)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">$$$LogEvent<\/font><font color=\"#000000\">(<\/font><font color=\"#008000\">&quot;STAT&quot;<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#800000\">%message<\/font><font color=\"#000000\">)<br \/>  <\/font><font color=\"#0000ff\">#define&nbsp;<\/font><font color=\"#000000\">LogDebug(%message)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">$$$LogEvent<\/font><font color=\"#000000\">(<\/font><font color=\"#008000\">&quot;DEBUG&quot;<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#800000\">%message<\/font><font color=\"#000000\">)<br \/>  <\/font><font color=\"#0000ff\">#define&nbsp;<\/font><font color=\"#000000\">LogRaw(%message)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">$$$LogEvent<\/font><font color=\"#000000\">(<\/font><font color=\"#008000\">&quot;RAW&quot;<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#800000\">%message<\/font>)  <\/div>\n<\/div>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 <font color=\"#0000ff\">$$$LogError<\/font><font color=\"#000000\">(<\/font><font color=\"#008000\">&quot;\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435&nbsp;\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435&quot;<\/font>) \u0432 \u043a\u043e\u0434\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<br \/>  \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441\u044b <font color=\"#0000ff\">$$$CurrentClass, $$$CurrentMethod, $$$StackPlace, $$$MethodArguments<\/font>. \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u043f\u0435\u0440\u0432\u044b\u0445 \u0442\u0440\u0451\u0445:<br \/>  <font color=\"#0000ff\">#define&nbsp;<\/font><font color=\"#000000\">CurrentClass&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">##Expression($$$quote<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">%classname<\/font><font color=\"#000000\">)<\/font><font color=\"#0000ff\">)<br \/>  #define&nbsp;<\/font><font color=\"#000000\">CurrentMethod&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">##Expression($$$quote<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">%methodname<\/font><font color=\"#000000\">)<\/font><font color=\"#0000ff\">)<br \/>  #define&nbsp;<\/font><font color=\"#000000\">StackPlace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">$st($st(-1),<\/font><font color=\"#008000\">&quot;PLACE&quot;<\/font><font color=\"#0000ff\">)<\/font><\/p>\n<p>  \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <font color=\"#800000\">%classname,%methodname<\/font> \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 <a href=\"http:\/\/docs.intersystems.com\/ens20151\/csp\/docbook\/DocBook.UI.Page.cls?KEY=GCOS_macros#GCOS_C5957\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a> \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432. \u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 int \u043a\u043e\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <a href=\"http:\/\/docs.intersystems.com\/ens20151\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_fstack\">$stack<\/a>.<br \/>  \u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u043c %Dictionary. \u0422\u0430\u043c \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432\u0441\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043a\u043b\u0430\u0441\u0441 %Dictionary.CompiledMethod \u0438 \u0435\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e FormalSpecParsed \u2014 $lb \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0438\u0434\u0430: <font color=\"#0000ff\">$lb<\/font><font color=\"#000000\">(<\/font><font color=\"#0000ff\">$lb<\/font><font color=\"#000000\">(<\/font><font color=\"#008000\">&quot;\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435&quot;<\/font><font color=\"#000000\">,<\/font><font color=\"#008000\">&quot;\u041a\u043b\u0430\u0441\u0441&quot;<\/font><font color=\"#000000\">,<\/font><font color=\"#008000\">&quot;\u0422\u0438\u043f(Output\/ByRef)&quot;<\/font><font color=\"#000000\">,<\/font><font color=\"#008000\">&quot;\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435&nbsp;\u043f\u043e&nbsp;\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e&quot;<\/font><font color=\"#000000\">),&#8230;)<br \/>  \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0435 \u043c\u0435\u0442\u043e\u0434\u0430. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0443 \u043c\u0435\u0442\u043e\u0434\u0430 <font color=\"#000080\">ClassMethod&nbsp;<\/font><font color=\"#000000\">Test(<\/font><font color=\"#ff00ff\">a&nbsp;<\/font><font color=\"#000080\">As&nbsp;%Integer&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#000080\">1<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#000080\">ByRef&nbsp;<\/font><font color=\"#ff00ff\">b&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#000080\">2<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#000080\">Output&nbsp;<\/font><font color=\"#ff00ff\">c<\/font><font color=\"#000000\">) \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 FormalSpecParsed:<br \/>  <font color=\"#0000ff\">$lb<\/font><font color=\"#000000\">(<\/font><br \/>  <font color=\"#0000ff\">$lb<\/font><font color=\"#000000\">(<\/font><font color=\"#008000\">&quot;a&quot;<\/font><font color=\"#000000\">,<\/font><font color=\"#008000\">&quot;%Library.Integer&quot;<\/font><font color=\"#000000\">,<\/font><font color=\"#008000\">&quot;&quot;<\/font><font color=\"#000000\">,<\/font><font color=\"#008000\">&quot;1&quot;<\/font><font color=\"#000000\">),<\/font><br \/>  <font color=\"#0000ff\">$lb<\/font><font color=\"#000000\">(<\/font><font color=\"#008000\">&quot;b&quot;<\/font><font color=\"#000000\">,<\/font><font color=\"#008000\">&quot;%Library.String&quot;<\/font><font color=\"#000000\">,<\/font><font color=\"#008000\">&quot;&amp;&quot;<\/font><font color=\"#000000\">,<\/font><font color=\"#008000\">&quot;2&quot;<\/font><font color=\"#000000\">),<\/font><br \/>  <font color=\"#0000ff\">$lb<\/font><font color=\"#000000\">(<\/font><font color=\"#008000\">&quot;c&quot;<\/font><font color=\"#000000\">,<\/font><font color=\"#008000\">&quot;%Library.String&quot;<\/font><font color=\"#000000\">,<\/font><font color=\"#008000\">&quot;*&quot;<\/font><font color=\"#000000\">,<\/font><font color=\"#008000\">&quot;&quot;<\/font><font color=\"#000000\">))<br \/>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u0430 <font color=\"#0000ff\">$$$MethodArguments<\/font> \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 (\u0434\u043b\u044f \u043c\u0435\u0442\u043e\u0434\u0430 Test): <font color=\"#008000\">&quot;a=&quot;<\/font><font color=\"#000000\">_<\/font><font color=\"#0000ff\">$g<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">a<\/font><font color=\"#000000\">,<\/font><font color=\"#008000\">&quot;Null&quot;<\/font><font color=\"#000000\">)_<\/font><font color=\"#008000\">&quot;;&nbsp;b=&quot;<\/font><font color=\"#000000\">_<\/font><font color=\"#0000ff\">$g<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">b<\/font><font color=\"#000000\">,<\/font><font color=\"#008000\">&quot;Null&quot;<\/font><font color=\"#000000\">)_<\/font><font color=\"#008000\">&quot;;&nbsp;c=&quot;<\/font><font color=\"#000000\">_<\/font><font color=\"#0000ff\">$g<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">c<\/font><font color=\"#000000\">,<\/font><font color=\"#008000\">&quot;Null&quot;<\/font><font color=\"#000000\">)_<\/font><font color=\"#008000\">&quot;;&quot;<br \/>  <\/font><br \/>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043d\u0443\u0436\u043d\u043e:  <\/p>\n<ul>\n<li>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u0438 \u0438\u043c\u044f \u043c\u0435\u0442\u043e\u0434\u0430<\/li>\n<li>\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 %Dictionary.CompiledMethod \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e FormalSpec<\/li>\n<li>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430<\/li>\n<\/ul>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0432 \u043a\u043b\u0430\u0441\u0441 App.Log:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041c\u0435\u0442\u043e\u0434\u044b GetMethodArguments, GetMethodArgumentsList, ArgumentsListToString<\/b><\/p>\n<div class=\"spoiler_text\"><font color=\"#000080\">ClassMethod&nbsp;<\/font><font color=\"#000000\">GetMethodArguments(<\/font><font color=\"#ff00ff\">ClassName&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#ff00ff\">MethodName&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String<\/font><font color=\"#000000\">)&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String<br \/>  <\/font><font color=\"#000000\">{<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Set&nbsp;<\/font><font color=\"#800000\">list&nbsp;<\/font><font color=\"#000000\">=&nbsp;..<\/font><font color=\"#0000ff\">GetMethodArgumentsList<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">ClassName<\/font><font color=\"#000000\">,<\/font><font color=\"#800000\">MethodName<\/font><font color=\"#000000\">)<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Set&nbsp;<\/font><font color=\"#800000\">string&nbsp;<\/font><font color=\"#000000\">=&nbsp;..<\/font><font color=\"#0000ff\">ArgumentsListToString<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">list<\/font><font color=\"#000000\">)<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Return&nbsp;<\/font><font color=\"#800000\">string<br \/>  <\/font><font color=\"#000000\">}<br \/>  <\/font><font color=\"#000080\">ClassMethod&nbsp;<\/font><font color=\"#000000\">GetMethodArgumentsList(<\/font><font color=\"#ff00ff\">ClassName&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#ff00ff\">MethodName&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String<\/font><font color=\"#000000\">)&nbsp;<\/font><font color=\"#000080\">As&nbsp;%List<br \/>  <\/font><font color=\"#000000\">{<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Set&nbsp;<\/font><font color=\"#800000\">result&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#008000\">&quot;&quot;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Set&nbsp;<\/font><font color=\"#800000\">def&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#000080\">##class<\/font><font color=\"#000000\">(<\/font><font color=\"#008080\">%Dictionary.CompiledMethod<\/font><font color=\"#000000\">).<\/font><font color=\"#0000ff\">%OpenId<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">ClassName&nbsp;<\/font><font color=\"#000000\">_&nbsp;<\/font><font color=\"#008000\">&quot;||&quot;&nbsp;<\/font><font color=\"#000000\">_&nbsp;<\/font><font color=\"#800000\">MethodName<\/font><font color=\"#000000\">)<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">If&nbsp;<\/font><font color=\"#000000\">(<\/font><font color=\"#0000ff\">$IsObject<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">def<\/font><font color=\"#000000\">))&nbsp;<\/font><font color=\"#800080\">{<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Set&nbsp;<\/font><font color=\"#800000\">result&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#800000\">def<\/font><font color=\"#000000\">.<\/font><font color=\"#0000ff\">FormalSpecParsed<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800080\">}<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Return&nbsp;<\/font><font color=\"#800000\">result<br \/>  <\/font><font color=\"#000000\">}<br \/>  <\/font><font color=\"#000080\">ClassMethod&nbsp;<\/font><font color=\"#000000\">ArgumentsListToString(<\/font><font color=\"#ff00ff\">List&nbsp;<\/font><font color=\"#000080\">As&nbsp;%List<\/font><font color=\"#000000\">)&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String<br \/>  <\/font><font color=\"#000000\">{<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Set&nbsp;<\/font><font color=\"#800000\">result&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#008000\">&quot;&quot;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">For&nbsp;<\/font><font color=\"#800000\">i<\/font><font color=\"#000000\">=1:1:<\/font><font color=\"#0000ff\">$ll<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">List<\/font><font color=\"#000000\">)&nbsp;<\/font><font color=\"#800080\">{<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Set&nbsp;<\/font><font color=\"#800000\">result&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#800000\">result&nbsp;<\/font><font color=\"#000000\">_&nbsp;<\/font><font color=\"#0000ff\">$$$quote<\/font><font color=\"#000000\">(<\/font><font color=\"#0000ff\">$s<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">i<\/font><font color=\"#000000\">&gt;1=0:<\/font><font color=\"#008000\">&quot;&quot;<\/font><font color=\"#000000\">,1:<\/font><font color=\"#008000\">&quot;;&nbsp;&quot;<\/font><font color=\"#000000\">)&nbsp;_&nbsp;<\/font><font color=\"#0000ff\">$lg<\/font><font color=\"#000000\">(<\/font><font color=\"#0000ff\">$lg<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">List<\/font><font color=\"#000000\">,<\/font><font color=\"#800000\">i<\/font><font color=\"#000000\">))_<\/font><font color=\"#008000\">&quot;=&quot;<\/font><font color=\"#000000\">)&nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_&nbsp;<\/font><font color=\"#008000\">&quot;_$g(&quot;&nbsp;<\/font><font color=\"#000000\">_&nbsp;<\/font><font color=\"#0000ff\">$lg<\/font><font color=\"#000000\">(<\/font><font color=\"#0000ff\">$lg<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">List<\/font><font color=\"#000000\">,<\/font><font color=\"#800000\">i<\/font><font color=\"#000000\">))&nbsp;_&nbsp;<\/font><font color=\"#008000\">&quot;,&quot;<\/font><font color=\"#000000\">_<\/font><font color=\"#0000ff\">$$$quote<\/font><font color=\"#000000\">(..<\/font><font color=\"#0000ff\">#Null<\/font><font color=\"#000000\">)_<\/font><font color=\"#008000\">&quot;)_&quot;&nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#000000\">_<\/font><font color=\"#0000ff\">$s<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">i<\/font><font color=\"#000000\">=<\/font><font color=\"#0000ff\">$ll<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">List<\/font><font color=\"#000000\">)=0:<\/font><font color=\"#008000\">&quot;&quot;<\/font><font color=\"#000000\">,1:<\/font><font color=\"#0000ff\">$$$quote<\/font><font color=\"#000000\">(<\/font><font color=\"#008000\">&quot;;&quot;<\/font><font color=\"#000000\">))<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800080\">}<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Return&nbsp;<\/font><font color=\"#800000\">result<br \/>  <\/font>}  <\/div>\n<\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043c\u0430\u043a\u0440\u043e\u0441 <font color=\"#0000ff\">$$$MethodArguments<\/font> \u043a\u0430\u043a:<font color=\"#0000ff\">#define&nbsp;<\/font><font color=\"#000000\">MethodArguments&nbsp;<\/font><font color=\"#0000ff\">##Expression(##class(App.Log).GetMethodArguments(%classname,%methodname))<br \/>  <\/font>  <\/p>\n<h3>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043b\u0430\u0441\u0441 App.Use \u0441 \u043c\u0435\u0442\u043e\u0434\u043e\u043c Test \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">App.Use<\/b><\/p>\n<div class=\"spoiler_text\"><font color=\"#000080\">Include&nbsp;<\/font><font color=\"#ff0000\">App<\/font><font color=\"#000000\">.<\/font><font color=\"#ff0000\">LogMacro<br \/>  <\/font><font color=\"#000080\">Class&nbsp;App.Use&nbsp;<\/font><font color=\"#000000\">[&nbsp;<\/font><font color=\"#000080\">CompileAfter&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#000080\">App.Log&nbsp;<\/font><font color=\"#000000\">]<br \/>  {<br \/>  <\/font><font color=\"#000080\">\/\/\/&nbsp;Do&nbsp;##class(App.Use).Test()<br \/>  ClassMethod&nbsp;<\/font><font color=\"#000000\">Test(<\/font><font color=\"#ff00ff\">a&nbsp;<\/font><font color=\"#000080\">As&nbsp;%Integer&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#000080\">1<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#000080\">ByRef&nbsp;<\/font><font color=\"#ff00ff\">b&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#000080\">2<\/font><font color=\"#000000\">)<br \/>  {<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">$$$LogWarn<\/font><font color=\"#000000\">(<\/font><font color=\"#008000\">&quot;\u0422\u0435\u043a\u0441\u0442&quot;<\/font><font color=\"#000000\">)<br \/>  }<br \/>  }<\/font>  <\/div>\n<\/div>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u0430\u043a\u0440\u043e\u0441 <font color=\"#0000ff\">$$$LogWarn<\/font><font color=\"#000000\">(<\/font><font color=\"#008000\">&quot;\u0422\u0435\u043a\u0441\u0442&quot;<\/font>) \u0432 int \u043a\u043e\u0434\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0440\u043e\u043a\u0443:<br \/>  <font color=\"#0000ff\">Do<\/font><\/font>&nbsp;<\/font><\/font><font color=\"#000080\">##class<\/font><font color=\"#000000\">(<\/font><font color=\"#008080\">App<\/font>.Log<font color=\"#000000\">)<\/font>.<font color=\"#0000ff\">AddRecord<\/font><font color=\"#000000\">(<\/font><font color=\"#008000\">&quot;App.Use&quot;<\/font><font color=\"#000000\">,<\/font><font color=\"#008000\">&quot;Test&quot;<\/font><font color=\"#000000\">,<\/font><font color=\"#0000ff\">$st<\/font><font color=\"#000000\">(<\/font><font color=\"#0000ff\">$st<\/font><font color=\"#000000\">(<\/font>-1),<font color=\"#008000\">&quot;PLACE&quot;<\/font><font color=\"#000000\">)<\/font>,<font color=\"#008000\">&quot;WARN&quot;<\/font><font color=\"#000000\">,<\/font><font color=\"#008000\">&quot;a=&quot;<\/font><font color=\"#000000\">_<\/font><font color=\"#0000ff\">$g<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">a<\/font><font color=\"#000000\">,<\/font><font color=\"#008000\">&quot;Null&quot;<\/font><font color=\"#000000\">)<\/font>_<font color=\"#008000\">&quot;;&nbsp;b=&quot;<\/font><font color=\"#000000\">_<\/font><font color=\"#0000ff\">$g<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">b<\/font><font color=\"#000000\">,<\/font><font color=\"#008000\">&quot;Null&quot;<\/font><font color=\"#000000\">)<\/font>_<font color=\"#008000\">&quot;;&quot;<\/font><font color=\"#000000\">,<\/font>&nbsp;<font color=\"#008000\">&quot;\u0422\u0435\u043a\u0441\u0442&quot;<\/font>)<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 App.Log:<br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/f96\/a50\/577\/f96a505774cc43ddbe285a424f8d89e3.PNG\"\/><\/p>\n<h2>\u0423\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f<\/h2>\n<p>  \u041d\u0430\u043f\u0438\u0441\u0430\u0432 \u043e\u0441\u043d\u043e\u0432\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u0434\u0443\u043c\u0430\u0435\u043c \u043a\u0430\u043a \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c. <br \/>  \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432-\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e <a href=\"http:\/\/docs.intersystems.com\/ens20151\/csp\/docbook\/DocBook.UI.Page.cls?KEY=GOBJ_objapi#GOBJ_objapi_oref\">oref<\/a> \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. <br \/>  \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u2014 \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0438\u0437 \u0445\u0440\u0430\u043d\u0438\u043c\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 (\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b) \u043c\u0435\u0442\u043e\u0434\u0430.<\/p>\n<h3>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432-\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432<\/h3>\n<p>  \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0432 \u043b\u043e\u0433 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 ArgumentsListToString \u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a: <font color=\"#008000\">&quot;_$g(&quot;&nbsp;<\/font><font color=\"#000000\">_&nbsp;<\/font><font color=\"#0000ff\">$lg<\/font><font color=\"#000000\">(<\/font><font color=\"#0000ff\">$lg<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">List<\/font><font color=\"#000000\">,<\/font><font color=\"#800000\">i<\/font><font color=\"#000000\">))&nbsp;_&nbsp;<\/font><font color=\"#008000\">&quot;,&quot;<\/font><font color=\"#000000\">_<\/font><font color=\"#0000ff\">$$$quote<\/font><font color=\"#000000\">(..<\/font><font color=\"#0000ff\">#Null<\/font><font color=\"#000000\">)_<\/font><font color=\"#008000\">&quot;)_&quot;<\/font>. \u041f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0451\u043c \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u043c \u0435\u0451 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 GetArgumentValue, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0438\u043c\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438 \u0435\u0451 \u043a\u043b\u0430\u0441\u0441 (\u0430 \u0432\u0441\u0451 \u044d\u0442\u043e \u043d\u0430\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u0438\u0437 FormalSpecParsed) \u0430 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u0434 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0449\u0438\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0432 \u0441\u0442\u0440\u043e\u043a\u0443. \u0414\u043b\u044f \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434, \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0432 JSON \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 SerializeObject (\u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u0438\u0437 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430) \u0438 WriteJSONFromObject (\u0434\u043b\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432 JSON):<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041c\u0435\u0442\u043e\u0434\u044b GetArgumentValue, SerializeObject \u0438 WriteJSONFromObject:<\/b><\/p>\n<div class=\"spoiler_text\"><font color=\"#000080\">ClassMethod&nbsp;<\/font><font color=\"#000000\">GetArgumentValue(<\/font><font color=\"#ff00ff\">Name&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#ff00ff\">ClassName&nbsp;<\/font><font color=\"#000080\">As&nbsp;%Dictionary.CacheClassname<\/font><font color=\"#000000\">)&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String<br \/>  <\/font><font color=\"#000000\">{<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">If&nbsp;$ClassMethod<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">ClassName<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#008000\">&quot;%Extends&quot;<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#008000\">&quot;%RegisteredObject&quot;<\/font><font color=\"#000000\">)&nbsp;<\/font><font color=\"#800080\">{<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008000\">\/\/&nbsp;it&#8217;s&nbsp;an&nbsp;object<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Return&nbsp;<\/font><font color=\"#008000\">&quot;_##class(App.Log).SerializeObject(&quot;<\/font><font color=\"#000000\">_<\/font><font color=\"#800000\">Name&nbsp;<\/font><font color=\"#000000\">_&nbsp;<\/font><font color=\"#008000\">&quot;)_&quot;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800080\">}&nbsp;<\/font><font color=\"#0000ff\">Else&nbsp;<\/font><font color=\"#800080\">{<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008000\">\/\/&nbsp;it&#8217;s&nbsp;a&nbsp;datatype<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Return&nbsp;<\/font><font color=\"#008000\">&quot;_$g(&quot;&nbsp;<\/font><font color=\"#000000\">_&nbsp;<\/font><font color=\"#800000\">Name&nbsp;<\/font><font color=\"#000000\">_&nbsp;<\/font><font color=\"#008000\">&quot;,&quot;<\/font><font color=\"#000000\">_<\/font><font color=\"#0000ff\">$$$quote<\/font><font color=\"#000000\">(..<\/font><font color=\"#0000ff\">#Null<\/font><font color=\"#000000\">)_<\/font><font color=\"#008000\">&quot;)_&quot;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800080\">}<br \/>  <\/font><font color=\"#000000\">}<br \/>  <\/font><font color=\"#000080\">ClassMethod&nbsp;<\/font><font color=\"#000000\">SerializeObject(<\/font><font color=\"#ff00ff\">Object<\/font><font color=\"#000000\">)&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String<br \/>  <\/font><font color=\"#000000\">{<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Return<\/font><font color=\"#000000\">:&#8217;<\/font><font color=\"#0000ff\">$IsObject<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">Object<\/font><font color=\"#000000\">)&nbsp;<\/font><font color=\"#800000\">Object<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Return&nbsp;<\/font><font color=\"#000000\">..<\/font><font color=\"#0000ff\">WriteJSONFromObject<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">Object<\/font><font color=\"#000000\">)<br \/>  }<br \/>  <\/font><font color=\"#000080\">ClassMethod&nbsp;<\/font><font color=\"#000000\">WriteJSONFromObject(<\/font><font color=\"#ff00ff\">Object<\/font><font color=\"#000000\">)&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String&nbsp;<\/font><font color=\"#000000\">[&nbsp;<\/font><font color=\"#000080\">ProcedureBlock&nbsp;<\/font><font color=\"#000000\">=&nbsp;0&nbsp;]<br \/>  {<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008000\">\/\/&nbsp;Create&nbsp;a&nbsp;string&nbsp;that&nbsp;we&nbsp;will&nbsp;redirect&nbsp;to<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Set&nbsp;<\/font><font color=\"#800000\">Str&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#008000\">&quot;&quot;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Use&nbsp;$io<\/font><font color=\"#000000\">::(<\/font><font color=\"#008000\">&quot;^&quot;<\/font><font color=\"#000000\">_<\/font><font color=\"#0000ff\">$ZNAME<\/font><font color=\"#000000\">)<br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008000\">\/\/&nbsp;Enable&nbsp;redirection<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Do&nbsp;<\/font><font color=\"#000080\">##class<\/font><font color=\"#000000\">(<\/font><font color=\"#008080\">%Device<\/font><font color=\"#000000\">).<\/font><font color=\"#0000ff\">ReDirectIO<\/font><font color=\"#000000\">(1)<br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008000\">\/\/&nbsp;Any&nbsp;write&nbsp;statements&nbsp;here&nbsp;will&nbsp;be&nbsp;redirected&nbsp;to&nbsp;the&nbsp;labels&nbsp;defined&nbsp;below<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Do&nbsp;<\/font><font color=\"#000080\">##class<\/font><font color=\"#000000\">(<\/font><font color=\"#008080\">%ZEN.Auxiliary.jsonProvider<\/font><font color=\"#000000\">).<\/font><font color=\"#0000ff\">%ObjectToJSON<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">Object<\/font><font color=\"#000000\">)<br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008000\">\/\/&nbsp;Disable&nbsp;redirection<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Do&nbsp;<\/font><font color=\"#000080\">##class<\/font><font color=\"#000000\">(<\/font><font color=\"#008080\">%Device<\/font><font color=\"#000000\">).<\/font><font color=\"#0000ff\">ReDirectIO<\/font><font color=\"#000000\">(0)<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Return&nbsp;<\/font><font color=\"#800000\">Str<br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008000\">\/\/&nbsp;Labels&nbsp;that&nbsp;allow&nbsp;for&nbsp;IO&nbsp;redirection<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;Read&nbsp;Character&nbsp;&#8212;&nbsp;we&nbsp;don&#8217;t&nbsp;care&nbsp;about&nbsp;reading<br \/>  <\/font><font color=\"#ff0000\">rchr<\/font><font color=\"#000000\">\u00a9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Quit<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008000\">\/\/&nbsp;Read&nbsp;a&nbsp;string&nbsp;&#8212;&nbsp;we&nbsp;don&#8217;t&nbsp;care&nbsp;about&nbsp;reading<br \/>  <\/font><font color=\"#ff0000\">rstr<\/font><font color=\"#000000\">(sz,to)&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Quit<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008000\">\/\/&nbsp;Write&nbsp;a&nbsp;character&nbsp;&#8212;&nbsp;call&nbsp;the&nbsp;output&nbsp;label<br \/>  <\/font><font color=\"#ff0000\">wchr<\/font><font color=\"#000000\">(s)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Do&nbsp;<\/font><font color=\"#ff0000\">output<\/font><font color=\"#000000\">(<\/font><font color=\"#0000ff\">$char<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">s<\/font><font color=\"#000000\">))&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Quit<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008000\">\/\/&nbsp;Write&nbsp;a&nbsp;form&nbsp;feed&nbsp;&#8212;&nbsp;call&nbsp;the&nbsp;output&nbsp;label<br \/>  <\/font><font color=\"#ff0000\">wff<\/font><font color=\"#000000\">()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Do&nbsp;<\/font><font color=\"#ff0000\">output<\/font><font color=\"#000000\">(<\/font><font color=\"#0000ff\">$char<\/font><font color=\"#000000\">(12))&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Quit<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008000\">\/\/&nbsp;Write&nbsp;a&nbsp;newline&nbsp;&#8212;&nbsp;call&nbsp;the&nbsp;output&nbsp;label<br \/>  <\/font><font color=\"#ff0000\">wnl<\/font><font color=\"#000000\">()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Do&nbsp;<\/font><font color=\"#ff0000\">output<\/font><font color=\"#000000\">(<\/font><font color=\"#0000ff\">$char<\/font><font color=\"#000000\">(13,10))&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Quit<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008000\">\/\/&nbsp;Write&nbsp;a&nbsp;string&nbsp;&#8212;&nbsp;call&nbsp;the&nbsp;output&nbsp;label<br \/>  <\/font><font color=\"#ff0000\">wstr<\/font><font color=\"#000000\">(s)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Do&nbsp;<\/font><font color=\"#ff0000\">output<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">s<\/font><font color=\"#000000\">)&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Quit<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008000\">\/\/&nbsp;Write&nbsp;a&nbsp;tab&nbsp;&#8212;&nbsp;call&nbsp;the&nbsp;output&nbsp;label<br \/>  <\/font><font color=\"#ff0000\">wtab<\/font><font color=\"#000000\">(s)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Do&nbsp;<\/font><font color=\"#ff0000\">output<\/font><font color=\"#000000\">(<\/font><font color=\"#0000ff\">$char<\/font><font color=\"#000000\">(9))&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Quit<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008000\">\/\/&nbsp;Output&nbsp;label&nbsp;&#8212;&nbsp;this&nbsp;is&nbsp;where&nbsp;you&nbsp;would&nbsp;handle&nbsp;what&nbsp;you&nbsp;actually&nbsp;want&nbsp;to&nbsp;do.<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;in&nbsp;our&nbsp;case,&nbsp;we&nbsp;want&nbsp;to&nbsp;write&nbsp;to&nbsp;Str<br \/>  <\/font><font color=\"#ff0000\">output<\/font><font color=\"#000000\">(s)&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Set&nbsp;<\/font><font color=\"#800000\">Str&nbsp;<\/font><font color=\"#000000\">= <\/font><font color=\"#800000\">Str<\/font><font color=\"#000000\">_<\/font><font color=\"#800000\">s&nbsp;<\/font><font color=\"#0000ff\">Quit<br \/>  <\/font>}  <\/div>\n<\/div>\n<p>  \u0417\u0430\u043f\u0438\u0441\u044c \u0432 \u043b\u043e\u0433 \u0441 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c-\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/a23\/ad9\/178\/a23ad917869a4f1fbf97a75b551fcded.PNG\"\/><\/p>\n<h3>\u041e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430<\/h3>\n<p>  \u0418\u0434\u0435\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438 \u0432\u0441\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 (\u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u2014 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430, \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f). \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043c\u0435\u0442\u043e\u0434\u0430 <a href=\"http:\/\/docs.intersystems.com\/ens20151\/csp\/docbook\/DocBook.UI.Page.cls?KEY=ROBJ_method_procedureblock\">ProcedureBlock<\/a>, \u0435\u0441\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0432\u043d\u044b\u043c 0, \u0442\u043e \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430, \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0438 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u0430. \u041d\u0430\u0448 \u043c\u0435\u0442\u043e\u0434, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 App.Log \u0438 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e Arguments. <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041c\u0435\u0442\u043e\u0434\u044b LoadContext \u0438 DeserializeObject<\/b><\/p>\n<div class=\"spoiler_text\"><font color=\"#000080\">ClassMethod&nbsp;<\/font><font color=\"#000000\">LoadContext(<\/font><font color=\"#ff00ff\">Id<\/font><font color=\"#000000\">)&nbsp;<\/font><font color=\"#000080\">As&nbsp;%Status&nbsp;<\/font><font color=\"#000000\">[&nbsp;<\/font><font color=\"#000080\">ProcedureBlock&nbsp;<\/font><font color=\"#000000\">=&nbsp;0&nbsp;]<br \/>  {<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Return<\/font><font color=\"#000000\">:&#8217;..<\/font><font color=\"#0000ff\">%ExistsId<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">Id<\/font><font color=\"#000000\">)&nbsp;<\/font><font color=\"#0000ff\">$$$OK<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;<\/font><font color=\"#800000\">Obj&nbsp;<\/font><font color=\"#000000\">=&nbsp;..<\/font><font color=\"#0000ff\">%OpenId<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">Id<\/font><font color=\"#000000\">)<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Set&nbsp;<\/font><font color=\"#800000\">Arguments&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#800000\">Obj<\/font><font color=\"#000000\">.<\/font><font color=\"#0000ff\">Arguments<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;<\/font><font color=\"#800000\">List&nbsp;<\/font><font color=\"#000000\">=&nbsp;..<\/font><font color=\"#0000ff\">GetMethodArgumentsList<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">Obj<\/font><font color=\"#000000\">.<\/font><font color=\"#0000ff\">ClassName<\/font><font color=\"#000000\">,<\/font><font color=\"#800000\">Obj<\/font><font color=\"#000000\">.<\/font><font color=\"#0000ff\">MethodName<\/font><font color=\"#000000\">)<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">For&nbsp;<\/font><font color=\"#800000\">i<\/font><font color=\"#000000\">=1:1:<\/font><font color=\"#0000ff\">$Length<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">Arguments<\/font><font color=\"#000000\">,<\/font><font color=\"#008000\">&quot;;&quot;<\/font><font color=\"#000000\">)-1&nbsp;<\/font><font color=\"#800080\">{<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Set&nbsp;<\/font><font color=\"#800000\">Argument&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#0000ff\">$Piece<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">Arguments<\/font><font color=\"#000000\">,<\/font><font color=\"#008000\">&quot;;&quot;<\/font><font color=\"#000000\">,<\/font><font color=\"#800000\">i<\/font><font color=\"#000000\">)<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Set&nbsp;<\/font><font color=\"#000000\">@<\/font><font color=\"#0000ff\">$lg<\/font><font color=\"#000000\">(<\/font><font color=\"#0000ff\">$lg<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">List<\/font><font color=\"#000000\">,<\/font><font color=\"#800000\">i<\/font><font color=\"#000000\">))&nbsp;=&nbsp;..<\/font><font color=\"#0000ff\">DeserializeObject<\/font><font color=\"#000000\">(<\/font><font color=\"#0000ff\">$Piece<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">Argument<\/font><font color=\"#000000\">,<\/font><font color=\"#008000\">&quot;=&quot;<\/font><font color=\"#000000\">,2),<\/font><font color=\"#0000ff\">$lg<\/font><font color=\"#000000\">(<\/font><font color=\"#0000ff\">$lg<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">List<\/font><font color=\"#000000\">,<\/font><font color=\"#800000\">i<\/font><font color=\"#000000\">),2))<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800080\">}<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Kill&nbsp;<\/font><font color=\"#800000\">Obj<\/font><font color=\"#000000\">,<\/font><font color=\"#800000\">Arguments<\/font><font color=\"#000000\">,<\/font><font color=\"#800000\">Argument<\/font><font color=\"#000000\">,<\/font><font color=\"#800000\">i<\/font><font color=\"#000000\">,<\/font><font color=\"#800000\">Id<\/font><font color=\"#000000\">,<\/font><font color=\"#800000\">List<br \/>  <\/font><font color=\"#000000\">}<br \/>  <\/font><font color=\"#000080\">ClassMethod&nbsp;<\/font><font color=\"#000000\">DeserializeObject(<\/font><font color=\"#ff00ff\">String<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#ff00ff\">ClassName<\/font><font color=\"#000000\">)&nbsp;<\/font><font color=\"#000080\">As&nbsp;%String<br \/>  <\/font><font color=\"#000000\">{<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">If&nbsp;$ClassMethod<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">ClassName<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#008000\">&quot;%Extends&quot;<\/font><font color=\"#000000\">,&nbsp;<\/font><font color=\"#008000\">&quot;%RegisteredObject&quot;<\/font><font color=\"#000000\">)&nbsp;<\/font><font color=\"#800080\">{<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#008000\">\/\/&nbsp;it&#8217;s&nbsp;an&nbsp;object<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Set&nbsp;<\/font><font color=\"#800000\">st&nbsp;<\/font><font color=\"#000000\">=&nbsp;<\/font><font color=\"#000080\">##class<\/font><font color=\"#000000\">(<\/font><font color=\"#008080\">%ZEN.Auxiliary.jsonProvider<\/font><font color=\"#000000\">).<\/font><font color=\"#0000ff\">%ConvertJSONToObject<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">String<\/font><font color=\"#000000\">,,.<\/font><font color=\"#800000\">obj<\/font><font color=\"#000000\">)<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Return<\/font><font color=\"#000000\">:<\/font><font color=\"#0000ff\">$$$ISOK<\/font><font color=\"#000000\">(<\/font><font color=\"#800000\">st<\/font><font color=\"#000000\">)&nbsp;<\/font><font color=\"#800000\">obj<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#800080\">}<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<\/font><font color=\"#0000ff\">Return&nbsp;<\/font><font color=\"#800000\">String<br \/>  <\/font>}  <\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>zw &gt; do ##class(App.Log).LoadContext(9) zw &gt;a=3 &gt;b=&lt;OBJECT REFERENCE&gt;[2@%ZEN.proxyObject] zw b &gt; +----------------- general information --------------- |      oref value: 2 |      class name: %ZEN.proxyObject | reference count: 2 +----------------- attribute values ------------------ |           %changed = 1 |         %data(&quot;A&quot;) = 1 |         %data(&quot;B&quot;) = &quot;stringvalue&quot; |             %index = &quot;&quot; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<h2>\u0427\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435?<\/h2>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u2014 \u044d\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0435\u0449\u0451 \u043e\u0434\u043d\u043e\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u043c \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u0436\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0435\u0442\u043e\u0434\u0430. <\/p>\n<h2>\u0412\u044b\u0432\u043e\u0434\u044b<\/h2>\n<p>  \u041c\u0430\u043a\u0440\u043e\u0441\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0447\u0430\u0441\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u044f \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435.<\/p>\n<h2>\u0421\u0441\u044b\u043b\u043a\u0438<\/h2>\n<p>  <a href=\"http:\/\/habrahabr.ru\/company\/intersystems\/blog\/258081\/\">\u0427\u0430\u0441\u0442\u044c I. \u041c\u0430\u043a\u0440\u043e\u0441\u044b<\/a><br \/>  <a href=\"https:\/\/github.com\/intersystems-ru\/Log\">GitHub \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a><br \/>  <a href=\"https:\/\/gist.githubusercontent.com\/eduard93\/3af3e1f31604fef81df6\/raw\/e3daea9bb63576f73d130a6fecc709fec448e824\/App.Log.cls.xml\">\u041a\u043b\u0430\u0441\u0441\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a><\/p>\n<p>  \u0410\u0432\u0442\u043e\u0440 \u0432\u044b\u0440\u0430\u0436\u0430\u0435\u0442 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u044c \u0445\u0430\u0431\u0440\u0430\u044e\u0437\u0435\u0440\u0430\u043c  <a href=\"http:\/\/habrahabr.ru\/users\/daimor\/\" class=\"user_link\">Daimor<\/a>,  <a href=\"http:\/\/habrahabr.ru\/users\/greyder\/\" class=\"user_link\">Greyder<\/a> \u0438 \u0435\u0449\u0435 \u043e\u0434\u043d\u043e\u043c\u0443 \u043e\u0447\u0435\u043d\u044c \u043a\u043e\u043c\u043f\u0435\u0442\u0435\u043d\u0442\u043d\u043e\u043c\u0443 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0443, \u043f\u043e\u0436\u0435\u043b\u0430\u0432\u0448\u0435\u043c\u0443 \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u043d\u0430\u0437\u0432\u0430\u043d\u043d\u044b\u043c, \u0437\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u0432 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043a\u043e\u0434\u0430.     \t<\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/258805\/\"> http:\/\/habrahabr.ru\/post\/258805\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>     \t<img decoding=\"async\" alt=\"Monet impression sunrise\" src=\"https:\/\/habrastorage.org\/files\/c16\/e69\/e5e\/c16e69e5ee5f4d49b5b869985a8cf479.jpg\"\/><\/p>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u0412 <a href=\"http:\/\/habrahabr.ru\/company\/intersystems\/blog\/258081\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439<\/a> \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432, \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u0448\u0438\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u044b. \u041f\u0438\u0441\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-259998","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/259998","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=259998"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/259998\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=259998"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=259998"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=259998"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}