powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Событие в TablePane
25 сообщений из 25, страница 1 из 1
Событие в TablePane
    #38315958
Sabyrov.Talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как можно запустить какой-нибудь метод, который срабатывает при созданий нового объекта в классе с которым связан TablePane.
Как называется это событие?
...
Рейтинг: 0 / 0
Событие в TablePane
    #38318340
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sabyrov.Talgat ,

<tablePane>

Я вижу два вопроса, а не один, из которых мало что понятно:
  • Как можно запустить какой-нибудь метод
  • Как называется это событие
То есть при изменении таблицы (через SQL [тригеры] или объекты [Callback %On...()]) Вы хотите, чтобы сделанные изменения отобразились на странице?
Если это так, то нужно делать либо автообновление страницы по аналогии с Порталом, либо вручную обновить таблицу . Готовых событий <tablePane> для этого не предоставляет.

PS: рекомендую к изучению Учебное пособие «Технология ZEN / PROTOTYPE 6»
...
Рейтинг: 0 / 0
Событие в TablePane
    #38318619
imdb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit Sabyrov.Talgat ,

Я вижу два вопроса, а не один, из которых мало что понятно:
  • Как можно запустить какой-нибудь метод
  • Как называется это событие
То есть при изменении таблицы (через SQL [тригеры] или объекты [Callback %On...()]) Вы хотите, чтобы сделанные изменения отобразились на странице?

Я так понял, что нужно узнать, произошли ли изменения в классе, с которым связан <tablePane> и в событие, которое при этом выполняется - что-то сделать. Соответственно вопрос, что это за событие. Но это моя интерпретация.

Но <tablePane> может наполняться разными данными (запрос из любого набора классов). Поэтому не совсем понятно, какой класс при этом проверяется. Другое дело, что есть <dataController>, который может быть связан с определенным классом.
Я нашел только метод "raiseDataChange" компонента <dataController>: <dataController> Methods .

Но, боюсь, автор уже решил свою задачу за это время.
...
Рейтинг: 0 / 0
Событие в TablePane
    #38318824
Sabyrov.Talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit, Есть класс, этот класс связан с tablePane(tableName="класс"). На зен странице ничего не происходит, никакая кнопка не нажимается,ничего не делается, есть только открытая зен страница. В Класс был добавлен новый обьект(но страница стоит не тронутой), и в этот момент срабатывает некий метод. Как это сделать?
...
Рейтинг: 0 / 0
Событие в TablePane
    #38318840
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sabyrov.Talgatservit, Есть класс, этот класс связан с tablePane(tableName="класс"). На зен странице ничего не происходит, никакая кнопка не нажимается,ничего не делается, есть только открытая зен страница. В Класс был добавлен новый обьект(но страница стоит не тронутой), и в этот момент срабатывает некий метод. Как это сделать?
Т.е. клиенты сидят такие у себя в браузерах... Ни о чем не подозревают... А сервер бац! И перезагрузил им всем таблички.
Так челе?
...
Рейтинг: 0 / 0
Событие в TablePane
    #38318847
Шваров Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sabyrov.Talgatservit, Есть класс, этот класс связан с tablePane(tableName="класс"). На зен странице ничего не происходит, никакая кнопка не нажимается,ничего не делается, есть только открытая зен страница. В Класс был добавлен новый обьект(но страница стоит не тронутой), и в этот момент срабатывает некий метод. Как это сделать?
Может быть это все-таки не про TablePane, а про %OnNew/%OnAfterSave и прочие колл-бэки в хранимом классе?
...
Рейтинг: 0 / 0
Событие в TablePane
    #38318854
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sabyrov.Talgat ,

То есть моя догадка подтвердилась.
Cмотрите в сторону <timer> .
Как справедливо заметил imdb, <tablePane> может отображать данные из "ниоткуда", например<tablePane id="table"
           sql="SELECT 1 ID,'bla-bla-bla' Name,? T"
           >
     <parameter value="Z"/>
</tablePane>, или использовать режим snapshot. Поэтому для Вашего случая подходит только автообновление с явным вызовом executeQuery().
...
Рейтинг: 0 / 0
Событие в TablePane
    #38318910
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шваров ЕвгенийМожет быть это все-таки не про TablePane, а про %OnNew/%OnAfterSave и прочие колл-бэки в хранимом классе?В том то и дело, что ТС хочет добавить явную зависимость слоя хранения к слою отображения, что, по-моему, недопустимо.
И MVC , упомянутый выше imdb, здесь не поможет, поскольку <tablePane> его нативно не поддерживает.
...
Рейтинг: 0 / 0
Событие в TablePane
    #38318927
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaТ.е. клиенты сидят такие у себя в браузерах... Ни о чем не подозревают... А сервер бац! И перезагрузил им всем таблички.
Так челе?Именно так. Возможно, ТС делает систему торгов на бирже, где нужно постоянно видеть быстро меняющиеся данные.
...
Рейтинг: 0 / 0
Событие в TablePane
    #38318955
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitИменно так.
Сервер никогда не опрашивает клиентов.
Это клиент должен работать таким образом. Это именно клиенты опрашивают сервер на предмет каких-то изменений на нем...
...
Рейтинг: 0 / 0
Событие в TablePane
    #38318972
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaservitИменно так.
Сервер никогда не опрашивает клиентов.
Это клиент должен работать таким образом. Это именно клиенты опрашивают сервер на предмет каких-то изменений на нем...В свете последних технологий это не совсем верно. есть веб-сокеты, где никто никого не опрашивает а просто шлет необходимые данные и на них и отвечать не обязательно, и в данном случае сервер сам может слать запросы на клиент внутри веб-сокета.
...
Рейтинг: 0 / 0
Событие в TablePane
    #38318995
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa ,

Именно по такому принципу работают веб-чаты на веб-сокетах.
...
Рейтинг: 0 / 0
Событие в TablePane
    #38319005
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Буду знать...
...
Рейтинг: 0 / 0
Событие в TablePane
    #38320300
Sabyrov.Talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa, когда с кем то переписываешься по чату, так и случается
...
Рейтинг: 0 / 0
Событие в TablePane
    #38322796
Sabyrov.Talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Шваров Евгений, в методе %OnAfterSave как определять класс, в каком классе создался обьект?
...
Рейтинг: 0 / 0
Событие в TablePane
    #38322831
Шваров Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sabyrov.TalgatШваров Евгений, в методе %OnAfterSave как определять класс, в каком классе создался обьект?

..%ClassName()
...
Рейтинг: 0 / 0
Событие в TablePane
    #38322840
Sabyrov.Talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Шваров Евгений, есть какой - нибудь пример? а то не ясно что куда писать
...
Рейтинг: 0 / 0
Событие в TablePane
    #38323040
Шваров Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sabyrov.Talgat,
У каждого наследника %RegisteredObject есть метод %ClassName(), возвращающий класс инстанса.

Можно также $ClassName() функцию использовать - возвращает текущий класс контекста.
Примеры обоих вариантов и даже больше здесь .
...
Рейтинг: 0 / 0
Событие в TablePane
    #38324743
Sabyrov.Talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Шваров Евгений,
есть такой вариант<timer ontimeout = "zenPage.timeout(zenThis);" timeout="1000"/>
<tablePane valueColumn="ID" id="Table" name="Table" tableName="DATA.User">
</tablePane>
в этом методе обновляет tablePane каждую секунду. Я пытаюсь вывести сообщение(alert("blabla")), если добавился новый объект в класс DATA.User(связан с tablePane).ClientMethod timeout(timer) [ Language = javascript ]
{
  var t1 = zenPage.getComponentById("TableManager").getProperty("rowCount");// берем количество строк в tablePane
  var t = zenPage.getComponentById("TableManager");
  t.executeQuery(); //обновляем таблицу
  var t2 = t.getProperty("rowCount"); //берем количество строк в tablePane после обновление
        if (t2>t1)
        {
              alert("blabla");
        }
}
Если с другой страницы добавлен объект в класс DATA.User, то в этой странице в tablePane этот объект появляется(т.к. обновляется), но не выводит сообщение "blabla". В чем проблема? Есть другие варианты?
...
Рейтинг: 0 / 0
Событие в TablePane
    #38325012
imdb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sabyrov.TalgatЕсли с другой страницы добавлен объект в класс DATA.User, то в этой странице в tablePane этот объект появляется(т.к. обновляется), но не выводит сообщение "blabla". В чем проблема? Есть другие варианты?

Может дело в том, что таймер срабатывает только один раз? В данном примере таймер сработает только один раз. Чтобы он продолжал работать надо добавить в код:
timer.startTimer();
...
Рейтинг: 0 / 0
Событие в TablePane
    #38325015
imdb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sabyrov.TalgatClientMethod timeout(timer) [ Language = javascript ]
{
  var t1 = zenPage.getComponentById("TableManager").getProperty("rowCount");// берем количество строк в tablePane
  var t = zenPage.getComponentById("TableManager");
  t.executeQuery(); //обновляем таблицу
  var t2 = t.getProperty("rowCount"); //берем количество строк в tablePane после обновление
        if (t2>t1)
        {
              alert("blabla");
        }
}

Т.е. код будет выглядеть так:ClientMethod timeout(timer) [ Language = javascript ]
{
  var t1 = zenPage.getComponentById("TableManager").getProperty("rowCount");// берем количество строк в tablePane
  var t = zenPage.getComponentById("TableManager");
  t.executeQuery(); //обновляем таблицу
  var t2 = t.getProperty("rowCount"); //берем количество строк в tablePane после обновление
        if (t2>t1)
        {
              alert("blabla");
        }
        // Перезапуск таймера
        timer.startTimer();
}
...
Рейтинг: 0 / 0
Событие в TablePane
    #38325079
Sabyrov.Talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
imdb, пробовал уже так все тот же результат, может в tablePane или в dataController есть какие нибудь события?
...
Рейтинг: 0 / 0
Событие в TablePane
    #38325488
imdb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sabyrov.Talgatimdb, пробовал уже так все тот же результат, может в tablePane или в dataController есть какие нибудь события?

В данном варианте кода переменная t2 берет старое значение количества строк (равное t1), т.к. запрос был отправлен, но результатов он не ждет. Поэтому переменные t1 и t2 равны и сообщение не выводится.
Но можно изменить код следующим образом:ClientMethod timeout(timer) [ Language = javascript ]
{
        var t1 = zenPage.getComponentById("TableManager").getProperty("rowCount");// берем количество строк в tablePane
        // в текст страницы необходимо добавить скрытую переменную: <hidden id="update" value="" />
  var old = zenPage.getComponentById("update").getValue();
  if ((old!="")&&(t1!=old)) {
    alert("Были изменения");
  }
  zenPage.getComponentById("update").setValue(t1);
  var t = zenPage.getComponentById("TableManager");
  t.executeQuery(); //обновляем таблицу
  timer.startTimer();
}
...
Рейтинг: 0 / 0
Событие в TablePane
    #38325503
Sabyrov.Talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
imdb, Спасибо большое работает))))
...
Рейтинг: 0 / 0
Событие в TablePane
    #38327239
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или ещё проще:Class demo.test Extends %ZEN.Component.page
{

XData Contents [ XMLNamespace = " http://www.intersystems.com/zen"  ]
{
<page xmlns=" http://www.intersystems.com/zen"  title="">
  <timer ontimeout = "zenPage.timeout(zenThis);" timeout="1000"/>
  <tablePane valueColumn="ID" id="TableManager" tableName="DATA.User"/>
</page>
}

ClientMethod timeout(timer) [ Language = javascript ]
{
  var t = zen("TableManager");
  var t1 = t.getProperty("rowCount"); // берём количество строк в tablePane
  t.refreshContents(true); // обновляем таблицу синхронно
  var t2 = t.getProperty("rowCount"); // берём количество строк в tablePane после обновление
  if (t2>t1)
  {
    zenAlert("blabla");
  }
  timer.startTimer(); // перезапуск таймера
}

}
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Событие в TablePane
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]