Скрытие поля Principal

  • Автор темы Автор темы 1KIA
  • Дата начала Дата начала
может еще как-то можно отправить письмо без Principal???
Если речь о почтовой базе, в событии Querysend перед End дописываем что-то вроде:
Код:
Dim session As New NotesSession
Dim mailbox As NotesDatabase
Dim doc As NotesDocument
Continue = False
Set mailbox = session.GetDatabase("сервер", "mail.box")
Set doc = Source.Document
Call doc.ReplaceItemValue("Principal", "Вася Пупкин")
Call doc.ReplaceItemValue("From", "Вася Пупкин")
Call doc.CopyToDatabase(mailbox)
 
по кнопке должен запускаться на сервере! (см. выше)

Добавлено: в собаках @Command( [AgentSetServerName] ; agentName ; serverName )
соврал - это другое действие :what?: - не знаю в собаках
 
уже окончательно запуталась :what?:
что касается "по кнопке должен запускаться на сервере" - не получается
а по "Если речь о почтовой базе, в событии Querysend перед End дописываем что-то вроде: " - выдает ошибку
"notes error: invalid or nonexistent document" в строке Call doc.CopyToDatabase(mailbox)
 
выдает ошибку
"notes error: invalid or nonexistent document" в строке Call doc.CopyToDatabase(mailbox)
Тогда пробуем так:
Код:
Dim session As New NotesSession
Dim mailbox As NotesDatabase
Dim doc As NotesDocument
Continue = False
Set mailbox = session.GetDatabase("сервер", "mail.box")
Set doc = mailbox.CreateDocument()
Call Source.Document.CopyAllItems(doc)
Call doc.ReplaceItemValue("Principal", "Вася Пупкин")
Call doc.ReplaceItemValue("From", "Вася Пупкин")
Call doc.Save(True, True)
 
nvy
у меня получилось: что с первого раза оно не хочет отправлять, создает черновик и за вторым заходом отправляет
А самое странное, приходит пользователю письмо, когда его начинают открывать, выдает ошибку "Illegal circular USE^ CoreEmailClasses", после нескольких нажатий ок, открывается письмо и в нем вверху пишется "Тот чья база (правильно, то что надо) + ниже Send by: и тот кто отправил (а вот этого не надо) :what?:
 
что касается "по кнопке должен запускаться на сервере" - не получается
выше - код в кнопке (д.б.) https://codeby.net/threads/40592.html?vi...st&p=198561
, что не получается?

то что советует nvy (класть в маилбокс сервера) - метод нестандартен (не учитывает множественные ящики и ещё ряд особенностей роутера), я так никогда не делал и впредь планирую воздерживаться (чего и вам советую) :what?:
 
lmike
что не получается?

не получается следующее:
нажали кнопку, запустился агент, письмо отправляется если в агенте писать
Код:
	Dim otpr As Variant
otpr="конкретная_почта_сотрудника"
Call mailDoc.Replaceitemvalue("SendTo", otpr)
Call mailDoc.Send(False)
а если ставить
Код:
otpr = maildoc.getItemValue("SendTo")(0)
то не отправляется вообще никуда
 
maildoc - это вновь созданный документ, нет у него этого поля, оно заполяется в следующем далее коде.
Могу предложить смотреть поле в NotesUIWorkSpace.CurrentDocument.Document (текущий в уи) или текущих во вьюхе (NotesUIView.CaretNoteID или Documents - выделенных галкой)
И вот еще пример, можно не поле, а прямо параметром у Send, если поля нет https://codeby.net/threads/40632.html
 
Код:
	Dim otpr As Variant
otpr="конкретная_почта_сотрудника"
Call mailDoc.Replaceitemvalue("SendTo", otpr)
Call mailDoc.Send(False)
а если ставить
Код:
otpr = maildoc.getItemValue("SendTo")(0)
то не отправляется вообще никуда
Это опечатка или какой смысл менять значение поля на то же самое значение? Скорее всего, пустое.
 
смотрите, Вы создали документ, заполнили поля a1, a2, .. a5.
Потом пытаетесь прочитать из него же 1-е значение поля а6 и заполнить им поле а6.
Поле а6 - это ваше SendTo. Его надо брать не из вновь созданного документа, а из какого-то другого документа (варианты из какого - приведены выше) или вычислять по каким-то признакам, которые форумчанам неизвестны, ибо это Ваше приложение.

Добавлено: Medevic правильно, оно пустое, документ mailDoc создается в коде выше
 
не получается следующее...
вы пытаетесь получить значение откуда-то...
но серверный агент может получать значения только из своего кода либо из бэкэнд сущностей
для передачи параметров, в серверный агент, используют параметр - noteid (см. хэлп)
, кот. - суть ИД бэкэнд дока (уже сохранённого, в БД), в агенте вы его получаете по noteid (из БД) и пользуетесь полями
 
Тогда я не права насчет того, откуда брать документ, lmike прав - запускать агент надо с параметром. Просто там ведь вроде просто кнопка с кодом вначала была и я пропустила момент, когда всплыл агент. Сорри.
 
извеняюсь, я наверное уже надоела со своими вопросами :) , но я просто уже запуталась
из выше сказанного Вами получается, что агент мне надо запускать
Код:
	Set agent = db.GetAgent("(mailsend)")
Call agent.RunOnServer(doc.NoteID)
получила id документа, а где мне заполнять SendTo при запуске агента (при нажатии кнопки) или в самом агенте?!
 
вместо вашего
Код:
	Dim otpr As Variant
otpr="конкретная_почта_сотрудника"
Call mailDoc.Replaceitemvalue("SendTo", otpr)
Call mailDoc.Send(False)
используйте
Код:
	Dim otpr As Variant
otpr = Split(mailDoc.SendTo(0), ",")
Call doc.Send( False, send )
таким образом вы не привязаны к количеству введенных адресатов

P.S. А откуда вы SendTo берете? если из нового документа, который вы в скрипте создали, то оно пустое будет до тех пор, пока вы в него что-то не запишите. Поэтому в первом вашем случаи и отправлялось письмо, а во втором нет. А если вы из открытого документа пытаетесь отправить новое письмо, то тогда и SendTo берите из него же (uidoc.FieldGetText("SendTo"))
 
а где мне заполнять SendTo
абсолютно без разницы
главное - doc надо сохранить (перед запуском агента) иначе изменения не попадут в агент
далее, по коду, у вас создаётся новый док - в это нет нужды, можно отправить уже заполненый по кнопке (ведь вы его получите по ИД)
 
если есть форма с полями для заполнения отправляемого письма "From - от кого", "SendTo - кому", "Subject - тема" и "Body - тело", то создаешь кнопку и вешаешь код

Код:
Sub Click(Source As Button)
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument

Set uidoc=ws.CurrentDocument
If uidoc.ModifiedSinceSaved=True Then
Call uidoc.Save
End If	
Set doc=uidoc.Document	
doc.Form = "Memo"				 ' на всякий случай

Dim send As Variant
send = Split(doc.SendTo(0), ",")
Call doc.Send( False, send )
Call uidoc.Save
Call uidoc.Close
Call ws.ViewRefresh
Call ws.ViewRefresh
End Sub

если в каком-то скрипте получаешь документ-письмо и тебе надо его отправить, то тогда отправляешь агенту этот документ
Код:
	Set agent = db.GetAgent("(mailsend)")
Call agent.RunOnServer(doc.NoteID)

а в агенте отправляешь его
Код:
	Dim ses As New NotesSession
Dim db As NotesDatabase	
Dim doc As NotesDocument

Set db = session.CurrentDatabase
Set agent = session.CurrentAgent
Set doc = db.GetDocumentByID(agent.ParameterDocID)

Dim send As Variant
send = Split(doc.SendTo(0), ",")
Call doc.Send( False, send )
 
:angry: не получается
запускаю агент так:
Код:
	Dim uidoc As NotesUIDocument 
Dim db As NotesDatabase
Dim s As New NotesSession
Dim doc As NotesDocument
Dim agent As NotesAgent
Set db = s.CurrentDatabase
Set doc = New NotesDocument(db) ' создается новый документ, никакие поля ему не заполняеются 
Set uidoc=ws.CurrentDocument
If uidoc.ModifiedSinceSaved=True Then
Call uidoc.Save
End If 

Set agent = db.GetAgent("(mailsend)")
Call agent.RunOnServer(doc.NoteID) ' и передается в агент
в агенте пишу
Код:
	Dim session As New NotesSession
Dim db As NotesDatabase	
Dim doc As NotesDocument

Set db = session.CurrentDatabase
Set agent = session.CurrentAgent
Set doc = db.GetDocumentByID(agent.ParameterDocID)

Dim send As Variant
send = Split(doc.SendTo(0), ",") ' Тут пусто ?!
Call doc.Send( False, send )
создается черновик и ничего не приходит другому пользователю.
Запускаю агент из меню иполучаю ошибку Invalid note id в Set doc = db.GetDocumentByID(agent.ParameterDocID)
 
создается черновик и ничего не приходит другому пользователю.
Set doc = New NotesDocument(db)
извините, но те же яйца, только в профиль...
ща откомменчу код, обновите страницу и посмотрите
НЕ НАДО ПЕРЕДАВАТЬ doc.NoteID - ДОКУМЕНТ, В КОТОРОМ НЕТ ПОЛЯ АДРЕСАТОВ SendTo. ПЕРЕДАЙТЕ либо uidoc.Document.NoteID либо другой документ, в котором они заполнены.
Получите в 1м куске кода некий документ doc1 с полем, в котором хранятся адресаты и выведите себе print "SendTo=" & Join(doc1.SendTo, ":"), что там есть в этом поле. Попробуйте, например, Set doc1 = uidoc.Document

Запускаю агент из меню иполучаю ошибку Invalid note id в Set doc = db.GetDocumentByID(agent.ParameterDocID)
так не надо. Если (mailsend) запускать из меню, то agent.ParameterDocID="" и надо получать адресатов другим путем.
 
как такое может быть?!
поле заполняю поле Кому, нажимаю на кнопку, в дебагере проверяю заполнение полей в uidoc поле SendTo и в doc1
они пустые :angry:
 
Мы в соцсетях:

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