• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Programmable Tables: Как Узнать Какая Вкладка Таблицы Открыта У Пользо

  • Автор темы divankin
  • Дата начала
D

divankin

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
разве управляющее поле не содержит текущего значения, если оно CFD?
 
D

divankin

Пробовал ставить CFD. В качестве формулы само поле.
В результате оно стало только криво обновляться в режиме редактирования. В режиме чтения все так же нет обновления вообще.
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
159
а Edit сделать?
а значения прописывать так
Код:
CurrDoc.ReplaceItemValue("$TableID","InfoTab").savetodisk = False
CurrDoc - NotesDocument, глобальный объект определяемый в PO.
При таком подходе можно будет получать значения, но после переоткрытия документа или его обновлении значение может сброситься.
Еще вариант в notes.ini прописать, это самое простое.
 
D

divankin

а Edit сделать?
а значения прописывать так
Код:
CurrDoc.ReplaceItemValue("$TableID","InfoTab").savetodisk = False
CurrDoc - NotesDocument, глобальный объект определяемый в PO.
При таком подходе можно будет получать значения, но после переоткрытия документа или его обновлении значение может сброситься.
Еще вариант в notes.ini прописать, это самое простое.
Перевод в режим редактирования невозможен.
Или вы предлагаете скрыть вкладки и подсунуть вместо них свои кнопки? Тогда все равно переключение работать не будет - документ-то нередактируем, изменения back-end не транслируются во front-end.
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
159
ну здрасте...
используйте:
Код:
Call currUIdoc.RefreshHideFormulas
, а не Refresh.
Тогда и в режиме чтения будет работать и в редактировании.
И да, вкладки предлагаю скрыть и подсунуть свои кнопки.
 

Darkhan

Green Team
14.12.2012
99
2
BIT
0
Перевод в режим редактирования невозможен.
Или вы предлагаете скрыть вкладки и подсунуть вместо них свои кнопки? Тогда все равно переключение работать не будет - документ-то нередактируем, изменения back-end не транслируются во front-end.
Сталкивались с подобной проблемой, как ни странно помогло присваивание.... собаками... через Evaluate, в качестве параметра отправляли Source.Document
 
N

nvyush

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

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
как мелко вы мыслите :(

вставте на каждую вкладку ембедедвью а у виде на постопене в ини вносите название вкладки которая открылась и благодаря ини будете знать на какой вкладке ;)
ну это для настоящих хардкорщиков ;)

а на деле нарисуйте псевдовкладки - обманки а настоящие таблицы через формулы скрытия и тогда спокойно юзайте ини или профайл для сохранения какая вкладка у пользователя - тогда хоть для однотипным доков можно сразу нужную вкладку открывать
 
G

gpatron

на песевдокнопках код:
Код:
Dim ws As New NotesUIWorkspace
Dim uid As NotesUIDocument
Set uid = ws.CurrentDocument
Call uid.Document.ReplaceItemValue("$table", "имя нужной вкладки")
Call uid.RefreshHideFormulas

по крайней мере у меня работает корректно и никогда проблем не возникало
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
на песевдокнопках код:
Код:
Dim ws As New NotesUIWorkspace
Dim uid As NotesUIDocument
Set uid = ws.CurrentDocument
Call uid.Document.ReplaceItemValue("$table", "имя нужной вкладки")
Call uid.RefreshHideFormulas

по крайней мере у меня работает корректно и никогда проблем не возникало
вопрос был про Read режим (не Edit)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
если нужен персистент обжект (для формы) - то зачем писать в поле?
 
G

gpatron

ну вроде таким образом (через изменение поля) выводятся нужные вкладки программируемой таблицы
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
сори - понял схему :) (невтупил сразу про кнопки)
не знаю - согласится ли топикстартер на подобное изменение дизайна приложения
 
G

gpatron

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

ну а насчет согласится или нет.. так, как говорится "Хозяин - барин"
 
Мы в соцсетях:

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