Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/112: Рейтинг темы: голосов - 112, средняя оценка - 4.90
 Аватар для T1000
0 / 0 / 0
Регистрация: 05.10.2011
Сообщений: 15

Нужно имитировать нажатие кнопки

26.11.2009, 11:12. Показов 21063. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый!

Задачка вроде бы кажется простой, но что-то не получается её решить. Заключается в следующем: Есть 2 базы "БД_1" и "БД_2". В "БД_1" нажимаем на кнопку сохранить документ(в этом документе есть UNID документа в "БД_2"), и мы должны закрыть окно документа из "БД_1", перейти в документ из "БД_2" и эмитировать нажатие кнопки редактировать в этом документе.

У меня только получается открыть документ в "БД_2" и закрыть документ в "БД_1", а вот скрипт по кнопочке не выполняет\не запускается\вобщем не работает.

Подскажите плз какие-нибудь пути решения. Если надо могу написать то, что уже перепробовал.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.11.2009, 11:12
Ответы с готовыми решениями:

Автоматизировать Нажатие Кнопки Ок
Ситуация такая: В документе при нажатии кнопки "Обработать" открывается диалоговое окно (По требованию диалоговое окно должно...

Имитировать нажатие кнопки
Всем добрый вечер. Туплю пострашному, не могу понять в чём проблема. Надо, чтобы при нажатие баттон2 происходило некое действие, но выдаёт...

Как имитировать нажатие кнопки
Существует ли способ в функции имитировать нажатие определенной кнопки?

15
0 / 0 / 0
Регистрация: 19.04.2009
Сообщений: 2,219
26.11.2009, 11:17
T1000
Если на кнопке редактирования только перевод документа в режим редактирования, то выполнить на LS uidoc.EditMode = True, где uidoc - документ из второй базы. Если что-то более сложное, то код вынести в агента или продублировать в первой базе с соответствущей докруткой. Исходных данных для более исчерпывающего ответа недостаточно.
0
 Аватар для T1000
0 / 0 / 0
Регистрация: 05.10.2011
Сообщений: 15
26.11.2009, 11:38
Код на кнопке более сложный, чем просто перевести документ в режим редактирования. Пробовал программно запускать агент. Пишет, что отработал, но реальных изменений нет. Код кнопки:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    Dim ws As New NotesUIWorkspace
Dim uidoc As notesuidocument
Dim doc As NotesDocument
 
Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
 
uiDoc.EditMode=True
Call doc.ReplaceItemValue("Time1",Now)
Call doc.ReplaceItemValue("Time2",Now)
Call uidoc.FieldSetText("Date",Cstr(Today))
Call uidoc.FieldSetText("Time3",Cstr(Now))
Call uidoc.FieldSetText("par1","1")
Call uidoc.FieldSetText("par2","")
Call uidoc.FieldSetText("par3","")
Call uidoc.Refresh
Весь напряг с моей точки зрения из-за того что поля во втором документе изменяются при открытом документе с последующим отрефрешиванием. Если эти поля просто изменить, получив документ по UNID, то может получится, что человек выйдет просто из документа и тогда эти изменения надо будет как-то отменять.
0
0 / 0 / 0
Регистрация: 15.05.2009
Сообщений: 1,454
26.11.2009, 11:46
Почему вариант с editMode=True и [returnNotesUIDocument] не подходит:


Set notesUIDocument = notesUIWorkspace.EditDocument( [editMode] , [notesDocument] , [notesDocumentReadOnly] , [documentAnchor$] , [returnNotesUIDocument] , [newInstance] )
Parameters
editMode
Boolean. Optional. Specify True (default) to open the document in Edit mode. Specify False to open the document in Read mode or to put the document in the given Edit mode.
notesDocument
NotesDocument. Optional. Opens the specified document instead of the currently selected document.
Добавлено: пробовали?
0
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
26.11.2009, 11:52
Почему бы все твои действия не делать в бекэнде, а пользователю уже светить результат работы?
У меня подобное реализовано именно так....
Пользователь жмет на кнопку.... в бекэнде часть документа копируется в новую базу.... затем модифицируется по определенным алгоритмам... и в итоге пользователю открывается то что он хотел увидеть. все работает четко
Вопрос с отменой изменений можно решить, к примеру, созданием копии документа на момент открытия документа... ну или же просто сохранением нужных полей в переменные
0
 Аватар для T1000
0 / 0 / 0
Регистрация: 05.10.2011
Сообщений: 15
26.11.2009, 11:54
2OKEN
Я не совсем Вас корректно понял

Code
1
2
3
4
5
6
7
           это код в БД_1 на вытаскивание документа из БД_2
If uidoc.Document.OtherBaseUNID(0)<>"" Then
Set odb=s.GetDatabase("","БД_2")
Set odoc=odb.GetDocumentByUNID(doc.OtherBaseUNID(0))
 
Call ws.EditDocument(False, odoc)
End If
Вы про это хотели мне сказать?
0
0 / 0 / 0
Регистрация: 19.04.2009
Сообщений: 2,219
26.11.2009, 12:02
Цитата Сообщение от T1000
2OKEN
Я не совсем Вас корректно понял

Code
1
2
3
4
5
6
7
           это код в БД_1 на вытаскивание документа из БД_2
If uidoc.Document.OtherBaseUNID(0)<>"" Then
Set odb=s.GetDatabase("","БД_2")
Set odoc=odb.GetDocumentByUNID(doc.OtherBaseUNID(0))
 
Call ws.EditDocument(False, odoc)
End If
Вы про это хотели мне сказать?
Про Call ws.EditDocument(True, odoc)
P.S.
Кстати, обновления полей в Вашем случае можно вставить в обработку события Postmodechange, тогда на кнопке Edit в базе 2 будет только Source.EditMode = True, а в базе 1 uidoc.EditMode = True
0
KFyry3
26.11.2009, 12:03
T1000, код который выполняется на кнопке "Редактировать" нужно перенести в PostOpen формы. То что его сделали на кнопке это неправильный подход.
Естественно в PostOpen надо проверить режим открытия документа, if uidoc.Edytmode = true then ...

Ну а дальше все очень очень просто. Открываете ваш 2й док сразу в режиме редактирования Call ws.EditDocument(True, odoc)

PS. Более того, куча полей Time1, Time2, Time3, Date в которые попадает текущее время - это тоже несколько перебор.
Зачем они вообще нужны? Дальше 3 поля флага, устанавливаются жестко без всяких условий, они тоже нужны ли вообще в коде? Может просто дефолтными значениями установить поля?
Tyo
26.11.2009, 12:06
Цитата Сообщение от T1000
2OKEN
Вы про это хотели мне сказать?
Да, OKEN про это хотела сказать. Только ещё нюансик:


Code
1
2
Set uidoc=ws.EditDocument(TRUE, odoc,,,,FALSE)
if not uidoc.EditMode then uidoc.EditMode = True
0 / 0 / 0
Регистрация: 15.05.2009
Сообщений: 1,454
26.11.2009, 12:09
да.
сразу пытаться открыть документ в режиме редактирования, вернув его uidocument, код заполнения продублировать после открытия в режиме редактирования (через uidocument или в postopen). Не факт, что это сильно хорошо, но можно.
Если задача позволяет, то имхо, лучше в postopen.
0
 Аватар для T1000
0 / 0 / 0
Регистрация: 05.10.2011
Сообщений: 15
26.11.2009, 12:09
2KFire3
В PostOpen это не делается, так как документ в "БД_2" может быть открыт сам по себе, а не обязательно из "БД_1".
2nvy сейчас попробую с True
2TIA и Ваш метод попробую
0
0 / 0 / 0
Регистрация: 15.05.2009
Сообщений: 1,454
26.11.2009, 12:10
О, KFire3 и TIA уже все сказали )))
0
KFyry3
26.11.2009, 12:17
Цитата Сообщение от T1000
2KFire3
В PostOpen это не делается, так как документ в "БД_2" может быть открыт сам по себе, а не обязательно из "БД_1".
2nvy сейчас попробую с True
2TIA и Ваш метод попробую
Стоп, стоп. Вы писали:


мы должны закрыть окно документа из "БД_1", перейти в документ из "БД_2" и эмитировать нажатие кнопки редактировать в этом документе.
Т.е. эта кнопка "Редактировать" используется по своему прямому назначению, т.е. пользователь редактирует по ней документ, неважно откуда он открывает его, из БД_1 или БД_666.

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

Я конечно могу быть неправ полностью, так что если что извиняюсь
0 / 0 / 0
Регистрация: 12.10.2007
Сообщений: 522
26.11.2009, 12:52
почему нельзя перед открытием документа прописать туда все, что нужно?

Call doc.ReplaceItemValue("Time1",Now)
Call doc.ReplaceItemValue("Time2",Now)
Call doc.ReplaceItemValue("Date",Cstr(Today))
Call doc.ReplaceItemValue("Time3",Cstr(Now))
Call doc.ReplaceItemValue("par1","1")
Call doc.ReplaceItemValue("par2","")
Call doc.ReplaceItemValue("par3","")

и открыть документ?
Call ws.EditDocument(True, doc)
0
 Аватар для T1000
0 / 0 / 0
Регистрация: 05.10.2011
Сообщений: 15
26.11.2009, 12:55
Коменты всех выступающих натолкнули меня на следующую мысль. Прилагаю сей результат:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
                         код в БД_1
If uidoc.Document.OtherBaseUNID(0)<>"" Then  тут надо сделать переход в кэтмэновскую базу
Set odb=s.GetDatabase("","БД_2")
Set odoc=odb.GetDocumentByUNID(doc.OtherBaseUNID(0))
 
Call ws.EditDocument(True, odoc)
 
Set ouidoc=ws.CurrentDocument
Set odoc=ouidoc.Document
Call odoc.ReplaceItemValue("Time1",Now)
Call odoc.ReplaceItemValue("Time2",Now)
Call ouidoc.FieldSetText("Date",Cstr(Today))
Call ouidoc.FieldSetText("Time3",Cstr(Now))
Call ouidoc.FieldSetText("par1","1")
Call ouidoc.FieldSetText("par2","")
Call ouidoc.FieldSetText("par3","")
Call ouidoc.Refresh
End If
 
Call uidoc.Close
таким образом я сохраняю и закрываю документ в БД_1, произвожу необходимые изменения в документе БД_2 согласно скрипту на кнопке и спокойно продолжаю работать с этим документом.
0
0 / 0 / 0
Регистрация: 19.04.2009
Сообщений: 2,219
26.11.2009, 13:01
Цитата Сообщение от susinmn
почему нельзя перед открытием документа прописать туда все, что нужно?
Если логика приложения правильная (хотя есть сомнения), то следует сделать так:
В форму документа добавить обработку события

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Postmodechange(Source As Notesuidocument)
If Source.EditMode Then
Dim doc as NotesDocument
Set doc = Source.Document
Call doc.ReplaceItemValue("Time1",Now)
Call doc.ReplaceItemValue("Time2",Now)
Call doc.ReplaceItemValue("Date",Cstr(Today))
Call doc.ReplaceItemValue("Time3",Cstr(Now))
Call doc.ReplaceItemValue("par1","1")
Call doc.ReplaceItemValue("par2","")
Call doc.ReplaceItemValue("par3","")
End If
End Sub
А документ в БД1 открывать так

Code
1
2
Set uidoc = ws.EditDocument(False, doc)
uidoc.EditMode = True
В БД2 в кнопке редактирования оставить только Source.Document.EditMode = True
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.11.2009, 13:01
Помогаю со студенческими работами здесь

error C3728 , пытаюсь имитировать нажатие кнопки
error C3728: 'event System::EventHandler ^System::Windows::Forms::Control::Click': event does not have a raise method не даёт сделать...

Как программно имитировать нажатие кнопки TBCButton?
Для имитации нажатия обычных кнопок типа TBitBtn используются вот такие процедуры: // Нажатие. procedure TForm1.FormKeyDown(Sender:...

Имитировать нажатие кнопки мыши на странице загруженной в TChromium
Существует процедура: procedure SendMouseClickEvent(const event: PCefMouseEvent; kind: TCefMouseButtonType; mouseUp: Boolean;...

Как имитировать нажатие кнопки мыши или клавиатуры?
ПОМОГИТЕ! Как имитировать нажатие кнопки мыши или клавиатуры

Как имитировать нажатие Ctrl+C при нажатии кнопки
Как по срабатыванию события (к примеру нажатие горячей клавиши) в окне, в котором я нахожусь вызвать копирование (т.е. имитировать нажатие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru