' Процедура получает Notes имена начальников отделов и их ИО,
ДЛ выше по структуре Исполнителя исходящего
' и дает им доступ на чтение исходящего документа CurrDoc, помещая имена найденных
сотрудников в поле 'Access_Read_Leader'
' В документе должно быть для этого обязательное поле 'Access_Read_Leader'
' Для поиска сотрудников процедура использует служебное
представление:
' - DBAliasLookup (для поиска документов сотрудников)
' Параметры, передаваемые в процедуру:
' - ExecName - уникальное имя исполнителя
исходящего
' - CurrDoc - исходящий документ
Sub
AddReadersFromParentLinkDocs(ExecName As String, CurrDoc As NotesDocument)
Const lsERR_NOTES_BAD_UNID=4091
Dim
ParentsDep As Variant
Dim
sw As New SwitchBoard
Dim
db As New NotesDatabase("", "")
Dim
dbStaff As NotesDatabase
Dim
ViewNotesLookUp As NotesView
Dim
ViewAliasLookUp As NotesView
Dim
doc As NotesDocument
Dim
doc_dep As NotesDocument
Dim
doc_Dep_Leader As NotesDocument
Dim
tempdoc As NotesDocument
Dim
Leader As String
Dim
ItemAccessReadLeader As NotesItem
Set
dbStaff = sw.GetFirstDatabaseByDesign ("ITStaffManager")
Set
ViewAliasLookUp = dbStaff.GetView("DBAliasLookup")
' Из представления справочника
сотрудников получаем документ сотрудника исполнителя исходящего
Set
doc = ViewAliasLookUp.GetDocumentByKey(ExecName)
' Получаем ИД подразделений, которые
выше по структуре Исполнителя исходящего
ParentsDep
= doc.GetItemValue("Resp_Parents")
'Получаем Item "Access_Read_Leader" исходящего документа
Set
ItemAccessReadLeader = CurrDoc.GetFirstItem("Access_Read_Leader")
'
Очищаем поле "Access_Read_Leader"
Call
CurrDoc.ReplaceItemValue("Access_Read_Leader", "")
'Проходим по всем подразделениям,
которые выше по структуре исполнителя исходящего
Forall
dep_id In ParentsDep
On
Error lsERR_NOTES_BAD_UNID Goto processError
'Получаем
документ подразделения
Set
doc_dep = dbStaff.GetDocumentByUNID(dep_id)
On Error Resume Next
'проверяем,
если документ - подразделение, то берем поле "Dep_Leader" и получаем документ
начальника отдела
'
иначе, если документ -организация. то берем поле "Org_Leader" и получаем документ
начальника организации
If
doc_dep.GetItemValue("Form")(0)="Department" Then
Set doc_Dep_Leader = ViewAliasLookUp.GetDocumentByKey(doc_dep.GetItemValue("Dep_Leader")(0))
Elseif
doc_dep.GetItemValue("Form")(0)="Organization" Then
Set doc_Dep_Leader =
ViewAliasLookUp.GetDocumentByKey(doc_dep.GetItemValue("Org_Leader")(0))
End If
'
Если документ начальника отдела и организации существует, продолжаем поиск
If
Not doc_Dep_Leader Is Nothing Then
' Если у начальника подразделения
(организации) нотес имя не пустое, добавляем его в поле "Access_Read_Leader"
'
если там этого имени нет
If
doc_Dep_Leader.GetItemValue("User_NotesName")(0)<>""
Then
If
ItemAccessReadLeader.Contains(doc_Dep_Leader.GetItemValue("User_NotesName")(0))=False
Then
Call
ItemAccessReadLeader.AppendToTextList(doc_Dep_Leader.GetItemValue("User_NotesName")(0))
End If
End If
'Получаем
документ ИО начальника подразделения (организации)
Set
tempdoc =
ViewAliasLookUp.GetDocumentByKey(doc_Dep_Leader.GetItemValue("User_Proxy")(0))
If
Not tempdoc Is Nothing Then
If
tempdoc.GetItemValue("User_NotesName")(0)<> "" Then
If
ItemAccessReadLeader.Contains(tempdoc.GetItemValue("User_NotesName")(0))=False
Then
Call
ItemAccessReadLeader.AppendToTextList(tempdoc.GetItemValue("User_NotesName")(0))
End
If
End
If
End
If
Set tempdoc = Nothing
'Проходим
по всем доверенным лицам начальника подразделения (организации)
Forall
User_Friend In doc_Dep_Leader.GetItemValue("User_Friends")
'получаем документ - доверенное лицо
начальника подразделения (организации)
Set
tempdoc = ViewAliasLookUp.GetDocumentByKey(User_Friend)
If
Not tempdoc Is Nothing Then
If
tempdoc.GetItemValue("User_NotesName")(0)<> "" Then
If
ItemAccessReadLeader.Contains(tempdoc.GetItemValue("User_NotesName")(0))=False
Then
Call
ItemAccessReadLeader.AppendToTextList(tempdoc.GetItemValue("User_NotesName")(0))
End
If
End
If
End
If
Set
tempdoc = Nothing
End
Forall
End
If
processError:
End
Forall
End Sub