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

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

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

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

Перенос Значения Поля В Другую Форму

  • Автор темы toli4sky
  • Дата начала
Статус
Закрыто для дальнейших ответов.
T

toli4sky

текст ошибки?

Ошибка Notes - не удается найти поле

то коперни его Ctrl+C когда оно открыто.

не совсем понятно что с этим потом делать:)

Попробуй все же сделать Design Synopsis и поискать по тексту сообщения.

сделал бы, но не знаю как....

Ничего не появляется из ниоткуда)

Я знаю...но не могу найти

и ниразу язык не сложнее того же дельфи - не надо сочинять...

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

savl

Lotus Team
28.10.2011
2 597
310
BIT
181
странно... Replace функция в backе ей должно быть все равно есть поле или нет...

Сделай обработчик ошибок, вот самый простой:

Sub Click(Source As Button)
On Error goto handler

{твой код кнопки}

Goto endh

handler:
Msgbox {Error #} & Err & {: } & Error$ & { in line } & Erl
resume Endh
endh:

End Sub


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

Когда возникает ошибка у тебя на экране появляется msgBox с кнопкой Ок. Если не закрывать окно, то когда оно в фокусе операция копирования сохраняет его содержание в буфер как текст.

Получается что-то подобное, если вставить в блокнот:

IBM Lotus Notes
------------------------------
Object Variable Not Set

OK
------------------------------

чтобы сделать DS надо в дизайнере, слева где элементы найти пункт с таким названием, далее выбрать нужные элементы дизайна, только не все сразу. И нажать ОК, откроет вкладка с информацией. Если там выбрать библиотеку LS. то на вкладке будет ее код.

Вот тут написано как сделать, Lotus 6.5 и 7.0:


Для Lotus 8 немного иначе:


Язык английский
 
T

toli4sky

прикольная вещь с ошибкой..
Ну вот что у меня получилось:

---------------------------

---------------------------
Error #4412: Notes Error - Cannot locate field in line 27
---------------------------
ОК
---------------------------

А 27 строка это:

"Call docN.FieldSetText({Field1},docOld.Document.GetItemValue({Field2})(0))"

все таки...

Добавлено: да, и лотус у меня 7(англ), я в нем в дизайнере лазию, ну и клиент 7 тоже есть, а так вся работа в лотусе 8.5-клиент
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
181
docN - NotesUIDocument. который открыт, который в режиме редактирования.
Field1 - Редактируемое (Editable) на форме поле, оно должно быть на форме. Не RichText.

Для ричтекста используй:
Set notesRichTextItem = doc.CreateRichTextItem("Body")
notesRichTextItem.AppendText("This is the email body.")
 
T

toli4sky

docN - NotesUIDocument. который открыт, который в режиме редактирования.
Field1 - Редактируемое (Editable) на форме поле, оно должно быть на форме. Не RichText.

Да, все верно, все редактируемое, поле не РичТекст, но не помогает...
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
181
странно... сделал вот такую кнопку:

Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = ws.CurrentDocument
Dim doc As NotesDocument
Set doc = uidoc.Document
Call uidoc.FieldSetText("registrator", doc.GetItemValue("Customer")(0))
Call uidoc.Refresh

отработало без проблем.
 
H

hosm

а на момент выполнения кода "Call docN.FieldSetText({Field1},docOld.Document.GetItemValue({Field2})(0))"
документ DocN открыт в клиенте и поле "Field1" - редактируемое (editable), показывается в этом документе (т.е. не скрыто формулами скрытия) и его можно редактировать?
 
T

toli4sky

документ DocN открыт в клиенте и поле "Field1" - редактируемое (editable), показывается в этом документе (т.е. не скрыто формулами скрытия) и его можно редактировать?
да, получается выполняется процедурка Call DPWA_InitiateProcess(dbApplication, v(0), Nothing, "", "", ErrString) - открывается новый док, потом выполняется Call docN.FieldSetText({Field1},docOld.Document.GetItemValue({Field2})(0)) и ругается что неможет найти поле.
но когда я захожу в свойства документа - там действительно моего поля, куда я хочу перенести значения, хотя на форме оно есть, сохраняю док, и только после этого в свойствах появляется это поле...
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
181
FieldSetText вносит значение, но в документ оно пропишется только после сохранения.

Попробуй replaceItemValue

Код:
dim docNN as NotesDocument
Set docNN = docN.Document
call docNN.ReplaceItemValue({Field1},docOld.Document.GetItemValue({Field2})(0))

call docN.Refresh
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
216
я приводил пример без промежуточного сохранения... (всё работает)
чё там мудрить - всё предельно просто - надо возвращать uidoc и не будет заморочек, ато придумают проблему из-за собственной твердолобости.... и кучу времени потратят, на "несуществующие" задачи
 
T

toli4sky

Попробуй replaceItemValue

dim docNN as NotesDocument
Set docNN = docN.Document
call docNN.ReplaceItemValue({Field1},docOld.Document.GetItemValue({Field2})(0))

call docN.Refresh

Да, так ошибки нет, но и не присваевает значение полю...:(

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

savl

Lotus Team
28.10.2011
2 597
310
BIT
181
Бред какой-то. Все прописывается. docOld.Document.GetItemValue({Field2})(0) - Может пусто возвращает? Может в docOld нет этого поля?

Агент это слишком...

про агента почитай в Help: NotesAgent class

Set notesAgent = notesDatabase.GetAgent( agentName$ )
status = notesAgent.Run( [ noteID$ ] )

noteID$ - NoteID документа, это НЕ unid.

конструкция условия:

If <условие> Then
<Действие>
Else
<Противодействие>
End If
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
216
ещё раз и медленно...
вот этот вариант https://codeby.net/threads/44292.html?vi...st&p=215541 от вашего, ничем не отличается (с т.з. "проблемы")

форму нового дока - прописать обязательно! - по ней и создаётся инмемори док, в кот. появляется поле (оно есть на форме) и в это поле, через uidoc, заносится значение

и всё работает, надо сделать, как написано, и закрыть топик!
 
T

toli4sky

РАЗАБРАЛСЯ!!

Сделал следующим способом

Dim lstFields List As Variant

lstFields({Field1}) = {Field2}


Forall vl In lstFields
v = Evaluate(vl, doc)
If ( docMain.hasItem(Listtag(vl))) Then
Call docMain.RemoveItem(Listtag(vl))
End If
Call docMain.AppendItemValue(Listtag(vl), v)
End Forall

Там в общем проблема была в том что почему то программа не доходила до этого кода, поэтому этот способ и не работал, я искал другие, пришлось вырезать чуть кода и все получилось.
ВСЕМ ОГРОМНОЕ СПАСИБО!!!!
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

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