﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Метаданные. Как сейчас они заполняются?</title>
  <id>~/topic/1534/metadannye_-kak-seichas-oni-zapolnyayutsya/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-15T10:54:19Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=1534" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/7632/</id>
    <title type="text">aspirant: Mikhail Sukhov: Колонки у таблицы инструментов заполнены. А как они заполняются? Локально ...</title>
    <published>2011-04-22T16:18:56Z</published>
    <updated>2016-08-15T23:58:40Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7631)" rel="nofollow" target="_blank"&gt;aspirant&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7630)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
Колонки у таблицы инструментов заполнены. А как они заполняются? Локально никаких схем нет, значит откуда то тянется. А откуда?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;см. конструктор PlazaSystemTableRegistry&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Понял. Но это же не совсем то, о чем в &lt;a href="http://stocksharp.com/posts/m/5675/"&gt;начале планировали&lt;/a&gt;. Сейчас нет ни парсинга схем, ни сохранения, ни минимального набора колонок (как я понял, добавляются вообще все колонки). Это в планах стоит или решил идти по другому? Это первое.&lt;/p&gt;
&lt;p&gt;И второе, а почему ты решил отделить основные таблица от других в PlazaSystemTableRegistry? Из его описания:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;В этом классе перечислены системные таблицы, которые не видны клиенту, а создаются, чтобы мапить данные из потоков в стандартные объекты фреймворка. Их нужно создавать отдельно от клиентских таблиц, чтобы клиент &lt;strong&gt;не мог редактировать состав колоннок&lt;/strong&gt; внутри переменных типа PlazaTable.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Выделенное как раз неправильно. А если пользователь захочет дополнительные колонки для инструментов или заявок? Они должны идти в Security.ExtensionInfo (для заявок Order.ExtensionInfo).&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/7702/</id>
    <title type="text">aspirant: А что дальше? Заявки? Да, было бы неплохо. </title>
    <published>2011-04-26T20:06:50Z</published>
    <updated>2011-04-26T20:06:50Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7699)" rel="nofollow" target="_blank"&gt;aspirant&lt;/a&gt;:&lt;/strong&gt;
А что дальше?  Заявки?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Да, было бы неплохо.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/7699/</id>
    <title type="text">Mikhail Sukhov: После изменений PlazaSystemTableRegistry кажется опять лишним классом. В чем фишка е...</title>
    <published>2011-04-26T18:52:34Z</published>
    <updated>2011-04-26T18:52:34Z</updated>
    <author>
      <name>aspirant</name>
      <uri>https://stocksharp.ru/users/6114/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7667)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
После изменений PlazaSystemTableRegistry кажется опять лишним классом. В чем фишка его отдельного существования от PlazaTableRegistry? Логики то он никакой не содержит.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Наконец я узрел истину[smile]  Только что удалил PlazaSystemTableRegistry, потому что он действительно лишний.  Раньше я почему-то думал, что пользователь может удалить нужные нам колонки в какой-нибудь таблице, и мы не сможем мапить объекты.  Теперь понял, что это у него не получится.&lt;/p&gt;
&lt;p&gt;Сейчас собираюсь поправить поля IsMandatory  в таблицах, из которых мы мапим объекты.  А что дальше?  Заявки?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/7667/</id>
    <title type="text">aspirant: Сделал рефакторинг двух классов PlazaSessionContentsFutureColumns и PlazaSessionContentsOp...</title>
    <published>2011-04-25T20:42:16Z</published>
    <updated>2011-04-25T20:42:16Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7666)" rel="nofollow" target="_blank"&gt;aspirant&lt;/a&gt;:&lt;/strong&gt;
Сделал рефакторинг двух классов PlazaSessionContentsFutureColumns и PlazaSessionContentsOptionColumns (и их родителя, конечно же, PlazaSessionContentsDerivativeColumns) по принципу, что не мапится, то необязательное.  Если правильно, доделаю отстальные системные таблицы.  Что касается остальных таблиц, это уже нужно смотреть тем, кто &amp;quot;работает по профилю&amp;quot;.&lt;/p&gt;
&lt;p&gt;Прописал автоматическое добавление служебных колоннок репликации (replID, replRev и replAct) в статическом конструкторе PlazaTableRegistry.  Более лучшего места не нашел.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Поправил код. AddSystemColumns сам по себе не имеет смысла, потому что это и есть подмножество IsMandatory. Но добавлять нужно абсолютно все колонки IsMandatory = true для всех таблиц.&lt;/p&gt;
&lt;p&gt;И так по мелочи, в виде вынесения кода AddMandatoryColumns в хелпер класс.&lt;/p&gt;
&lt;p&gt;В конструкторе PlazaSystemTableRegistry сделал тоже самое, что и в PlazaTableRegistry. Код вроде как меньше получается. Можно вернуть, если против.&lt;/p&gt;
&lt;p&gt;После изменений PlazaSystemTableRegistry кажется опять лишним классом. В чем фишка его отдельного существования от PlazaTableRegistry? Логики то он никакой не содержит.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/7666/</id>
    <title type="text">Mikhail Sukhov: Еще лучше сделать проверку на удаление в PlazaColumnList чтобы выдывать сообщение об...</title>
    <published>2011-04-25T19:07:38Z</published>
    <updated>2011-04-25T19:07:38Z</updated>
    <author>
      <name>aspirant</name>
      <uri>https://stocksharp.ru/users/6114/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7638)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
Еще лучше сделать проверку на удаление в PlazaColumnList чтобы выдывать сообщение об ошибке при удалении колонки, которая PlazaColumn.IsMandatory = true.
Ты уже сам это сделал[smile]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7638)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
Особое внимание, IsMandatory это не только replID, replRev, replAct. Для, допустим, заявок это еще номер, время, объем и т.д. Вообщем то, без чего не может произойти минимальный маппинг.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Сделал рефакторинг двух классов PlazaSessionContentsFutureColumns и PlazaSessionContentsOptionColumns (и их родителя, конечно же, PlazaSessionContentsDerivativeColumns) по принципу, что не мапится, то необязательное.  Если правильно, доделаю отстальные системные таблицы.  Что касается остальных таблиц, это уже нужно смотреть тем, кто &amp;quot;работает по профилю&amp;quot;.&lt;/p&gt;
&lt;p&gt;Прописал автоматическое добавление служебных колоннок репликации (replID, replRev и replAct) в статическом конструкторе PlazaTableRegistry.  Более лучшего места не нашел.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/7638/</id>
    <title type="text">aspirant: Mikhail Sukhov: а почему ты решил отделить основные таблица от других в PlazaSystemTableRe...</title>
    <published>2011-04-22T20:00:07Z</published>
    <updated>2011-04-22T20:00:07Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7636)" rel="nofollow" target="_blank"&gt;aspirant&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7632)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
а почему ты решил отделить основные таблица от других в PlazaSystemTableRegistry?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;PlazaTableRegistry - в нем все таблицы Плазы для клиента.  Создаются пустые, без колоннок.  На клиенте лежит обязанность наполнить их перед тем, как передать в StartListeners.  Можно, кстати, по умолчанию добавлять &lt;strong&gt;первыми&lt;/strong&gt; во все таблицы поля replID, replRev, replAct, потому что они нужны всегда.  Без них Плаза будет сыпать ошибки.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Согласен, это правильно. Еще лучше сделать проверку на удаление в PlazaColumnList чтобы выдывать сообщение об ошибке при удалении колонки, которая PlazaColumn.IsMandatory = true. Особое внимание, IsMandatory это не только replID, replRev, replAct. Для, допустим, заявок это еще номер, время, объем и т.д. Вообщем то, без чего не может произойти минимальный маппинг.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7636)" rel="nofollow" target="_blank"&gt;aspirant&lt;/a&gt;:&lt;/strong&gt;
Я как-то спрашивал (может не совсем дотошно), нужно ли нам сохранять state схем, меняющийся от одного запуска программы к другому.  То есть мы пока не обрабатываем такой сценарий: пользователь запустил PlazaTrader, добавил в коде в таблицу 1 колонки 1, 2, 3, поработал, вышел.  Пользователь снова запустил PlazaTrader, рассчитывая, что мы уже за него заполнили таблицу 1 колонками 1, 2, 3, добавил в таблицу 1 колонку 4, убрал колонку 2, поработал вышел, уверенный, что, когда он в следующий раз заполнит PlazaTrader, мы за него заполним таблицу 1 колонками 1, 3, 4.   Или так должно быть[confused]
Сейчас, как я вижу, сценарий такой: пользователь запустил PlazaTrader, добавил в коде в таблицу 1 колонки 1, 2, 3, поработал, вышел.  Снова запустил, заполнил своим кодом те же метаданные, поработал, вышел, и так до бесконечности.  Если это так, мой алгоритм действий проще: на основе заполненных PlazaTables внутри PlazaTableRegistry создаются временные файлы-схемы, которые передаются роутеру Плазе.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Понял, тут ты прав абсолютно. Я прогнал.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7636)" rel="nofollow" target="_blank"&gt;aspirant&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7632)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
А если пользователь захочет дополнительные колонки для инструментов или заявок? Они должны идти в Security.ExtensionInfo (для заявок Order.ExtensionInfo).
Не совсем понял, но попытаюсь ответить.  Что это за дополнительные колонки и откуда они будут браться?  Если, например, рассматривать метод OnNewDataFromOptionSessionContents (мапит объекты Security опиционов), в нем есть &lt;strong&gt;все колонки, которые есть в потоке\таблице&lt;/strong&gt; FORTS_OPTINFO_REPL\opt_sess_contents.  Если клиент хочет добавить что-то дополнительное, ему придется это делать вручную, потому что Плаза не примет схему с чужими колонками.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;Выделенное неправильно. В целях оптимизации трафика нужно создавать только минимальный набор параметров у этих таблиц. Можно решить какой. Для этого и я ввел свойство PlazaColumn.IsMandatory. Это те колонки, без которых нельзя обработать нормально поступившие данные. Сам понимаешь, если по инструменту придут только replID, replRev, replAct, понять что есть что мы не сможем.&lt;/p&gt;
&lt;p&gt;А вот когда юзеру требуется что-то дополнительное, он сам себе отдает отчет в увеличении трафика и добавляет колонку как ты описал выше.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/7636/</id>
    <title type="text">Mikhail Sukhov: а почему ты решил отделить основные таблица от других в PlazaSystemTableRegistry? Pl...</title>
    <published>2011-04-22T19:29:53Z</published>
    <updated>2011-04-22T19:29:53Z</updated>
    <author>
      <name>aspirant</name>
      <uri>https://stocksharp.ru/users/6114/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7632)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
а почему ты решил отделить основные таблица от других в PlazaSystemTableRegistry?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;PlazaTableRegistry - в нем все таблицы Плазы для клиента.  Создаются пустые, без колоннок.  На клиенте лежит обязанность наполнить их перед тем, как передать в StartListeners.  Можно, кстати, по умолчанию добавлять &lt;strong&gt;первыми&lt;/strong&gt; во все таблицы поля replID, replRev, replAct, потому что они нужны всегда.  Без них Плаза будет сыпать ошибки.&lt;/p&gt;
&lt;p&gt;PlazaSystemTableRegistry - нужен нам, чтобы мапить объекты.  Этот класс, кстати, скрыт от клиентского кода.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7632)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
Сейчас нет ни парсинга схем, ни сохранения&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Я как-то спрашивал (может не совсем дотошно), нужно ли нам сохранять state схем, меняющийся от одного запуска программы к другому.  То есть мы пока не обрабатываем такой сценарий: пользователь запустил PlazaTrader, добавил в коде в таблицу 1 колонки 1, 2, 3, поработал, вышел.  Пользователь снова запустил PlazaTrader, рассчитывая, что мы уже за него заполнили таблицу 1 колонками 1, 2, 3, добавил в таблицу 1 колонку 4, убрал колонку 2, поработал вышел, уверенный, что, когда он в следующий раз заполнит PlazaTrader, мы за него заполним таблицу 1 колонками 1, 3, 4.   Или так должно быть[confused]
Сейчас, как я вижу, сценарий такой: пользователь запустил PlazaTrader, добавил в коде в таблицу 1 колонки 1, 2, 3, поработал, вышел.  Снова запустил, заполнил своим кодом те же метаданные, поработал, вышел, и так до бесконечности.  Если это так, мой алгоритм действий проще: на основе заполненных PlazaTables внутри PlazaTableRegistry создаются временные файлы-схемы, которые передаются роутеру Плазе.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7632)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
А если пользователь захочет дополнительные колонки для инструментов или заявок? Они должны идти в Security.ExtensionInfo (для заявок Order.ExtensionInfo).
Не совсем понял, но попытаюсь ответить.  Что это за дополнительные колонки и откуда они будут браться?  Если, например, рассматривать метод OnNewDataFromOptionSessionContents (мапит объекты Security опиционов), в нем есть все колонки, которые есть в потоке\таблице FORTS_OPTINFO_REPL\opt_sess_contents.  Если клиент хочет добавить что-то дополнительное, ему придется это делать вручную, потому что Плаза не примет схему с чужими колонками.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/7631/</id>
    <title type="text">Mikhail Sukhov: Колонки у таблицы инструментов заполнены. А как они заполняются? Локально никаких сх...</title>
    <published>2011-04-22T15:04:27Z</published>
    <updated>2011-04-22T15:04:27Z</updated>
    <author>
      <name>aspirant</name>
      <uri>https://stocksharp.ru/users/6114/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7630)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
Колонки у таблицы инструментов заполнены. А как они заполняются? Локально никаких схем нет, значит откуда то тянется. А откуда?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;см. конструктор PlazaSystemTableRegistry&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/7630/</id>
    <title type="text">Колонки у таблицы инструментов заполнены. А как они заполняются? Локально никаких схем нет, значит о...</title>
    <published>2011-04-22T14:43:29Z</published>
    <updated>2011-04-22T14:43:29Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Колонки у таблицы инструментов заполнены. А как они заполняются? Локально никаких схем нет, значит откуда то тянется. А откуда?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>