Мелкие Вопросы Rtfm

  • Автор темы serko
  • Дата начала

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 980
611
BIT
427
Научите пользоваться @IsError
он срабатывает как обработчик исключений...
т.е. можно получить значение и уже на него проверять @IsError (нужен еще @IF)
myvar:=@DbLookUp(...);
@If(@IsError(myvar);@Return({shit happens});{I'm happy});
 
Последнее редактирование модератором:
  • Нравится
Реакции: serko
S

serko

Кошмар какой-то творится...
Есть база А и база Б.
Из базы А создаю документ Б1 в базе Б и открываю на редактирование. Затем из дока Б1, открытого на редактирование создаю документ Б2 в (в базе Б) и пытаюсь открыть на редактирование, на что он меня посылает. В коде я пытаюсь взять notesuiworkspace.currentdocument.document, который пуст. Как быть?
 
S

serko

Код создания/открытия дока б2 пришли.
Код:
Public Sub createTaskDoc () 'универсальный
On Error GoTo ERROR_HANDLER
GoTo START
ERROR_HANDLER:
On Error GoTo 0
Error Err, Error$ & Chr(10) & GetThreadInfo(1) & " (" & Erl & ")"
Exit Sub
START:
Dim ws As New NotesUIWorkspace
Dim view As NotesView
Dim s As New NotesSession
Dim taskdb As NotesDatabase
Dim newDoc As NotesDocument	
Dim tmpdoc As NotesDocument
Dim col As NotesDocumentCollection   
Dim form As String
Set taskdb = getsettingmanager().crossGetDB("tasks")
Dim flag As Integer
Dim nam As NotesName
Dim staffDB As NotesDatabase
Dim staffdoc As NotesDocument
Dim pickDoc As NotesDocument
Dim db As NotesDatabase
'
Set newDoc = taskdb.Createdocument
If getstaffmanager().isUser(True) = False Then
Exit Sub
End If
If ws.Currentdocument Is Nothing Then
If Not ws.Currentview Is Nothing Then
'вызываем из представления
If Not ws.Currentview.View.Getfirstdocument() Is Nothing Then 
'получаем форму выделенного документа
Set db = ws.CurrentDatabase.Database
Dim doc As NotesDocument
Set doc = db.GetDocumentByID(ws.CurrentView.CaretNoteID)
Dim Field As String
Field = doc.getitemvalue("Form")(0)
'/получили форму документа
'проверяем тип документа
'выделен документ
flag = MessageBox ("Хотите связать поручение с выделенным документом?", 4 , "")
If flag = 6 Then
'связать с документом
Select Case Field
Case "Task"
If (doc.Getitemvalue("TaskStatus")(0) <> "На исполнении") Then
MsgBox "Поручение можно создать только для поручений со статусом [На исполнении]"
Exit Sub
End If
'для поручения со статусом на исполнении
'создаем из поручения
newDoc.Form = "Task"
newDoc.TaskRegNumber = doc.Getitemvalue("TaskNum")(0)
newDoc.DocRegNumber = doc.Getitemvalue("DocRegNumber")(0)
newDoc.TaskAuthor = getstaffmanager().getName(False)
newDoc.TaskAuthorNotes = getstaffmanager().getNotesName(False)
newDoc.TaskStatus = "Черновик"
'индивидуальная часть
newDoc.DocUNID = doc.getitemvalue("DocUNID")(0)
Call newDoc.MakeResponse( doc )
Call newDoc.Save(True, True)
Call ws.Editdocument(True, newDoc)
'/
Case "Execution" 'документ исполнения приказа
If (doc.Getitemvalue("DocStatus")(0) <> "На исполнении") Then
MsgBox "Поручение можно создать только для документов со статусом [На исполнении]"
Exit Sub
End If
newDoc.Form = "Task"
newDoc.DocRegNumber = doc.Getitemvalue("ExecutionDocRegNumber")(0)
newDoc.TaskAuthor = getstaffmanager().getName(False)
newDoc.TaskAuthorNotes = getstaffmanager().getNotesName(False)
newDoc.TaskStatus = "Черновик"
'индивидуальная часть
newDoc.DocUNID = doc.getitemvalue("DocUNID")(0)
newDoc.DocDB = Mid(db.Filename, 1, (Len(db.Filename) - 4))
Call newDoc.Save(True, True)
Call ws.Editdocument(True, newDoc)
Case "Act", "Agreement", "CopyOrderAgreement" ,"CopyOrderExecution", "Order",_ 
"Protocol", "Signing" 
MsgBox "К данному типу документов нельзя создавать поручения"
Exit Sub
Case Else
MsgBox "Добавьте документ в метод createTaskDoc"
Exit Sub
End Select
Else
'не связывать с документом
'стандартное создание
newDoc.Form = "Task"
'newDoc.DocRegNumber = curdoc.Getitemvalue("DocRegNumber")(0)
newDoc.TaskAuthor = getstaffmanager().getName(False)
newDoc.TaskAuthorNotes = getstaffmanager().getNotesName(False)
newDoc.TaskStatus = "Черновик"
Call newDoc.Save(True, True)
Call ws.Editdocument(True, newDoc)
'индивидуальная часть
'newDoc.DocUNID = ""
'/
End If
Else
'документ не выделен (пустое представление)
'стандартное создание
newDoc.Form = "Task"
'newDoc.DocRegNumber = curdoc.Getitemvalue("DocRegNumber")(0)
newDoc.TaskAuthor = getstaffmanager().getName(False)
newDoc.TaskAuthorNotes = getstaffmanager().getNotesName(False)
newDoc.TaskStatus = "Черновик"
Call newDoc.Save(True, True)
Call ws.Editdocument(True, newDoc)
'индивидуальная часть
'newDoc.DocUNID = ""
'/
End If
Else
MsgBox "Ошибка - createTaskDoc: в принципе не должна появляться"
'возможно, косяк может быть в отметках, но по идее - не должен быть
End If
Else
'создаем внутри документа
'получаем форму документа
Set doc = ws.Currentdocument.Document
If ( (doc.Getitemvalue("DocDB")(0) = "docs") Or (doc.Getitemvalue("DocDB")(0) = "office")) Then
Set db = getsettingmanager().crossGetDB(doc.Getitemvalue("DocDB")(0))
Else
Set db = ws.Currentdatabase.Database
End If
Field = doc.getitemvalue("Form")(0)
'/получили форму документа
Select Case Field
Case "Task"
If (doc.Getitemvalue("TaskStatus")(0) <> "На исполнении") Then
MsgBox "Поручение можно создать только для поручений со статусом [На исполнении]"
Exit Sub
End If
'для поручения со статусом на исполнении
'создаем из поручения
newDoc.Form = "Task"
newDoc.TaskRegNumber = doc.Getitemvalue("TaskNum")(0)
newDoc.DocRegNumber = doc.Getitemvalue("DocRegNumber")(0)
newDoc.TaskAuthor = getstaffmanager().getName(False)
newDoc.TaskAuthorNotes = getstaffmanager().getNotesName(False)
newDoc.TaskStatus = "Черновик"
'индивидуальная часть
newDoc.DocUNID = doc.getitemvalue("DocUNID")(0)
Call newDoc.MakeResponse( doc )
Call newDoc.Save(True, True)
Call ws.Editdocument(True, newDoc)
'/
Case "Execution" 'документ исполнения приказа
If (doc.Getitemvalue("ExecutionStatus")(0) <> "На исполнении") Then
MsgBox "Поручение можно создать только для документов со статусом [На исполнении]"
Exit Sub
End If
newDoc.Form = "Task"
newDoc.DocRegNumber = doc.Getitemvalue("ExecutionDocRegNumber")(0)
newDoc.TaskAuthor = getstaffmanager().getName(False)
newDoc.TaskAuthorNotes = getstaffmanager().getNotesName(False)
newDoc.TaskStatus = "Черновик"
'индивидуальная часть
newDoc.DocUNID = ws.Currentdocument.document.universalid
newDoc.DocDB = Mid(db.Filename, 1, (Len(db.Filename) - 4))
Call newDoc.Save(True, True)
Call ws.Editdocument(True, newDoc)
Case "Act", "Agreement", "CopyOrderAgreement" ,"CopyOrderExecution", "Order",_ 
"Protocol", "Signing" 
MsgBox "К данному типу документов нельзя создавать поручения"
Exit Sub
Case Else
MsgBox "Добавьте документ в метод createTaskDoc"
Exit Sub
End Select
End If 
End Sub
 

Вложения

  • код.txt
    7,9 КБ · Просмотры: 588
Последнее редактирование:
S

serko

Виноват. Не уточнил. Ругается на первое условие после Else, где идет set db и set doc
Комментарии:
'создаем внутри документа
'получаем форму документа
 

savl

Lotus Team
28.10.2011
2 624
314
BIT
501
@serko, посмотрел код :inpain: , вспомнил себя лет 7 назад , эх... было время
Возможно фокус сбился.
Попробуй перед строкой: Set doc = ws.Currentdocument.Document
вставить: set ws = new NotesUIWorkSpace
То есть заново пересоздать объект.
 
  • Нравится
Реакции: serko
S

serko

@serko, посмотрел код :inpain: , вспомнил себя лет 7 назад , эх... было время
Возможно фокус сбился.
Попробуй перед строкой: Set doc = ws.Currentdocument.Document
вставить: set ws = new NotesUIWorkSpace
То есть заново пересоздать объект.
1) Что бы сейчас в коде исправил? (про 7 лет назад)
2) Знакомый посоветовал через агент попробовать запустить. Пока не пробовал. Вариант с пересозданием вроде тож не работал, но чуть позже повторить попробую.
 
S

serko

Столкнулся с довольно неприятной задачей.
Есть представление, в которых отображаются разделы(документы).
В форме раздела есть поле заголовок и встроенная вьюха(она отображает все элементы, документы опять таки)
Суть следующая:
Создаю раздел в соответствующей вьюхе. Внутри этого документа нажимаю на кнопку встроенной вьюхи и создается элемент с автоматическим заполнением полей(поле Title и parentUNID - ЮНИД дока-раздела).
А теперь самая сложная часть для понимания.
Аналогичным образом создается раздел 2 и в его внутренней вьюхе (а для всех документов-разделов встроенная вьюха одна) создаю документ-элемент. Короче, повторил все то же самое, что и с первым разделом.
Проблема такова: В какой бы раздел(документ) я ни заходил, я вижу документы-элементы для всех разделов, а мне надо, чтобы отображались только те документы-элементы, которые были созданы в соответствующем разделе, иначе для чего я parentUNID вгонял в документ-элемент?
В результате выходит так:
Раздел 1 - во встроенной вьюхе видно документы-элементы раздела 1 и 2
Раздел 2 - во встроенной вьюхе видно документы-элементы раздела 1 и 2
Хочу:
Раздел 1 - во встроенной вьюхе видно документы-элементы раздела 1
Раздел 2 - во встроенной вьюхе видно документы-элементы раздела 2
Во встроенной вьюхе я пытался прописать такую формулу:
SELECT Form = "Element" & parentUNID = @Text(@DocumentUniqueID)
но тщетно, а
SELECT Form = "Element"
выводит все элементы
 

savl

Lotus Team
28.10.2011
2 624
314
BIT
501
@serko,
1) Да я бы и то что вчера написал уже поменял бы... А так раз в месяц что-то меняю.
2) хм... а нет варианта кинуть файл БД с примером? Код уж больно наворочен. так и не скажешь..
В какой бы раздел(документ) я ни заходил, я вижу документы-элементы для всех разделов, а мне надо, чтобы отображались только те документы-элементы, которые были созданы в соответствующем разделе, иначе для чего я parentUNID вгонял в документ-элемент?
У втроенной вьюхи, на форме, есть второй параметр. Show Single Category.
В это поле пишешь: @Text(@DocumentUniqueID)
Саму вьюху меняешь так: первая колонка - категория по полю parentUNID
 
  • Нравится
Реакции: serko

savl

Lotus Team
28.10.2011
2 624
314
BIT
501
@serko, ммм, надеюсь я нигде не ошибся в логике, орфография может страдать...
Сократил немного код, возможно так станет легче искать ошибки.
Если это происходит по кнопке, то сделай еще одну кнопку, если вызов агента, то еще одного агента.
 

Вложения

  • Новый текстовый документ (2).txt
    4,1 КБ · Просмотры: 343
  • Нравится
Реакции: serko

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 980
611
BIT
427
@savl, что за странный способ обмена кодом?
 
S

serko

@serko, ммм, надеюсь я нигде не ошибся в логике, орфография может страдать...
Сократил немного код, возможно так станет легче искать ошибки.
Если это происходит по кнопке, то сделай еще одну кнопку, если вызов агента, то еще одного агента.
Переименовал метод чуточку, чтобы свой не прятать.
Ну, для меня как бы не новость, что я пытаюсь создавать поручения в отдельной от документов БД ))
==> Call newDoc.MakeResponse( doc )
 

Вложения

  • 111.jpg
    111.jpg
    12 КБ · Просмотры: 501
S

serko

если документы в разных базах, то нельзя сделать их родитель-ответный
ну поэтому я и не связывал у себя в коде ))
Кстати, попробовал агентом сделать. Если раньше после 1 созданного поручения вылетало при создании второго, то теперь вылетает при создании 3 поручения агентом. Ошибка теперь на Initialize упала(в агенте). Гляну, что там творится ))
Попробую уже предложенный вариант с агентом. Буду вызывать агент, который будет вызывать другой агент О_О
 
Последнее редактирование:
S

serko

Нашел косяк. Отладчик помог. Когда я создаю уже в другой базе поручение у notesuiworkspace отсутствует currentdatabase, а вот у notessession он есть почему-то. Пойду исправлять
 
S

serko

Всем спасибо. Устранил проблему следующим кодом:
Код:
If ws.Currentdatabase Is Nothing Then
Set db = session.Currentdatabase
Else
Set db = ws.Currentdatabase.Database
End If
 
If ws.Currentdocument Is Nothing Then
Set doc = session.Documentcontext
Else
Set doc = ws.Currentdocument.Document
End If
И еще... Через агент делаю. Так, на всякий... Главное, что работает :D
 
S

serko

Фигня какая-то. Прогулялся по интернету в поисках необходимой инфы по полю типа rich text. Так и не понял, как работать с этим полем. Сколько файлов в него помещается? Если более одного, то как получить количество файлов в этом поле? Как сделать кнопку на выбор файлов? Как убедиться, что пользователь выбрал именно файл с расширением doc, docx, а не какой-нибудь дам xls? Меня поле интересует только как хранилище документов
 
Мы в соцсетях:

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