• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

скрыть Embeddedview с ответными документами

  • Автор темы Klido
  • Дата начала
K

Klido

Обычное дело - внедренная вьюха, показывающая ответы к данному документу (ктагоризация по униду, шоу сингл категория).
Что-то с утра в понедельник :rolleyes: не пойму как скрыть её, если нет ни единого ответа. Для простого случая через @DbColumn работает нормально скрытие, но тут-то во вьюхе будут ответы и на другие документы и формула вроде
@If(@Elements(@Dbcolumn("":NoCashe;"":"";"EmbeddedViewName";1))=0;"0";"1")
не отработает корректно...
Можно ли скрыть и куда копнуть?
 
O

Omh

Там должен быть @DbLookup по той же SingleCategory, по который ты ограничиваешь embedded view.
В данный момент времени у тебя возвратится 0 только если вообще ни одного документа из эмбеднутых не существует.

Ну и кагбэ не NoCashe, а NoCaсhe

И вообще тут можно не делать @If
А просто в HideFormula написать
Код:
@Elements(@DbLookup(...)) = 0

И текущую базу в @DbColumn/@DbLookup лучше отдавать не через "":"", а просто через ""
Подробности .
 
K

Klido

А просто в HideFormula написать
ага, спсб, как-то не подумал, что так проще :rolleyes: правда там ещё текст хотелось бы скрывать, одновременно с вьюхой, но это мелочи...
тем не менее упрощенная формула прямо на вьюхе
Код:
@Elements(@DbColumn("":NoCaсhe;"";"EmbeddedViewName";1))=0
не дает результата - вьюха видна всегда, даже в новом документе...
SingleCategory, понятно, в первом столбце (скрытом). Пробовал и по 2-му лукапить - тот же эффект, т.е. не хочет работать...
Что ещё может быть?

Добавлено:
а где проверка на ошибку?
о, вот это сегодня меня плющит :) наверняка из-за этого не идёт...
 
K

Klido

спсб всем - немного отвлекли от темы, но...

формула сокрытия внедренной вьюхи (показывает ответы текущего документа)
Код:
@Elements(@DbLookup("":NoCaсhe;"";"EmbeddedViewName";@Text(@DocumentUniqueID);2;[FailSilent]))=0
обновление индекса вьюхи - автоматическое

работает через раз :newconfus: для контроля вывел в вычислемое поле формы значение этой формулы...

создаём документ - вьюха скрыта, @elements показывает 0
создаём респонс, сохраняем его, документ, закрываем, открываем руками - вьюха скрыта, @elements показывает 0 (респонсы явно видны при просмотре вьюхи или снятия сокрытия с внедренной)

пересохраняем документ несколько раз, добавляем ответы и пр. - в какой-то момент ррраз и вьюха видна, @elements показывает правильное значение кол-ва респонсов...

удаляем респонсы - вьюха скрыта, @elements показывают старое значение, иногда элементы=0, а вьюха с респонсами показана...

менял обновление индекса на auto, aftеr first use - работает сразу после переоткрытия базы - вьюха показывается, а элементы могут быть 0
пробовал ReCache, явно убивал и перестраивал индекс вьюхи - нестабильно по-прежнему... это 8.5.1...

порекомендовали забить и обсчитывать скриптом респонсы на открытии документа и вписывать в поле, а уже по полю скрывать вьюху... не знаю пока хорошо ли, но ведь интересует и интерфейсный refresh при добавлении 1-го респонса - чтоб вьюха показалась, а придется ещё код вешать на обновление документа...

может ещё какой ньюанс есть с сокрытием внедренной вьюхи со скрытой категоризацией по @DocumentUniqueID?
 
O

Omh

Для начала NoCaсhe - в ковычки по синтаксису.
Может в этом дело? :nomat:
 
O

Omh

Вообще странно, у меня точно такая же конструкция работает нормально.
Я поставил ReCache, правда я нахдясь в форме не добавляю/удаляю респонсы.

Но в других базах есть такая функиональность, что респонсы удаляются/добавляются при открытом доке.
Там сделано, что это возможно только про uidoc.EditMode = True и после каждого добавления/удаления стоит uidoc.Refresh.
Работает стабильно.

Теоретически, я бы сам не делал ограничение на uidoc.EditMode, а сделал бы кнопку доступную всегда + uidoc.RefreshHideFormulas
 
K

Klido

респонсы удаляются/добавляются при открытом доке
у меня хотспот доступен только в режиме редактирования и после создания респонса, конечно, рефреш есть... но работать вот не желает, хотя остальное всё перестраивается, в т.ч. и ещё одна внедренная вьюха видимость меняет по другим флагам....
 
H

hosm

А попробовать еще с вьюху рефрешить после создания респонса?
Нечто подобное:
Код:
'refresh embedded view
Call evview.Refresh()
Call w.ViewRefresh
Call uidoc.RefreshHideFormulas
Правда, если вьюха тяжелая - тормоза ;)
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
OKEN
Call w.ViewRefresh
этого + автоматик в индексе вида чаще всего достаточно
 
H

hosm

ToxaRat
Тут я спросить не буду. В большинстве случаев так и делаем.
Но в одном тяжелом случае с вьюхой, обновляемой "Auto, after first use" и пересчетом кнопок помогла именно подобная конструкция. (Хз, мож просто глючил ViewRefresh - давно проверяли. Сейчас заново с Automatic тестить влом)
 
K

Klido

А попробовать еще с вьюху рефрешить после создания респонса?

неделя эпизодической борьбы с отображением скрытой вьюхи не принесла 100%-го результата..
на данный момент ситуация такая - в контексте поста 7:

внедренная вьюха по сингл-категории родителя скрыта формулой
Код:
@Elements(@DbLookup("":"ReCaсhe";"";"EmbeddedViewName";@Text(@DocumentUniqueID);2;[FailSilent]))=0

при новом доке вьюха скрыта - всё ОК

в режиме редактирования хотспот выполняет код
'всякие действия
Код:
Call ws.CurrentDocument.Save()
Call ws.currentdocument.Close(True)
Delete ND
Set ND = ns.currentdatabase.GetDocumentByID(noteID)
'вызов агента по созданию респонсов
If agent.Run(ND.NoteID) = 0 Then
'всякое-разное
Call ND.Sign()
Call ND.save(True,False)
Call ws.Editdocument(True, ND)
'применяем в разных комбинациях и последовательности обновления какие есть, т.к. переоткрытие не спасет...
Call ws.ViewRefresh
Call ws.CurrentDocument.RefreshHideFormulas
Call ws.CurrentDocument.Refresh
'и даже
Call ws.ReloadWindow
End If

в агенте на всякий пожарный ещё и явно бэквью рефрешу перед выходом
Код:
Set nv=s.Currentdatabase.Getview("EmbeddedViewName")
Call nv.Refresh()

в итоге имеем 1 или более респонсов (сразу видны во вьюхе, если её не скрывать), но формула сокрытия не отрабатывает и вьюха не видна...

пересохранения, переоткрытия в какой-то момент дают эффект, но зависимость не ощущается...
чаще всего вьюха показывается даже после перовой операции сохранения, если полностью перезапустить клиента и войти под другим пользователем...
какой-то дикий кэш? или опять я каких-нибудь кавычек не поставил куда надо?? :) сокрытие вьюхи не даёт мне покоя ;) как же заставить отрабатывать нормально...
 
K

K-Fire

ДБлукап этот в поле запихните и посмотрите что в каком случае получается. После отладки этой части уже можно идти дальше.

Можно вместо ReCache попробовать NoCache кстати.
 
K

Klido

Можно вместо ReCache попробовать NoCache кстати.
так было сначала, результат тот же

ДБлукап этот в поле запихните и посмотрите что в каком случае получается
выше в топике есть эта инфа - в поле чаще всего 0, но в какой-то момент положительное значение (не обязательно совпадает с кол-ом респонсов...) и тогда срабатывает как раз формула сокрытия...

После отладки этой части
в том и дело, что не выходит :please: стал бы я тут постить, если б не уткнулся в непонятки....
 
O

Omh

Может по правам что-нить?
Респонсы с Ридер полями генерятся?
Должно всё работать...

Может у тебя локальная реплика, а генеришь серверным агентом?

Там у тебя, конечно, жестковато написано: сохранение, закрытие, запуск на документе агента, подпись, сохранение, открытие.
Нельзя это дело как-то упростить?
 
K

Klido

Может по правам что-нить?
а админ со всеми правами и пр. ладно бы под остальными не работало...

Респонсы с Ридер полями генерятся?
без оных... при отключенном сокрытии вьюхи показываются там сразу даже без всех рефрешей...

Может у тебя локальная реплика, а генеришь серверным агентом?
не, ну это я бы заметил, да и реплик нет вообще - один экземпляр на сервере...

ам у тебя, конечно, жестковато написано: сохранение, закрытие, запуск на документе агента, подпись, сохранение, открытие.
Нельзя это дело как-то упростить?

начал-то с простого, добавилось остальное по факту борьбы....

сохранение - если не сохранить, спрашивает стандартно сохранять или нет...
закрытие - там по ходу работа с ртф и аттачами, иначе не обновить их...
запуск агента - потому как закрываем...
подпись - вотому как ругается на неподписанность аттачей - см. топик про это неподалёку...
сохранение - тоже чтоб не переспрашивало в процессе...
открытие - ну надо же его показать :please:

упростить хотелось бы, но пока не получается даже так..

Делов-то всего - в доке с аттачем заменить аттач новой версией, а старый сохранить в респонсе и показать во внедренной вьюхе, которая скрыта, если респонсов нет....
 

VladSh

начинающий
Lotus Team
11.12.2009
1 783
157
BIT
55
На правах идеи.

1. Лучше всего вычисляемое поле с формулой вверху формы + рефрэш дока при изменениях - должно корректно скрывать/отображать.
Но это если действия из дока производятся, а не из вьюхи. Из вьюхи при рэфрэше 8.5.1 клиент крашится, как и раньше - я проверял; похоже исправлять это не собираются.

2. Можно попробовать внедрённую вьюху засунуть в секцию и скрывать по формуле секцию.
По крайней мере её можно программно свернуть! и вьюха будет не видна.
Цвет текста секции и "треугольничек" подобрать под цвет фона формы чтобы их не было видно - я так OLE-объекты скрывал.

Если не заработает, то переоткрывать док - я так под 6.x.x делал, т.к. тогда ничего с этим не вышло...
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!