Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.58/59: Рейтинг темы: голосов - 59, средняя оценка - 4.58
0 / 0 / 0
Регистрация: 07.02.2009
Сообщений: 183

Проверка при сохранении

09.07.2015, 16:41. Показов 12056. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
в базе есть проверка на вложение, проверяется на Querysave

LotusScript
1
2
3
4
5
6
7
8
9
10
11
12
 Forall item In Doc.Items
If Ucase(item.Name) = "$FILE" Then
If  Right$( Lcase(item.Values(0) ),4) = ".pdf"  Then
Else
Messagebox "неверный фармат!"
Continue=False
Exit Sub
End If
 
End If
 
End Forall
при создании нового проверяет, потом если открыть на редактирование - проверяет, но если открыть на редактирование вложить файл с неверным расширением, появится сообщение и после этого удалить неверное вложение и вновь его добавить - дает сохранить и не ругается
Что не так ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.07.2015, 16:41
Ответы с готовыми решениями:

Проверка поля при сохранении
Добрый день. Подскажите ПЖ новичку. При создании ответного документа на форму, поле ответного заполняется автоматически. необходимо чтоб...

При сохранении в файл формата xlsx выпадает сообщение о сохранении шаблона
Такая дурацкая штука получается при сохранении в файл формата xlsx - выпадает сообщение о сохранении шаблона!!! Этот шаблон я как раз...

AkelPad, при сохранении "Символы будут утеряны при сохранении в этой кодировке"
Иногда при сохранении текстового файла в AkelPad появляется окно: Строка "12" содержит символы, которые будут утеряны при сохранении в...

24
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
10.07.2015, 17:51
Цитата Сообщение от k85
Что не так ?
обновление РТ полей и вложений происходит сложным образом
ваш код это не учитывает
можно попробовать Update(True), для uidoc, и Update для rtitem (точно действует для текста)
есть еще хак с подменой инмемори дока http://www-10.lotus.com/ldd/dominowiki.nsf/dx/Working_with_IBM_Lotus_Notes_rich_text_fields
0
0 / 0 / 0
Регистрация: 07.02.2009
Сообщений: 183
12.07.2015, 14:21
уже как только не пробую - не выходит

может можно как-то по другому решить, необходимо во вложениях в Body проверять файлы и разрешать вносить (соответственно сохранять) только в определенных форматах документы, например .doc, .jpeg
0
0 / 0 / 0
Регистрация: 14.01.2009
Сообщений: 257
12.07.2015, 14:58
1) RT поле скрыть, создать свою кнопку "вложить" и там проверять что пользователь выбрал
2) попробуй так

LotusScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 Continue=False
Dim doc As NotesDocument
Set doc=Source.Document
 
Dim dname As Variant
dname=Evaluate({@AttachmentNames}, doc)
 
If dname(0)<>"" Then
Forall n In dname
If Right( Lcase(n),4) = ".pdf" Then
Continue=True
Exit Sub
End If
End Forall
End If
Messagebox "неверный фармат!"
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
12.07.2015, 15:35
вот набросал:

LotusScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
%REM
*--------------------------------------------
Function UpdateUIdoc
Description: Comments for Function
%END REM
Function UpdateUIdoc(uidoc As NotesUIDocument, rtName As String) As NotesUIDocument
Dim routineName As String
routineName="UpdateUIdoc"
On Error GoTo ErrH
your code here
Dim wksp As New NotesUIWorkspace
Dim ses As New NotesSession
Dim uidocNew As NotesUIDocument
Dim doc As NotesDocument
Dim rti As NotesRichTextItem
Dim strFieldname As String
 
uidoc.Refresh True  do thys if the rich text field is editable, to get the current contents in case user has modified them.
Set doc = uidoc.Document   get the back-end document for the document open on screen.
strFieldname = uidoc.CurrentField  remember the current field if any
Set rti = doc.GetFirstItem(rtName)
rti.Update
Dim newdoc As NotesDocument, unid As String
unid=doc.Universalid
Set newdoc=ses.Currentdatabase.Createdocument()
Call doc.Copyallitems(newdoc, True)
doc.SaveOptions = "0"  In order to close the document without a "do you want to save" prompt. If thys is a mail-in doc you may need to set MailOptions="0" also to avoid being prompted.
Call uidoc.Close(True)
Delete uidoc
Set doc=GetDocumentByUNIDSilent(ses.Currentdatabase,unid)
ForAll ytm In doc.Items
Dim tmp As NotesItem
Set tmp=ytm
Call tmp.Remove()
End ForAll
Call newdoc.Copyallitems(doc,True)
Set uidocNew = wksp.EditDocument(True, doc, , , , True)
If Len(strFieldname) > 0 Then uidocNew.GotoField(strFieldname)
Set UpdateUIdoc=uidocNew
Quit:
Exit Function
ErrH:
Error Err, RaiseError
Resume Quit
End Function
использование

LotusScript
1
2
3
4
5
6
Sub Querysave(Source As Notesuidocument, Continue As Variant)
Continue=True
Set Source=UpdateUIdoc(Source, {body})
If HasAttachmentName(Source.Document, {*.docx}) Then Msgbox {Attach is not valid}:Continue=False:Exit Sub
Source.Document.Save True, False
End Sub
ф-ции для аттачей

LotusScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Function AttachmentsName(objdoc As NotesDocument) As Variant
AttachmentsName=Evaluate("@AttachmentNames(0)", objdoc)
End Function
Function HasAttachmentName(objdoc As NotesDocument, wildcard As String) As Boolean
Dim arr As Variant
arr=AttachmentsName(objdoc)
If Not IsEmpty(arr) Then
If IsArray(arr) Then
ForAll a In arr
If CStr(a) Like wildcard Then
HasAttachmentName=True
Exit Function
End If
End ForAll
Else
If CStr(arr) Like wildcard Then
HasAttachmentName=True
End If
End If
End If
End Function


--- Добавлено 13 июл 2015. Первое сообщение размещено 13 июл 2015 ---

получение дока из дб оформлена так

LotusScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Function GetDocumentByUNIDSilent(db As NotesDatabase, UNID As String) As NotesDocument
On Error GoTo ErrH
Dim doc As NotesDocument
Set doc = db.GetDocumentByUNID(UNID)
If doc.IsValid And Not doc.IsDeleted Then
проверка - если, например, недоступен по readers
If doc.Size > 0 Then
Set GetDocumentByUNIDSilent = doc
End If
End If
Quit:
Exit Function
ErrH:
RaiseError
Resume Quit
End Function
0
0 / 0 / 0
Регистрация: 07.02.2009
Сообщений: 183
12.07.2015, 15:55
@lmike,
спасибо! буду пробовать и разбираться
0
0 / 0 / 0
Регистрация: 07.02.2009
Сообщений: 183
12.07.2015, 17:17
извиняюсь, не могу разобраться немного
все работает классно, если документ уже был и его просто редактировать, а если новый, то пишет что ошибка в этой строке
Set Source=UpdateUIdoc(Source, {body})
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
12.07.2015, 19:45
Цитата Сообщение от k85
то пишет что ошибка в этой строке
ну звиняйте - я забыл про новые доки, надо в код добавить проверку, на новизну дока и просто использовать newdoc (при получении uidocNew)
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
12.07.2015, 19:52
после uidoc.Close(True) д.б.

LotusScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    Dim isnew As Boolean
isnew=doc.Isnewnote
Delete uidoc
If Not isnew Then
Set doc=GetDocumentByUNIDSilent(ses.Currentdatabase,unid)
ForAll ytm In doc.Items
Dim tmp As NotesItem
Set tmp=ytm
Call tmp.Remove()
End ForAll
Call newdoc.Copyallitems(doc,True)
Else
Set doc=newdoc
End If
сами сопоставьте код


--- Добавлено 13 июл 2015. Первое сообщение размещено 13 июл 2015 ---

удаление всех айтемов из дока (OnDisk) - м.б. что-то более оптимальное есть, но я заленился
0
0 / 0 / 0
Регистрация: 07.02.2009
Сообщений: 183
13.07.2015, 10:31
при использовать newdoc (при получении uidocNew) , ошибка
если использовать дебагер , то видно, что в новом документе все поля копируются, а файлы не в само поле Body помещаются, а ниже (вне полей)
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
13.07.2015, 11:06
Цитата Сообщение от k85
при использовать newdoc (при получении uidocNew) , ошибка
код выше не работает?
0
0 / 0 / 0
Регистрация: 07.02.2009
Сообщений: 183
13.07.2015, 12:01
сейчас все удалю и заново попробую, так как не вышло, и уже не могу найти всех своих изменений. лучше все с нуля буду пробовать, просто для новых появилась опять проблема в этом месте Set Source=UpdateUIdoc(Source, {body})
0
0 / 0 / 0
Регистрация: 07.02.2009
Сообщений: 183
14.07.2015, 09:02
@lmike, спасибо огромнейшее, все заработало, после создания с нуля, все работает отлично
0
0 / 0 / 0
Регистрация: 07.02.2009
Сообщений: 183
19.07.2015, 11:10
появилась небольшая проблема, ранее после проверки переходило на Queryclose, где запускается заполение протокола изменений документа, а теперь после querysave далее не проходит по остальным и получается не заполняется протокол
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
19.07.2015, 11:19
Цитата Сообщение от k85
а теперь после querysave далее не проходит
оно и понятно - объект убит
0
0 / 0 / 0
Регистрация: 07.02.2009
Сообщений: 183
19.07.2015, 15:28
просто если проверять на соответствие определенных полей и записывать в протокол, а потом проверять вложение, то если вложение неверно, то человек может не захотеть сохранять ,а история должна уже будет сохраниться.

если в конце, то уже объекта нет (
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
19.07.2015, 15:39
Цитата Сообщение от k85
а история должна уже будет сохраниться.
если не захочет сохраняться док - до квери-сэйв не дойдет
а если не захочет после запроса - дык записать протокол уже можно было (на QS)


--- Добавлено 20 июл 2015. Первое сообщение размещено 20 июл 2015 ---

короче - всё можно определить на QS и обновление, вернее код по проверкам перенести в обновление, а на QS вызывать ViewRefresh
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
19.07.2015, 19:18
еще вариант - вызывать самому

LotusScript
1
2
3
4
5
6
7
Sub Querysave(Source As Notesuidocument, Continue As Variant)
Continue=True
Set Source=UpdateUIdoc(Source, {body})
If HasAttachmentName(Source.Document, {*.docx}) Then Msgbox {Attach is not valid}:Continue=False:Exit Sub
Source.Document.Save True, False
Call PostSave(Source)
End Sub
при условии что знаем что делаем ;)


--- Добавлено 20 июл 2015. Первое сообщение размещено 20 июл 2015 ---

и кстати - QueryClose отрабатывается и так


--- Добавлено 20 июл 2015 ---




Цитата Сообщение от k85
,а история должна уже будет сохраниться
а вот с этого места поподробнее - где история, что это?
0
0 / 0 / 0
Регистрация: 07.02.2009
Сообщений: 183
20.07.2015, 09:06
в базе на queryclose выполняется проверка соотвествия полей и вносится в поле информация, если изменили определенные поля, т.е. функция находится там
но у меня на querysave (если смотреть дебагером) все выполняется , ошибок нет,
проходит
If HasAttachmentName...
Source.Document.Save True, False
Call PostSave(Source) - переходит и возвращает назад на querysave
End If

End Sub
и выходит
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
20.07.2015, 11:16
Цитата Сообщение от k85
Call PostSave(Source) - переходит и возвращает назад на querysave
правильно, и что смущает?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.07.2015, 11:16
Помогаю со студенческими работами здесь

Что меняется при встраивании цветового профиля при сохранении ?
Суть проблемы - если я сохраняю фотографию без галочки &quot;ICC профиль: Adobe RGB&quot; то просмотрщики фотографий виндоус и самописное...

Как сделать выбор RGB по умолчанию при при сохранении файлов в Inkscape ?
Столкнулся с тем, что Inkscape сохраняет изображение в СMYK. Мне нужно RGB. Нашел в свойствах документа управление цветом, но почему то он...

Ошибка при сохранении данных в БД при использовании bindingnavigator
Добрый день. Подскажите, куда копать? Есть форма, где в зависимости от выбранного значения combobox заполняется datagridview данными из...

При добавлении в DataTable новой строки и изменении внешнего ключа возникает конфликт при сохранении в базу
У меня есть DataSet с двумя таблицами (назовём их Т1 и Т2). В Т1 есть внешний ключ на таблицу Т2. Я добавляю в Т2 новую строку, а в Т1...

Сделать,чтобы при сохранении текста в textBox он сохранялся в configs.ini и при открытии программы подгружался
Вообщем хочу сделать так чтобы при сохранении текста в textBox он сохранялся в configs.ini и при открытии программы он просто подгружался и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru