ОБСУЖДЕНИЕ

Диалоги Lotus developers

655 ответов 200,1 тыс.
AI-выжимка обсуждения скоро
Статус
Закрыто для дальнейших ответов.
Gogan.exe
Если есть индекс у базы - обнови...
Еще помогает обновление индексов представления (Shift+F9)
 
Народ, помню был пример кода работы с экс-эль, но найти не могу, если не трудно еще раз выложите.
 
Обыкновенный пример создание обьекта 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
 
Народ, знаю, что это миллион раз обсуждалось, но забыл и снова найти ответа не могу. Как сделать отказ от сохранения? Чтобы при закрытии формы не спрашивалось сохранить или нет, а лучше, чтобы вообще сохранить форму невозможно было. Знаю, что нужно написать SaveOptions := 0, но где это писать?
Кстати, пасибо з совет про преобразование даты в текст - начальник остался доволен результатом :))
 
Что бы запретить сохранение формы необходимо в событии QuerySave параметру Continue присвоить 0 (нуль).

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

....
doc.item1 = "value1"
doc.item2 = "value2"
....
....
doc.SaveOptions = 0
doc.Save(True, True)
....
___________________
(doc - текущий документ NotesDocument)
 
привет Народ, второй день не могу понять в чем проблема:
версия как 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
Если есть какие-либо мысли на счет того как это может быть - пишите плиз
 
<!--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]
Есть мысля, как такое может быть. На такие же грабли сам наступал

Имхо проблема в том, что как только функция возвращает результат, а результатом является документ из другой базы, то ссылка на саму базу уничтожается, и соответственно чтобы не оставлять мусора в памяти уничтожаются все подчиненные этой базе объекты, в том числе и найденный документ.
И как только управление переходит за пределы функции - возвращаемого объекта в памяти больше НЕТ.
Имхо отсюда ноги и растут.
 
полечила затычкой - сделала функцию static
 
Народ, как сделать так чтобы посчитать сколько дней прошло с начала создания документа? то есть перевести так сказать в числовой формат. В хэлпе вроде накопал через Абс, но не работает, все время выдает ошибку, а вообще хотелось бы узнать как это можно сделать на Л скрипте.
 
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
 
Имхо можно гораздо проще
dim res as variant
Dim doc As Notesdocument

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

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

Вуаля.
 
Andre Попробую. Просто мне сказали написать агента для того чтобы он отслеживал кол-во дней с момента создания док-а и если срок вышел, то он должен послать напоминание.
 
А почему тогда именно Лотус скрипт. Задача вполне решаема на @-формулах. Если конечно напоминания рассылаются по почте лотуса и нет никаких других дополнительных условий
 
Andre На собаках кажется еще сложнее. Ну если на примере подскажет кто, буду благодарен.
 
Ну например:
значение истечения срока для проверки задается в агенте в составе 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] )
 
Andre Спасибо!!! Сам бы не додумался, чес слово.
 
Andre Работает, но почему то отсылает по одному документу, а как можно сделать, чтобы он сразу все проверял? или поставить чтобы по расписанию через каждую минуту проверял?
 
Проверь свойства агента. Как запускается, на каких документах работает и т.д.

Имхо, если работает по расписанию(например 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 (Меньше документов проверяться будет)
 
Статус
Закрыто для дальнейших ответов.

Статистика тем

Создано
Vagor.ini,
Последний ответ от
Vagor.ini,
Ответы
655
Просмотры
200 074