Диалоги Lotus developers

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

Vagor.ini

Gogan.exe
Если есть индекс у базы - обнови...
Еще помогает обновление индексов представления (Shift+F9)
 
I

Isk

Народ, помню был пример кода работы с экс-эль, но найти не могу, если не трудно еще раз выложите.
 
V

Vagor.ini

Обыкновенный пример создание обьекта Excel и работа со свойствами этого обьекта. Пример выгрузки вида в Excel
Код:
 Sub Click(Source As Button)
Dim WS As notesuiworkspace
Dim UiView As notesuiview
Dim ViewString As String
Dim session As NotesSession
Dim db As NotesDatabase 
Dim v As NotesView
Dim docX As NotesDocument
Dim col As Integer
Dim row As Double
Dim xl As Variant
Dim xlWbk As Variant
Dim pagename As String

Set WS = New notesuiworkspace
Set session = New notessession
Set db=session.CurrentDatabase

' Динамически получаеим вид, работает в v5 и выше
Set UiView=WS.currentview
ViewString=UiView.viewname

Set v=db.GetView(ViewString)

' Create Excel Sheet
Set xl=CreateObject("Excel.Application")
Set xlWbk=xl.Workbooks.Add

' Первая строка с заголовком
col=1
Forall vColumn In v.Columns
xlWbk.ActiveSheet.Cells(1, col)=vColumn.Title
col=col+1
End Forall

' Строки с документами
row=2
Set docX=v.GetFirstDocument
While Not docX Is Nothing
col=1
Forall cValue In docX.ColumnValues
xlWbk.ActiveSheet.Cells(row, col)=cValue
col=col+1
End Forall
row=row+1
Set docX=v.GetNextDocument(docX)
Wend

' Заполнение ячеек
xlWbk.ActiveSheet.Columns.AutoFit

Print "Excel Document Successfully Created!"

' Открываем файл
xl.Visible=True

End Sub
 
G

Guest

Народ, знаю, что это миллион раз обсуждалось, но забыл и снова найти ответа не могу. Как сделать отказ от сохранения? Чтобы при закрытии формы не спрашивалось сохранить или нет, а лучше, чтобы вообще сохранить форму невозможно было. Знаю, что нужно написать SaveOptions := 0, но где это писать?
Кстати, пасибо з совет про преобразование даты в текст - начальник остался доволен результатом :))
 
N

nor

Что бы запретить сохранение формы необходимо в событии QuerySave параметру Continue присвоить 0 (нуль).

Чтобы при закрытии формы не спрашивало сохранить ли документ, необходимо doc.SaveOptions = 0 прописать в событии формы PostOpen или, например в теле скрипта, если с документом работает агент, например:

....
doc.item1 = "value1"
doc.item2 = "value2"
....
....
doc.SaveOptions = 0
doc.Save(True, True)
....
___________________
(doc - текущий документ NotesDocument)
 
V

Veselinka

привет Народ, второй день не могу понять в чем проблема:
версия как R5, так и R6.5
Есть код функции, который находит некоторый документ и возвращает либо его либо Nothing.
Если эту функцию проходишь в дебагере по шагам - то она возвращает документ, а если ее не проходишь, то документ она находит (выяснено методом отладки со вставкой месаджбоксов), но она его НЕ ВОЗВРАЩАЕТ. То есть когда из функции происходит возврат - значение указателя обнуляется.

Вот код функции - он обходит адресные книги и проверяет - является ли данное имя группой или нет

Function ISGr(grname) As Notesdocument
Set ISGr=Nothing
Dim session As New NotesSession
abs_ =session.addressBooks

Forall ab In abs_
Set adb=New Notesdatabase(ab.server,ab.filepath)
If adb.Isopen() Then
Set view=adb.GetView("($VIMGroups)")
If Not view Is Nothing Then
Call view.refresh
Set gdoc1=view.getdocumentbykey(grname,True)
If Not gdoc1 Is Nothing Then
Set ISGr=gdoc1
Exit Function
End If
End If
End If
End Forall
End Function
Если есть какие-либо мысли на счет того как это может быть - пишите плиз
 

Andre

Green Team
29.07.2004
114
1
BIT
2
<!--QuoteBegin-Veselinka+29:07:2004, 09:59 -->
<span class="vbquote">(Veselinka @ 29:07:2004, 09:59 )</span><!--QuoteEBegin-->привет Народ, второй день не могу понять в чем проблема:
версия как R5, так и R6.5
Есть код функции, который находит некоторый документ и возвращает либо его либо Nothing.
Если эту функцию проходишь в дебагере по шагам - то она возвращает документ, а если ее не проходишь, то документ она находит (выяснено методом отладки со вставкой месаджбоксов), но она его НЕ ВОЗВРАЩАЕТ. То есть когда из функции происходит возврат - значение указателя обнуляется.

Вот код функции - он обходит адресные книги и проверяет - является ли данное имя группой или нет

Function ISGr(grname) As Notesdocument
Set ISGr=Nothing
Dim session As New NotesSession
abs_ =session.addressBooks

Forall ab In abs_
Set adb=New Notesdatabase(ab.server,ab.filepath)
If adb.Isopen() Then
Set view=adb.GetView("($VIMGroups)")
If Not view Is Nothing Then
Call view.refresh
Set gdoc1=view.getdocumentbykey(grname,True)
If Not gdoc1 Is Nothing Then
Set ISGr=gdoc1
Exit Function
End If
End If
End If
End Forall
End Function
Если есть какие-либо мысли на счет того как это может быть - пишите плиз[/quote]
Есть мысля, как такое может быть. На такие же грабли сам наступал

Имхо проблема в том, что как только функция возвращает результат, а результатом является документ из другой базы, то ссылка на саму базу уничтожается, и соответственно чтобы не оставлять мусора в памяти уничтожаются все подчиненные этой базе объекты, в том числе и найденный документ.
И как только управление переходит за пределы функции - возвращаемого объекта в памяти больше НЕТ.
Имхо отсюда ноги и растут.
 
V

Veselinka

полечила затычкой - сделала функцию static
 
I

Isk

Народ, как сделать так чтобы посчитать сколько дней прошло с начала создания документа? то есть перевести так сказать в числовой формат. В хэлпе вроде накопал через Абс, но не работает, все время выдает ошибку, а вообще хотелось бы узнать как это можно сделать на Л скрипте.
 
V

Vagor.ini

Isk
Есть у меня пример такого скрипта (с буржуйского сайта): Скрипт определяющий количество дней между двумя датами (исключая выходные и праздники)
Для него нужно создать вид "holiday" где загнать все праздники и библиотеку со слудующей функцией:
Код:
'declarations 
Dim Date1 As notesdatetime
Dim Date2 As notesdatetime
Set Date1 = New notesdatetime(doc.FirstDate(0))
Set Date2 =New notesdatetime(doc.SecondDate(0))
Differ# = Date2.TimeDifference(Date1) 
If Differ# > 0 Then
Days% = Differ# / 86400
Days% = CycleTimeDate1,Date2,days%)
doc.CT1 = Days% 'where CT1 is a Field to capture the difference and 
store it in a form
Else
doc.CT1 = 0
End If 

In a Library create a function "Cycletime"

Function CycleTime(Date1 As notesdatetime, Date2 As notesdatetime,days As 
Integer) 
Dim hdoc As notesdocument
Dim view As notesview
Dim Y As Integer,x As Integer

Set ses = New notessession
Set Cdb = ses.currentdatabase
Set view = Cdb.getview("holiday")
x% = days%
Y% = 0
Do Until Y% = x%
Y% = Y%+ 1
Call Date1.AdjustDay(1)
Wday1$ = Cstr(Date1.LocalTime)
Set hdoc = view.getdocumentbykey(Wday1$ ) 
If Not hdoc Is Nothing Or Weekday(Date1.DateOnly)=1 Or 
Weekday(Date1.DateOnly)= 7 Then
days% = days% - 1
CycleTime = days%
Else
CycleTime = days%
End If
Loop 
End Function
 

Andre

Green Team
29.07.2004
114
1
BIT
2
Имхо можно гораздо проще
dim res as variant
Dim doc As Notesdocument

' определяем документ
set doc = ...

Res = Evaluate (|(@today - @Created)/3600/24|, doc)
Print "Количество дней между датами " + Cstr(Res(0))

Вуаля.
 
I

Isk

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

Andre

Green Team
29.07.2004
114
1
BIT
2
А почему тогда именно Лотус скрипт. Задача вполне решаема на @-формулах. Если конечно напоминания рассылаются по почте лотуса и нет никаких других дополнительных условий
 
I

Isk

Andre На собаках кажется еще сложнее. Ну если на примере подскажет кто, буду благодарен.
 

Andre

Green Team
29.07.2004
114
1
BIT
2
Ну например:
значение истечения срока для проверки задается в агенте в составе Select
переменная SendMailTo - получатель письма. Как определяется - на ваш выбор.
Агент работает по расписанию ежедневно
Отбираемые документы: All New And Modified Documents Since last Run

Текст агента:

Rem "Значение определяющее срок для проверки - 20";
SELECT Form="Форма документа которую мы отслеживаем" & (@Today - @Created)/3600/24 > 20;

SendMailTo := @Text(@Name([CN];@UserName));
@MailSend(SendmailTo ; "" ; "" ; "Напоминание - У документа истек срок" ; "Кликните по ссылке для перехода к документу" ; "" ; [IncludeDoclink] )
 
I

Isk

Andre Спасибо!!! Сам бы не додумался, чес слово.
 
I

Isk

Andre Работает, но почему то отсылает по одному документу, а как можно сделать, чтобы он сразу все проверял? или поставить чтобы по расписанию через каждую минуту проверял?
 

Andre

Green Team
29.07.2004
114
1
BIT
2
Проверь свойства агента. Как запускается, на каких документах работает и т.д.

Имхо, если работает по расписанию(например On Schedule Daiy) или запуск вручную и на документах отбираемых по тригеру: All New And Modified Documents Since last Run или all Documents In dataBase то все должно быть тип топ.

А по расписанию в 5 версии меньше 5 минут поставить нельзя да и нецелесообразно, зачем мучать сервер и agent manager.
Чтобы поставить запуск по расписанию:
триггер When should this agent run on
выставить On Schedule More Than Once A day нажать кнопку Schedule и поставить 5 минут. выбрать сервер на котором агент будет работать.
триггер Which document should it run on - все равно какой. Но имхо предпочтительнее All New And Modified Documents Since last Run (Меньше документов проверяться будет)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

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