Россыпь мелких вопросов

  • Автор темы Vagor.ini
  • Дата начала

seoman2

Green Team
17.02.2010
507
1
BIT
72
Doc.Responses - это свойство документа, а мне интересно, как лотус тогда лотусскрипт собирает все ответные? И почему бы @Responses не работать аналогично.
"форма - по полю $REF"
Это поле есть у ответов, а у главного его нет, так как в собаках тогда находятся все ответы? Я ж не указываю никакую вьюшку для @Responses.
 
T

ty3uk

а тебе не интерсно, как лотуса вообще строят категории, как делают индексы и т.п. Это код который заложен в ядре системы, а не написан на лотусскрипте и т.п. Скорей всего есть какие-то индексы где есть инфа по поводу ответных документов.
И ещё раз, в собаках нет типа документ, что будет возвращать @Responses ? Если такой тип появится, то, автоматом, придётся писать ещё кучу всего. Если ты обратил внимание, то @ привязываются либо к текущему документу, либо к UNID-документа.
Для твоего случая, один из вариантов, это сделать вьюху с колонкой категорией с формулой @text($REF) и искать ответы по твоему документу, соответственно из этой вьюхи.
 

seoman2

Green Team
17.02.2010
507
1
BIT
72
"Это код который заложен в ядре системы, а не написан на лотусскрипте и т.п. "
Я просто думал, что скрипт и собаки написаны поверх общего ядра лотусового.
 

savl

Lotus Team
28.10.2011
2 624
314
BIT
515
seoman2
Конечно поверх, само ядро на С, если смотреть что C API существует. Но думаю С++ там есть, да еще и ассемблерные вставки наверняка.
@ - интерпретатор, набор макросов.
LS - VBA подобный, компилируемый язык.
Допиленная/перепиленная JVM для Java.
А вот индексация вьюх и базы это поинтереснее, я так понял там технология хеш-таблиц, может даже радужных.
У каждой базы есть глобальная TableID, которая иногда бьется (может кто видел такое сообщение в ошибках).
В этой таблице, КМК, и происходит поиск getDocumentByUNID (ByNoteID).
 
T

ty3uk

ахда... ещё надо не забывать что есть ODS51, там некоторые добавления были (ну как некоторые, там DAOS появился, и, походу, серьёзно перетрясли внутреннее устройство базы). там если включить "Support Responce Thread History", то в родителський документ добавляется инфа по поводу детей в поле "$TUA"
 

savl

Lotus Team
28.10.2011
2 624
314
BIT
515
Коллеги, прошу помощи с web service.
Решил попробовать технологию на примере курса валют cbr.ru
При импорте выдает ошибку:
The requested operation failed: Element {http://www.w3.org/2001/XMLSchema}schema is referenced but not defined.
В упор не понимаю, другой сервис загрузился корректно...
Может кто подсказать что за "отечественный маразм" происходит?
 

savl

Lotus Team
28.10.2011
2 624
314
BIT
515
Разобрались...
надо его сохранить в отдельный файл, далее редактором удалить все строки
<s:element ref="s:schema" />
Объяснение:
вызвано тем, что ребята из microsoft не соблюли стандарт и добавили свои модификации в структуру WSDL (кто бы сомневался :rolleyes: )
К сожалению, DataSetRow (объект .net) тогда нельзя получить, зато без привязки к MS.
 
S

Shandrik

Завелся на сервере спамер - пишет в логе сотни тысяч идущих подряд одинаковых сообщений:

04.02.2015 08:24:22 Agent Manager: Agent message: 104
04.02.2015 08:24:22 Agent Manager: Agent message: 104
04.02.2015 08:24:22 Agent Manager: Agent message: 104
04.02.2015 08:24:22 Agent Manager: Agent message: 104


В каких случаях Агент Манагер пишет "Agent Manager: Agent message"?
 

Leoric

Lotus Team
15.10.2003
69
10
BIT
83
Это сообщения из какого-то агента.
Имха проще всего узнать сначала из какого — sh tasks в консоли (увидите какие агенты сейчас выполняет Agent manager)
А потом уже разбираться с конкретным агентом, скорее всего где-то вечный цикл.
 
S

Shandrik

Да понятно, что из какого-то агента. Цикл вряд ли вечный - сообщения все-таки прекращаются. Видимо по каждому обрабатываемому документу.

По поводу sh task - пока не можем поймать спамера с поличным.


Я, собственно, спросил, как команда в коде заставляет Агентменеджер написать не "Agent printing", а "Agent message"?
 

Leoric

Lotus Team
15.10.2003
69
10
BIT
83
Честно говоря странные у вас сообщения...
Какая у вас версия сервера?
На 8.5.3 у меня сообщения выданные Print выглядят так:
04.02.2015 05:36:17 AMgr: Agent ('01.Forming' in 'Dev\TestBase.nsf') printing: Запуск агента
При выдаче MsgBox:
03.02.2015 18:43:18 AMgr: Agent ('01.Forming' in 'Dev\TestBase.nsf') message box: Er: 221, Ошибка - Invalid formula (From:), в строке 10

Возможно ваше сообщение "Agent message" и есть MsgBox, но утверждать не буду... надо вылавливать агента.

В serverLog принтуют агенты по расписанию, web-агенты либо запущенные RunOnServer.
Посмотрите расписание — может что-то должно было запускаться примерно в это время, гляньте в domlog.nsf - возможно найдется что-то запущенное из Web.
 
H

hosm

"Agent message" - 9й сервер логирует так обычный лотусскриптовый MsgBox из агента
 
S

Shandrik

Сервер 8.5.3FP4

Проверил - точно messagebox.

Спасибо!
 
S

Shandrik

Как сделать диалог выбора баз и шаблонов - чтобы можно было выбрать и .nsf и .ntf?

У @prompt последний параметр работает только для [LocalBrowse] :(
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 983
611
BIT
453
а зачем выбирать базы как файлы?
[DOUBLEPOST=1426073713,1426073486][/DOUBLEPOST]еще есть такое
Код:
There is and undocumented option for @Prompt in R5 that brings up the File
Open Database dialog and returns the selected database information.
x := @Prompt( [ChooseDatabase]; ""; ""; ""; "");
@If( @Elements( x) = 1; @Return(""); "");
server := @GetMembers( x; 1);
filename := @GetMembers( x; 2);
title := @GetMembers( x;3);
@Prompt([OK]; "Selected Database:"; server + " " + filename + " " + title);
""
[DOUBLEPOST=1426073826][/DOUBLEPOST]
 
S

Shandrik

Если б всё так просто было.
@Prompt( [ChooseDatabase]; ...) только .nsf-ы показывает. :sour:

Надо название шаблона у выбранного файла вытащить.
[DOUBLEPOST=1426074107,1426074035][/DOUBLEPOST]Лучше скриптом, но и собаками сгодится.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 983
611
BIT
453
можно построить список по дИректори и брать из него:
Код:
Dim db as NotesDatabase
Dim dbdir As NotesDbDirectory				   
Set dbdir =New NotesDbDirectory("")
Set db = dbdir.GetFirstDatabase(DATABASE)
Do while not db is nothing
…
Set db = dbdir.GetNextDatabase
Loop
[DOUBLEPOST=1426074727,1426074510][/DOUBLEPOST]вот с
Код:
Sub Initialize
 
' *** Change the following two values before running the agent ***
Const SERVERNAME = "" ' eg. DevServer1
Const FILENAME = "c:\temp\ServerScan.csv" ' eg. c:\temp\serverscan.csv
'*****
 
On Error Goto errorhandler
 
Const OPENED = "Opened"
Const NOTOPENED = "Not opened"
 
 
Dim dbdir As New NotesDbDirectory( SERVERNAME )
Dim db As NotesDatabase
Dim i As Integer
 
' get all databases and templates on the server
' if you only want databases then change TEMPLATE_CANDIDATE to ???
' if you only want templates then change TEMPLATE_CANDIDATE to ???
Set db = dbdir.GetFirstDatabase(TEMPLATE_CANDIDATE)
 
' Open a new CSV file and write the column headers
Dim fileNum As Integer
fileNum% = Freefile()
Open FILENAME For Output As fileNum%
Write #fileNum%, "Title", "File name", "File path", "Replica Id", "Design template name", "Template name", "Database size", "Opened?", "Date created", "Date last modified", "Full Text Indexed", "Percent used", "In directory catalog"
 
' Loop through all databases on the server and write information to the text file
While Not(db Is Nothing)
i = i + 1
Print "Processing database #" & i
 
' If the database can be opened the write out all database properties
' otherwsie only write out those properties which we can get without having to open the database.
If openDb( db ) Then
Write #fileNum%, db.Title, db.FileName, db.FilePath, db.ReplicaID, db.DesignTemplateName, db.TemplateName, db.Size, OPENED, Cstr(db.Created), Cstr(db.LastModified), Cstr(db.IsFTIndexed), db.PercentUsed, Cstr(db.IsDirectoryCatalog)
Else
Write #fileNum%, db.Title, db.FileName, db.FilePath, db.ReplicaID, db.DesignTemplateName, db.TemplateName, db.Size, NOTOPENED,"","","","",""
End If
 
Set db = dbdir.GetNextDatabase
Wend
 
' Close the CSV file
Close fileNum%
 
Goto ExitSub
 
errorhandler:
Messagebox "An error has occured: " & Error$
Resume ExitSub
 
ExitSub:
 
End Sub
 
Function OpenDb( p_db As Notesdatabase) As Boolean
		' Only return True if the database is opened ok.	   
 
OpenDb = False																						' Assume failure
 
Dim db As New notesdatabase("", "")
 
On Error Goto openerror
If p_db.Open("", "" ) Then
OpenDb = True																				' Db opened ok so return True to caller
End If
 
Goto ExitFunction
 
openerror:
Resume ExitFunction
 
ExitFunction:
 
End Function
 
S

Shandrik

Ну этот способ я оставил как последний вариант и вряд ли буду использовать - слишком много мороки ради сбокубантика.
[DOUBLEPOST=1426074895,1426074821][/DOUBLEPOST]Но за пример спасибо - когда-нибудь пригодится.
 

savl

Lotus Team
28.10.2011
2 624
314
BIT
515
Подскажите...
Есть база в ней создаются запросы на обработку, этакая очередь запросов.
В разных базах есть агент, который находит документы в этой базе, далее обрабатывает.
В документах есть маршрут, поэтому агенты обрабатывают только свои документы.
Агенты стартуют каждые 5 минут, работают от силы 2 минуты.
Задача: Ускорить запуск этих агентов.

Одна из идей:
Заменить формирование запросов в базе - запросы в базу присылаем по почте.
Далее внутри базы агента на получение новой почты, который делает запуск агента в нужной базе через консоль.

Есть другие варианты ускорить запуск агентов?
 

erdi

Green Team
20.08.2008
264
17
BIT
0
агентов в базах перевести на время раз в 15-30 минут, а тот код, который создает документы в базе - ему добавить чтобы запускал некого агента, который будет запускать агентов в базах
в результате агент по обработке будет запускать по событию(создание документа)+временной промежуток, если по каким-то причинам по событию документ не обработался
 
Мы в соцсетях:

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