Как отослать письмо пользователю.

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

ledi

Люди добрые, помогите, а то я уже с ума потихоньку начинаю сходить. :)

Есть у меня в форме [Forma] поле [Author]. Поле изменяемое, изменяется при создании.

Как мне в поле "SendTo" формулы @MailSend автоматически его подставлять?

То есть, чтобы если Пупкин создал документ - ушло письмо на Пупкина, а если Васечкин - то на Васечкина.

И второй вопрос по поводу формулы @MailSend.

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

Возможно, вместо "RadioButton" можно использовать "Список".

Мне Morpheus подсказал вот так это сделать:

-----------------
Evaluate( {@SendTo(} & doc.UserName(0) & {; copyTo ; blindCopyTo ; subject ; remark ; bodyFields )} ,doc)

где doc = форма

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

Если я все правильно понимаю, то у меня эта строчка должна выглядеть так:
-----------------
Evaluate( {@SendTo(} & Forma.UserName(0) & {; "" ; "" ; "Название темы" ; "" ; "" )} ,Forma)

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

Проблема в том, что валидатор фомул говорит мне, что после закрывающейся скобки (0_)_
"Пропущена @-функция " или оператор, либо @-функция не тре...

И кстати, почему UserName(0) - что оно означает.

Помогите, плиз.

Зарабнее благодарен за ваши ответы.
 
M

Mihal

Ээээ..... А зачем @SendTo (кстати, а где Вы взяли такую собакоформулу?!) помещать в Evaluate? Прекрасно можно отправить скриптами (метод Send класса NotesDocument). По поводу @UserName(0):
--------------------------------------------------------------------------------
@UserName ( index )
Parameters
index
Note This parameter is new with Release 5.
Number. Optional. Indicating the index of user names. 0 is for primary name and 1 is for the alternate name. If this parameter is omitted, @UserName returns the primary name.
-----------------------------------------------------------------------------------
 
L

ledi

Ээээ..... А зачем @SendTo (кстати, а где Вы взяли такую собакоформулу?!) помещать в Evaluate? Прекрасно можно отправить скриптами (метод Send класса NotesDocument). По поводу @UserName(0):
--------------------------------------------------------------------------------
@UserName ( index )
Parameters
index
Note This parameter is new with Release 5.
Number. Optional. Indicating the index of user names. 0 is for primary name and 1 is for the alternate name. If this parameter is omitted, @UserName returns the primary name.
-----------------------------------------------------------------------------------


Про Evaluate ничего не скажу - не я ее писал.

Можно поподробнее, про скрипты? Если можно с примером.

И кстати, а простыми действиями - Ответить отправителю не подойдет?

З.ы.: как оказалось - отправить отправителю подойдет - теперь осталось выяснить, как простыми действиями не пустое письмо отправить, а в тело письма вложить содержимое документа.

З.з.ы.: возможно, подойдет отправить документ. Вот сейчас пойду проверю.

Проверил. Вот, что странно. В "Ответить отправителю" есть галочка "Включить копию документа", но хотя я ее повесил - пользователю пришло пустое письмо. Единственное, что было написано в теле письма: "В ответ на:" И все.
Скорее всего из-за того, что текст набирается в поле. Хотя не уверен.
 
M

Mihal

<!--QuoteBegin-ledi+30:10:2006, 10:17 -->
<span class="vbquote">(ledi @ 30:10:2006, 10:17 )</span><!--QuoteEBegin-->Про Evaluate ничего не скажу - не я ее писал.

Можно поподробнее, про скрипты? Если можно с примером.

И кстати, а простыми действиями - Ответить отправителю не подойдет?
[snapback]46675" rel="nofollow" target="_blank[/snapback]​
[/quote]

про просыте действия - не понял. По поводу примера:
-----------------------------------------------------------------------
Call notesDocument.Send( attachForm [, recipients ] )
Parameters
attachForm
Boolean. If True, the form is stored and sent along with the document. If False, it isn't. Do not attach a form that uses computed subforms.
recipients
String or array of strings. Optional. The recipients of the document. See below.
-----------------------------------------------------------------------
Вот пример:
//Получаем документ
Call doc.Send(True,doc.UserName)

По поводу UserName'а. Я ошибся (вернее, недоглядел). Я написал про собачную формулу. Я если вести речь о итемах, то конструкция doc.<название поля> ВСЕГДА возвращает массив. Посему когда понятно, что итем содержит одно значение - можно сразу обращаться к первому элементу.
 
L

ledi

про просыте действия - не понял.

Объясню.
Мне надо при нажатии на кнопку отослать письмо пользователю.
Кнопку можно запрограммировать формулой, LotusScropt, JavaScript или ПРОСТЫМ ДЕЙСТВИЕМ.

В простом действии есть пункт "Ответить отправителю". Ну, и некоторые другие действия.

Вот. А в настройке действий "Ответить отправителю" есть чекбокс "Включить копию документа".

Но почему-то этот чекбокс не вставляет в письмо копию документа. И я пока не понимаю почему.

Ладно, сенк за наводку на Calls
 
L

ledi

Call notesDocument.Send( attachForm [, recipients ] )
Parameters
attachForm
Boolean. If True, the form is stored and sent along with the document. If False, it isn't. Do not attach a form that uses computed subforms.
recipients
String or array of strings. Optional. The recipients of the document. See below.
-----------------------------------------------------------------------
Вот пример:
//Получаем документ
Call doc.Send(True,doc.UserName)

Сразу вопрос - это LotusScript или JavaScript?
Я так понимаю, что LotusScript.
То есть, если применить это к моей задаче, то выходит следующее:

Call notesDocument.Send( False [, Author ] )

или

Call doc.Send(False,doc.Author)

Мне не надо отсылать человеку форму целиком - мне надо отослать только ее содержимое, поэтому False.

Но при попытке сделать это я получаю следующие ошибки.
В LotusScript:
-------
Sub Click(Source As Button)
Call notesDocument.Send( False , Author )
End Sub
-------
Ошибка - Данные не сохранены из-за ошибок в программе.

В java script:
-------
Call notesDocument.Send( False , Author )
-------
Missing ; before statement.

Что мне поправить?
 
M

Mihal

Ээээ... У меня создаётся впечатление что лотус изнутри Вы видите первый раз в жизни (может, второй, первый был вчера). Вы не инициализировали объект класса NotesDocument. Вам нужна не подсказка, а вводный курс по разработке в лотусе. Мы так можем переписываться до бесконечности. Мой свет, посмотрите хелп. Там всё прекрасно написано. На всё (тот же Send) есть прекрасные примеры и т.д.
 
L

ledi

Прочитав в хелпе про NotesDocumentClass, SendMethod и особенно посмотрев примеры,

увидел то, что мне подходит

5. This script mails a document to anyone listed in its DocAuthor field.
Call doc.Send( True, doc.DocAuthor )

То есть, если у меня есть поле Author, и мен надо отправлять письмо пользователю, почтовый ящик которого там стоит, то мне надо написать.

Call doc.Send( True, doc.Author )

или

Call doc.Send( False, doc.Author )

если мне не надо отсылать форму.

Но когда я это подставляю в поле вычисления формул, etc и получаю такую запись:

Sub Click(Source As Button)
Call doc.Send( False, doc.Author )
End Sub

то получаю следующий Error.

[имя_кнопки]: Click: 1: Not a sub or function name: DOC


Ээээ... У меня создаётся впечатление что лотус изнутри Вы видите первый раз в жизни (может, второй, первый был вчера). Вы не инициализировали объект класса NotesDocument. Вам нужна не подсказка, а вводный курс по разработке в лотусе. Мы так можем переписываться до бесконечности. Мой свет, посмотрите хелп. Там всё прекрасно написано. На всё (тот же Send) есть прекрасные примеры и т.д.

Не столько Лотус, сколько Дизайнер я вижу второй раз. :)

Но что поделаешь, поставили задау, я ее решил почти полностью, осталось только назначить действие кнопкам. А вот тут я и столкнулся с проблемой.
 
M

morpheus

ну во-первых, друстуйтэ )))
[snapback]46672" rel="nofollow" target="_blank[/snapback]</div>[/quote] - моя ошибка переплутал с MailSend

ну а вот скрипт, создает письмо , указывает тему, тело, и адресата(из текущего документа)
З,Ы, надо проверить бо писал на скорую руку
Код:
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set doc = New NotesDocument( db )
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument
Set CurDoc = uidoc.Document

doc.Form = "Memo"
doc.SendTo = CurDoc.GetItemValue( "какоето там поле с авторами" )
doc.Subject = "То что мы пишем в теле письма"
Call doc.Send( False )
 
M

Mihal

Надо инициализировать объект класса NjtesDOcument. Лотус фтыкает в строку doc.Send(.....) и непонимает что такое doc. Надо ему объяснить. Объяснение зависит от конкретной задачи. Например, если искомый документ текущий, то можно сделать так:

Sub Click(...)
Dim ws As New NotesUIWorkspace 'Текущее рабочее пространство. Обратите внимание, что я сразу инициализировал объект с помощью New
Dim uidoc As NotesUIDOcument 'Представление текущего документа на экране
Dim doc as NotesDOcument 'Текщий документ "в базе"

Set uidoc=ws.CurrentDOcument
Set doc=uidoc.Document

Call doc.send(....)
End Sub
 
R

root

Для: ledi

<!--QuoteBegin-ledi+30:10:2006, 09:38 -->
<span class="vbquote">(ledi @ 30:10:2006, 09:38 )</span><!--QuoteEBegin-->Если у меня есть поле RadioButton, в котором находится список людей, которым надо отправить письмо - как мне подставить в поле "SendTo" значение выделенного человека в поле RadioButton
[snapback]46667" rel="nofollow" target="_blank[/snapback]​
[/quote]

мульти поле field1 " Имя |1; имя2|2;" и потом @GetField("Filed1") это в choices поле радио буттон
потом перебором по выбору и evaluate "LotusScript" или же на чистом lotusScript'e
 
L

ledi

ну а вот скрипт, создает письмо , указывает тему, тело, и адресата(из текущего документа)
З,Ы, надо проверить бо писал на скорую руку
Код:
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set doc = New NotesDocument( db )
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument
Set CurDoc = uidoc.Document

doc.Form = "Memo"
doc.SendTo = CurDoc.GetItemValue( "какоето там поле с авторами" )
doc.Subject = "То что мы пишем в теле письма"
Call doc.Send( False )

Проверил. Не обрабатывает поле "Memo". Подставляю туда название моей формы (start) (ывглядит, как doc.Form = "start") - не работает. При открытии письма пишет, что "Не удается найти форму: start".

Подставляю туда название текстового поля, в котором находится исходное сообщение пользователя с комментариями администратора (Text) (ывглядит, как doc.Form = "Text") - не работает. При открытии письма пишет, что "Не удается найти форму: Text".

В обоих случаях в теле письма нет текстового поля, в котором находится исходное сообщение пользователя с комментариями администратора.
 
M

morpheus

<!--QuoteBegin-ledi+30:10:2006, 14:50 -->
<span class="vbquote">(ledi @ 30:10:2006, 14:50 )</span><!--QuoteEBegin-->Не обрабатывает поле "Memo"
[snapback]46710" rel="nofollow" target="_blank[/snapback]​
[/quote]жжоте однако....

так понятие переменные, константы, типы данных Вам извесны?

"Memo" - это не поле, это значить что полю Form созданного документа doc мы присваиваем ТЕКСТОВОЕ значение, в данном случае "Memo" , что в общем не отличаеться от "1", "Вася пупкин" и .т.д. (кол-вом символов правда отличаються)


Пачему Memo ??? так как это форма по-дэфолту которая используетсья в почтовых базах юзверей, в рус.клиентах завёться "Записка"

<!--QuoteBegin-ledi+30:10:2006, 14:50 -->
<span class="vbquote">(ledi @ 30:10:2006, 14:50 )</span><!--QuoteEBegin-->Подставляю туда название текстового поля, в котором находится исходное сообщение пользователя с комментариями администратора (Text) (ывглядит, как doc.Form = "Text") - не работает. При открытии письма пишет, что "Не удается найти форму: Text".
[snapback]46710" rel="nofollow" target="_blank[/snapback]​
[/quote]
Тело сообщение(большое поле куда все вставиться :) ) это будет Body


doc.Subject = "То что мы пишем в теле письма"
- я ошибся!

doc.Subject = "То что мы пишем в теМе письма" !!!


doc.Subject = CurDoc.MyField(0)

MyField - поле Вашей формы, из которой будет братсья тема


З,Ы, ХЕЛП читать, и не лезть сразу... разобраться шо такое типы данных, КЛАСЫ, переменные и т.д.
 
L

ledi

жжоте однако....

так понятие переменные, константы, типы данных Вам извесны?

"Memo" - это не поле, это значить что полю Form созданного документа doc мы присваиваем ТЕКСТОВОЕ значение, в данном случае "Memo" , что в общем не отличаеться от "1", "Вася пупкин" и .т.д. (кол-вом символов правда отличаються)
Пачему Memo ??? так как это форма по-дэфолту которая используетсья в почтовых базах юзверей, в рус.клиентах завёться "Записка"
Тело сообщение(большое поле куда все вставиться :( ) это будет Body
- я ошибся!

doc.Subject = "То что мы пишем в теМе письма" !!!
doc.Subject = CurDoc.MyField(0)

MyField - поле Вашей формы, из которой будет братсья тема
З,Ы, ХЕЛП читать, и не лезть сразу... разобраться шо такое типы данных, КЛАСЫ, переменные и т.д.

Да я уже на этом ХЕЛПЕ 4 рабочих дня сижу, из которых 2 бьюсь на вопросом, как мне при отсылке письма в строку "Кому" подставить значение из поля "Author", в тело письма подставить значение из поля "TextField". :)
 
M

morpheus

<!--QuoteBegin-ledi+30:10:2006, 15:24 -->
<span class="vbquote">(ledi @ 30:10:2006, 15:24 )</span><!--QuoteEBegin-->как мне при отсылке письма в строку "Кому" подставить значение из поля "Author"
[snapback]46714" rel="nofollow" target="_blank[/snapback]​
[/quote]
doc.SendTo = CurDoc.GetItemValue( "Author" )
или так
doc.SendTo = CurDoc.Author(0)
 
L

ledi

жжоте однако....

так понятие переменные, константы, типы данных Вам извесны?

"Memo" - это не поле, это значить что полю Form созданного документа doc мы присваиваем ТЕКСТОВОЕ значение, в данном случае "Memo" , что в общем не отличаеться от "1", "Вася пупкин" и .т.д. (кол-вом символов правда отличаються)
Пачему Memo ??? так как это форма по-дэфолту которая используетсья в почтовых базах юзверей, в рус.клиентах завёться "Записка"
Тело сообщение(большое поле куда все вставиться :) ) это будет Body
- я ошибся!

doc.Subject = "То что мы пишем в теМе письма" !!!
doc.Subject = CurDoc.MyField(0)

MyField - поле Вашей формы, из которой будет братсья тема
З,Ы, ХЕЛП читать, и не лезть сразу... разобраться шо такое типы данных, КЛАСЫ, переменные и т.д.


УРА!!!!!! ПОЛУЧИЛОСЬ!!!! MORPHEUS - BIG SENK!!!

За что спасибо? Ну, во-первых, за готовый скрипт, а во вторых за волшебное слово BODY.

В общем, получается так.

-------------------------
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set doc = New NotesDocument( db )
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument
Set CurDoc = uidoc.Document

doc.Form = "start"
doc.Body = CurDoc.Text(0)
doc.SendTo = CurDoc.GetItemValue( "Author" )
doc.Subject = "Ваша просьба удовлетворена"
Call doc.Send( False )
End Sub
-------------------------
Надо было просто добавить в скрипт одну строку ( doc.Body = CurDoc.Text(0) ).
Теперь получается, что в поле Тема, Кому и в Тело_Письма подставляются те данные, которые мне нужны.
А строку
doc.Form = "start"
можно смело удалять, т.к. передавать форму пользователю мне не надо.
 
M

morpheus

<!--QuoteBegin-ledi+30:10:2006, 15:35 -->
<span class="vbquote">(ledi @ 30:10:2006, 15:35 )</span><!--QuoteEBegin-->можно смело удалять, т.к. передавать форму пользователю мне не надо.
[snapback]46718" rel="nofollow" target="_blank[/snapback]​
[/quote]
Не совсем правильно...

документ в лотусе отображаеться пользователю по форме, если формы нет физически, документ всёравно будет!Если в поле Form прописана несуществующая форма то <!--QuoteBegin-ledi+30:10:2006, 14:50 -->
<span class="vbquote">(ledi @ 30:10:2006, 14:50 )</span><!--QuoteEBegin-->"Не удается найти форму: start".
[snapback]46710" rel="nofollow" target="_blank[/snapback]​
[/quote]


а поле Form - надо заполнять, хотя если в базе лотуса какаято форма определена как форма по умолчанию то можна и не заполнять(как это сделано в почтовых базах, потому у Вас и получилось отобразить документ без заполнения поля Form )
 
L

ledi

Не совсем правильно...

документ в лотусе отображаеться пользователю по форме, если формы нет физически, документ всёравно будет!Если в поле Form прописана несуществующая форма то
а поле Form - надо заполнять, хотя если в базе лотуса какаято форма определена как форма по умолчанию то можна и не заполнять(как это сделано в почтовых базах, потому у Вас и получилось отобразить документ без заполнения поля Form )


Очень странно. Тогда почему у меня в почте при открытии письма было так.

1. Если в форме было написано doc.Form = "start" и Call doc.Send( True ) - пользователь при открытии письма получал новое окно в виде формы. Это понятно. Есть название формы, она передалась пользователю с почтой и он ее увидел.

Непонятен второй вариант

2. Если в форме было написано doc.Form = "start" и Call doc.Send( False ) - пользователь при открытии письма получал сообщение "Не удается найти форму: start". Это вроде с одной стороны тоже понятно. Есть название формы, но она не передавалась, поэтому пользователь и не видит форму.
Непонятно, зачем тогда в данном случае вводить строку doc.Form = "start", если она не несет никакой функции.
 
M

morpheus

СОРИ! лаги инета


Как написано в хелпе
attachForm - обязательный параметр где указываеться что при True - вставлять форму, при False - не вставлять
Send method

Mails a document.
Defined in
NotesDocument
Syntax
Call notesDocument.Send( attachForm [, recipients ] )
Parameters
attachForm
Boolean. If True, the form is stored and sent along with the document. If False, it isn't. Do not attach a form that uses computed subforms.

Сидеть над хелпом надо !!!! :)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

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