Форум продуктов IBM Lotus
Общие вопросы => Разработка приложений => Тема начата: K85 от 22 Сентябрь 2009, 13:14:04
-
У меня есть переделанная почтовая база, в ней когда приходит новая почта агентом переносится письмо в одну из папок. А появилась необходимость сделать форму, в которой будут задаваться эти названия папок и при нажатии Ок запускался тот агент, а в агенте данные брались из этих полей. ???
На данный момент названия папок создаются в самом агенте.
Может кто-то делал?! просто что-то не могу добиться данного результата :'(
-
Вот код самого агенка, который проверяет почту и отправляет письма по папкам:
Set db = s.CurrentDatabase
Set doc=s.DocumentContext
vSubj$ = doc.Subject(0)
vAdr$ = doc.From(0)
Flag% = 0
'Разбираем поле Subject, оно должно быть в формате sXXXX-RR
'Где XXXX - номер, а RR - номер реестра
'Если поле Subject соответсвует указанной гипотезе то помещает сообщение в папку RR\XXXX
'Если папка отсуствует - создаем ее
If (Strcompare(FormName$, "Memo", 1) = 0) Then
Subject$ = Trim$(doc.Subject(0))
'Достаем Номер
S1$ = Strleft(Subject$, "-")
S1$ = Trim$(Right(S1$, Len(S1$)-1))
'Достаем КОДИФИКАТОР-2
S2$ = Strright(Subject$, "-")
S2$ = Trim$(Left(S2$, Len(S2$)))
Select Case S1$
Case "0001"
S1$ = "0001 – папка1"
Case "0002"
S1$ = "0002 – папка2"
……………………….
Case Else
S1$="Неизвестный"
' отправка сообщения
………..
Flag% = 1
End Select
Select Case S2$
Case "00"
S2$ = "00 – Осн.папка1"
Case "01"
S2$ = "01 – Осн.папка2"
………………………..
Case Else
S2$ = "Неизвестный"
If Flag% = 0 Then
' отправка сообщения
………
End If
Flag% = 1
End Select
'Проверяем целевую папку для сообщения, если нет то создаем, после чего перемещаем сообщение
Folder$ = S2$ + "\" + S1$
Set view = db.GetView( Folder$ )
If ( view Is Nothing ) Then
Call db.EnableFolder(Folder$)
Call doc.PutInFolder(Folder$)
Call doc.RemoveFromFolder("($Inbox)")
If Flag% = 0 Then
vSS$ = GetFilesInfo(doc)
vSD$ = Date$ + " " + Time$ + Uchr$ (10)
' отправка сообщения
…………….
End If
Else
Call doc.PutInFolder(Folder$)
Call doc.RemoveFromFolder("($Inbox)")
If Flag% = 0 Then
vSS$ = GetFilesInfo(doc)
vSD$ = Date$ + " " + Time$ + Uchr$ (10)
………………
End If
End If
End If
проблема в том, что агент не создает новые папки пока не укажешь название в самом агенте, поэтому и хотелось бы отдельную форму, в которой и заполнялись бы эти названия новых папок
-
Т.е. db.EnableFolder(Folder$) не создает папку? а в каком случае создает?
-
создает, когда в
Select Case S1$
Case "0001"
S1$ = "0001 – папка1"
указываешь название новой папки, тогда письмо прийдет в новую папку
т.е. в коде Case "0001" ..... Case "nnnn" надо постоянно добавлять
-
Итак, пользователю приходит письмо, в теме которого указано в какую папку его класть. В формате <название папки>-<название подпапки>. Вам нужно, чтобы письма в автоматическом режиме раскладовались по нужным папкам. Правильно?
Если да, то можно без select case:
S1$ = S1$ + "папка" + StrRightBack(S1$, "0")
аналогично для S2$, ну и дополнительно обрабатывать S1$ без "0" и т.д.
-
спасибо за ответ, но я не очень понимаю, что такое "папка"?
Я вот думаю, что папку создавать в новой форме, но правда еще не совсем понимаю как ???. Потом в агенте использовать папки, созданные в новой форме
названия папок выглядят так:
00 - папка1
0000 - подпапка01
0001 - подпапка02
07 - папка2
0009 - подпапка07
0075 - подпапка08
-
Папка - это наподобие представления (списка документов), в которое вы можете добавлять/удалять документы. Служит для логического упорядочивания документов.
Зачем вам отдельно создавать папки, еслу у вас в агенте их создает метод EnableFolder(...)?
-
может я не совсем точно излогаюсь...
приходит письмо, в теме которого написано s00-000, соответственно письмо перемещается в папку00 и подпапку 0000, но при этом мне необходимо где-то вводить названия этих новых папок, т.е. папка00 - это например, филиал1, а подпапка 0000 - название отдела.
я в Правилах добавляю кнопку создания новой папки, открывается форма, на ней заполняю два поля (основной папки и подпапки), а вот как сделать чтобы при нажатии на кнопку Ок эта папка создавалась в навигаторе???
-
Т.е. номеру в теме сообщения соответсвует свое название папки/подпапки?
Тогда лучше было бы сделать справочник по соответствию "номер" - "название папки". И при получении письма в агенте автоматом определять название папки по справочнику.
Если пользовательская почтовая БД не одна, то справочник (форма+представление) лучше сделать в отдельной БД, к которой обращаться при приеме писем.
-
можно ли сделать так:
- стандартным способом создаю папку и подпапку, при нажатии на кнопку Папка\Создать папку
- отправляю письмо,в теме которого указан это номер новой папки
- агентом проверяю номера и названия папок (написанные не в самом агенте) созданные стандартным методом
- письмо после проверки агента , перемещается в нужную папку.
???????????
сейчас сделано так, только папки создаются в самом агенте, а не стандартно, и там же в самом агенте и проверяются названия папок, номера которых должны соответствовать теме письма
-
можно
-
если можете подскажите плизз, как определять в агенте название папки, созданной стандартно
насколько я понимаю, то надо вместо select case, как-то определять название папки в виде
-
Только условным блоком. А как еще определить соответствие названия номеру, у вас ведь в явном виде название папки не фигурирует в письме.
Тем же select case'ом в агенте прописывайте соответствие названия номеру.
Только при добавлении/изменении папок вам прийдется сначала вручную их создать, а потом в агенте прописать соответствие.
При использовании справочника вам бы не пришлось делать лишних действий и лезть в код.
-
тогда если можно... объясните поподробней оспаровчнике...
т.е. в справонике создаютсянания папок и подпапок
а потом они должны проверяться в агенте
Правильно?
а как они будут проверятся в самом агенте???
-
Справочник представляет из себя форму с двумя полями (номер и название папки) и представление для выборки.
В агенте вы извлекаете номер из темы сообщения, затем ищете в справочнике документ по этому номеру (например с помощью notesView.GetDocumentByKey(...)). Из документа берете название папки. Затем, таким же образом получаете название подпапки. Формируете иерархическое имя папки (папка\подпапка). Выполняете db.EnableFolder(...). Помещаете письмо в эту папку.
-
если можете помогите :'(
уже раз 40 переделываю.......
создана база, в ней поля Name - название папки, Alias - доп.значение
потом в агенте
If (Strcompare(FormName$, "Memo", 1) = 0) Then
Subject$ = Trim$(doc.Subject(0))
'Достаем КОДИФИКАТОР
S1$ = Strleft(Subject$, "-")
S1$ = Trim$(Right(S1$, Len(S1$)-1))
'Достаем КОДИФИКАТОР-2
S2$ = Strright(Subject$, "-")
S2$ = Trim$(Left(S2$, Len(S2$)))
проверяю название письма
далее необходимо найти это название в базе, но никак не могу понят как надо делать
Dim DB As NotesDatabase
Dim Doc As NotesDocument
Set DB = session.GetDatabase ( db.Server, "BВ\\gf.nsf" )
Set DB_DbCodesLookup = DB.GetView("Papki")
Set Doc = DB_DbCodesLookup.GetDocumentByKey(Lcase(Doc.GetItemValue("Alias")(0)))
If Not Doc Is Nothing Then ........
если закончить If Not Doc Is Nothing Then S1$ = Doc.GetItemValue("Alias")(0)
то создается новая папка с подпапкой, а должно было найти нужную папку и в нее переместить
-
Второй кусок кода странноватый...
Set DB = session.GetDatabase ( db.Server, "BВ\\gf.nsf" )
один слеш лишний
Set DB = session.GetDatabase (db.Server, "BВ\gf.nsf")
Set Doc = DB_DbCodesLookup.GetDocumentByKey(Lcase(Doc.GetItemValue("Alias")(0)))
откуда в Doc.GetItemValue("Alias")(0) может быть значение, если вы только ищете этот документ??
Set Doc = DB_DbCodesLookup.GetDocumentByKey(S2$)
If Not Doc Is Nothing Then
mainfstr = Doc.Alias(0)
End if
для папки
и
Set Doc = DB_DbCodesLookup.GetDocumentByKey(S1$)
If Not Doc Is Nothing Then
subfstr = Doc.Alias(0)
End if
для подпапки.
далее если заданы mainfstr и subfstr, то
Folder$ = mainfstr + "\" + subfstr
-
ViV
Огромное спасибо! Все работает.
Есть еще небольшое дополнение, вдруг кому-то будет надо, перед Folder$ = mainfstr + "\" + subfstr
необходимо опять вернуться в почтовую базу
Set db = s.CurrentDatabase
Set doc=s.DocumentContext
так как иначе папки и подпапки создаются в базе BВ\gf.nsf
-
Лучше использовать другую переменную для базы справочника, не db, тогда и возвращаться не прийдется;)
-
у меня появился еще один вопрос....
а можно ли как-то или после приема письма обновлять навигатор, чтобы папки сразу добавлялись или сделать кнопку, при нажатии которой будет происходить обновление папок(возможно это лучше, т.к. не будет постоянно запускаться)
-
Попробуйте поставить кнопку с формулой:
@Command( [RefreshWindow] )
-
точно! СПАСИБО :D
-
Доброе утро. Помогите, если можете.
Появилась проблема, когда в бд "BВ\gf.nsf" создаю название, которое имеет более 31 символа, то новая папка не создается в виде. Не подскажете почему?
-
Доброе утро!
Что значит "папка не создается в виде"? Может просто не создается папка с длинным именем?
Вообще ограничение на имена видов/папок - 64 символа (Domino limits (http://www.geniisoft.com/showcase.nsf/DominoLimits)). Возможно из-за русских символов получается 32 символа.
-
т.е. с этим я ничего сделать не смогу?!
Папка не отображается в виде, если имеет, например 33 символа, как только делаю короче название папка отображается
-
Попробуйте вручную создать папку с таким именем, что на это скажет Lotus Notes?
А зачем такое громадное имя для папки, с ним же не удобно потом работать?
-
не подскажете, какой @-формулой можно ограничить количество вводимых символов в поле, т.е. при сохранении, если в поле введено, например больше 38 символов, чтобы писало "нельзя вводить больше 38 символов"
-
пробую сделать так:
@If ( @Length (@ThisValue) < 39; @ThisValue;@Failure("Превышено количество"));
при кол-ве символов больше 38 пишет сообщение в самом поле Превышено количество :(
-
Посмотрите в сторону "input validation"
-
в Input Validation формула:
@If(@Length(@text(Name))<10;@Success;@Failure("Количество превысило 38 символов!"));
после ввода неверного значения сначала выскакивает окно с предупреждением, а потом окно: NotesError - field didn't pass validation formula.
Как от этого сообщения избавиться?!
-
Все разобрался. Спасибо за помощь VIV