• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Проблема с созданным Lotusscript-ом документом

  • Автор темы Автор темы engao
  • Дата начала Дата начала
Может ли это сообщение вылазить, если сумма саммори полей > 64кб? Или там другое сообщение?
$File тоже показывает что оно саммори и =60кб... Входит ли это поле? Кста, не могу найти прикрепленный аттачмент в доке
 
wowa, можешь сделать хитрость, все поля, что не используются в видах сделать несамари перед сохранением дока.
 
Akupaka , так ничего и не получилось,... ошибка осталась, агент не дорабатывает....

Field is too large (32k) or view's column and selection formulas too large.

А что тут про вьющку говорится? может быть не в поле, а с вью что-то? Поле содержит 155 значений, и вроде бы они должны отображаться в некоторых вью...
Может есть какой-то быстрый способ проверить этот документ? Ну там написать мелкий агент и т.д.....
Дело в том, что я не могу отловить ошибку... У пользователя она есть и агент, который работает на сервере и лезит в db2.
 
так ничего и не получилось
Что-то не так делаешь, либо не там.

ошибка осталась, агент не дорабатывает
Какой такой агент? О.о
Ты перед попыткой сохранения в агенте пройдись по всем саммари-полям и проверь их размер! Они должны быть в пределах где-то 26-30 КБ, иначе может быть ошибка. Вот и пусть твой агент куда-то пишет все поля и размеры. А ты потом посмотри какие поля вылазят

А что тут про вьющку говорится?
Эта ошибка общая. Не обращай внимания.
 
Akupaka, нашел я проблему...
Поле занимает 17кб....удаляю его до 10 кб, все равно пишет ошибку... Если убрать галочку summary, то все рабоатет нормально...
КАк быть? Если убрать галочкУ, то после computedwithcompose она вернется....
Да и что за глюк такой? всего-то 10 кб и выдает ошибку
 
Да и что за глюк такой? всего-то 10 кб и выдает ошибку
Это у тебя ошибка док больше 64КБ значит.

КАк быть? Если убрать галочкУ, то после computedwithcompose она вернется
Ну, как вариант, это при сохранении убирать флаг .изсаммари
 
Это у тебя ошибка док больше 64КБ значит.
я думал на 64 ошибка будет по другому звучать...
да и чего "всю вину" спихнуло на это поле?
Я ведь мог удалить другое поле = 5кб и все было бы ок,... а не тут то было...
 
Akupaka , забудь про все ))))
дабы отловить ошибку, я создал обычную кнопку , где ,можно сказать, одна строчка "doc.Save"
вот на ней и выскакивает это ошибка.
 
Тоже мне уточнение. Кнопку можно сделать на форме, можно в представлении, можно агент ))) Поди пойми )))
 
повесьте на кнопку вызов showSummaryReport:
Код:
[declarations] Const NEWLINE={
}

Private Function showSummaryReport( doc As NotesDocument ) As String
Dim header As String
header = "Размер summary полей в байтах:" + NEWLINE

Dim content As String
Dim summarySize As Long
Forall item In doc.Items
If item.IsSummary AND item.SaveToDisk Then
content = content & getReportLine( item.Name , item.ValueLength ) 
summarySize = summarySize + item.ValueLength
End If
End Forall

Dim footer As String
footer = getReportLine( "Итого" , summarySize)

Messagebox header + NEWLINE + content + NEWLINE + footer
End Function

Private Function getReportLine( itemName As String , itemLength As Long ) As String
Const TAB_CHAR = {	}
Const MAX_FIELDNAME_LENGTH = 40 ' если в документе есть поле с именем длиннее 40 символов - найду и убью гада.
getReportLine = itemName & String( MAX_FIELDNAME_LENGTH - Len( itemName ) , "." ) & TAB_CHAR & itemLength & NEWLINE
End Function
если приведенная инфа не поможет - сбросьте сюда выхлоп MessageBox-a ( link removed )
P.S. TAB_CHAR - внутри фигурных скобок именно tab
P.P.S. кстати, а задвоения полей нету часом?
edited: гм. забыл проверку на cfd. поправил
 
Const MAX_FIELDNAME_LENGTH = 40 ' если в документе есть поле с именем длиннее 40 символов - найду и убью гада.
Table of Notes and Domino known limits
Characters in names
Database Title: 96 bytes
Filenames: On Windows® and UNIX® platforms minimum of 255 and/or OS limits; on local Macintosh workstation 31
Field names: 32 characters (32 bytes in SBCS, 64 bytes in DBCS)
View names: 63 bytes per level, 127 total including one separator
Form names: 63 bytes per level, 127 total including one separator
Agent names: 63 bytes per level, 127 total including one separator
 
Всем привет. У меня тут тоже проблема с созданным ЛотусСкриптом документом. Поделитесь знаниями, кому не жалко.
Дело в том, что я рублю механизм обработки документа. В данный момент пользователи создают его ручками, потом ручками жмут на нем кнопку и меняют его статус и толкают его обрабатываться дальше посредством агента. Работать ручками им надоело, и мне поручили это дело автоматизировать - сделать так, чтобы при нажатии кнопки на форме "Создать документ" создавался документ с заполненными полями и тут же менялся его статус на следующий по схеме его движения, и он обрабатывался дальше агентом. У формы этого документа ряд полей, значения к-рых заданы по умолчанию, на нем еще куча субформ.
Ладно, код кнопки написал, впихнул туда коды событий QueryOpen, PostOpen, QuerySave и этой формы и лежащих в ней подформ. В этом коде кое-каким полям присваиваю значение, документ сохраняю. При нажатии кнопки вроде как порядок. Да вот беда, документ-то создается, но после выполнения кода кнопки в нем значения важных полей (которые нужны для агента) оказываются равными "", хоть я и присваивал им значения, и сохранял документ после этого.
Делал так

Sub Click(Source As Button)
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace

Set dbCur = session.CurrentDatabase

' ---------------------------------- Создание документа процесса ------------------------------------

Dim docThis As New NotesDocument (dbCur)

docThis.ReplaceItemValue "Form", "DFProcessInstance"

Dim nmServer As New NotesName( session.CurrentDatabase.Server )


' ------------------------------- С полем DFAccessAdministrationServer проблема - оно не сохраняется после выполнения кода кнопки

docThis.ReplaceItemValue("DFAccessAdministrationServer", nmServer.Canonical).SaveToDisk = True

docThis.Save True,True

' Еще там QueryOpen субформ

'------------------------------ Пинаем процесс для дальнейшей обработки вызовом нужных агентов и т.д.

' -------------------------- Субформы, события QuerySave и PostSave, какие-то поля делаем SaveToDisk = False ---------------------------------------

' проверка: если перечисленные ниже действия были выполнены, то Goto CloseCurrentDoceument

' запускаем агент на сервере

CloseCurrentDoceument:

docThis.ReplaceItemValue("SaveOptions", "0").SaveToDisk = False

End sub

Нажимаю кнопку, документ во вьюхе появляется, только поле DFAccessAdministrationServer, которое нужно агенту, оказывается равным "". Хотя, если в конце приведенного кода делаю Msgbox docThis.GetItemValue("DFAccessAdministrationServer")(0), в окне отображается значение.
Не пойму, в чем дело. Поле DFAccessAdministrationServer лежит на одной из субформ.
Свойства поля DFAccessAdministrationServer: тип Names, Editable, оно скрытое, значение по ум. "".
Заранее спасибо
 
Не заполняется только DFAccessAdministrationServer или еще какие-то поля?

А вообще попробуй пользоваться отладчиком. Так все же легче отловить где меняются значения
 
Отследил, что именно DFAccessAdministrationServer влияет на дальнейшую обработку документа, и именно оно и не сохранилось.
Да пользовался я отладчиком. Перед самим Exit Sub у docThis значение поля DFAccessAdministrationServer равно каноническое имя сервера. Документ во вьюхе появляется, лезу в Document Properties, а там это поле "".
 
Значит, агенты что-то делают.
Поле не в секции случайно?
 
Anonimous

Если DFAccessAdministrationServer на подформе, то попробуй его вынести на основную форму и переименуй, временно, в DFAccessAdministrationServer_tmp, изменяй в коде это поле. Посмотри сохраняется ли? может дело именно в подформе.
Если сохраняется tmp, то надо думать как лучше, может стоит вынести из подформы.

Если в этом поле должно быть только имя сервера при создании и больше не меняться, то пропиши туда формулой @ServerName и сделай тип поля Computed when composed, тогда не важно где поле расположено.
 
Поле в секции "Скрытые поля" субформы. Эта секция ото всего скрывается.
Агент, который вызывается в коде кнопке, обращается к полю лишь так. Здесь doc - это docThis из кода кнопки ( документ, который создали ).

Sub Initialize

Dim session As New NotesSession

Dim doc As NotesDocument

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

If Strcompare(doc.GetItemValue("DFAccessAdministrationServer")(0), nmServer.Canonical) <> 0 Then Exit Sub

' дальнейшая обработка документа


End Sub

Да, при работе кнопки на вьюхе DFAccessAdministrationServer имеет значение, документ обрабатывается нормально, перед самим End Sub в кнопке это поле не пустое после работы агента. Но выходим из кода кнопки - и оно пустое. Т.е. если этот документ потом открыть, жмакнуть на его форме кнопку, которая снова обратится к приведенному выше агенту, но мы из него вылетим на строке
If Strcompare(doc.GetItemValue("DFAccessAdministrationServer")(0), nmServer.Canonical) <> 0 Then Exit Sub
"Дальнейшая обработка документа" не пойдет как надо.

А на самой субформе с полем DFAccessAdministrationServer делается лишь это:
Событие PostOpen
Source.Document.ReplaceItemValue("DFAccessAdministrationServer", nmServer.Canonical).IsNames = True

If Source.EditMode Then Source.Refresh

Но это когда документ ручками обрабатывается и ручками создается. Тогда поле не пустое.

Но делал в своем коде

docThis.ReplaceItemValue("DFAccessAdministrationServer", nmServer.Canonical).IsNames = True
docThis.ReplaceItemValue("DFAccessAdministrationServer", nmServer.Canonical).SaveToDisk = True
docThis.Save True,True

Поле пусто после выхода из кнопки
 
блин... никогда на любил SaveOptions
А такую конструкцию
Код:
docThis.ReplaceItemValue("SaveOptions", "0").SaveToDisk = False
Первый раз вижу :)

А еще момент - не лучше перенести весь код в основную форму, а не пихать его по сабформам? Ну или в какой-нибудь класс...

И еще замечание - пользуйся подсветкой кода в форуме. Твой код читать сложно.
 
docThis.ReplaceItemValue("SaveOptions", "0").SaveToDisk = False
Не я придумал, до меня оно в коде было. Но с ним, без него, поле все равно пусто. Но агента я выше показал, ведь он-то не может его испортить. И документ не открываем, поэтому события субформ не выполняются, все в код кнопки
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы