Тема: Как через API позиционироваться на конкретный документ?
Как через API позиционироваться на конкретный документ?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
TechnologiCS → TechnologiCS → Использование TechnologiCS API → Как через API позиционироваться на конкретный документ?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как через API позиционироваться на конкретный документ?
Какие данные есть входные?
Самое просто конечно это SingleDoc (правда это не совсем позиционирование, а получить данные об одном документе). Пример макроса (запускается любого модуля)
Sub FormMacro_ShowDoc(TCSActiveModule)'Показать документ по идентификатору Id = TCSApp.InputBox( "Введите идентификатор версии документа", "Идентификатор", "" ) If Id<>"" Then Set Doc = TCSApp.SingleDoc( CSDN_Const.dspSearchDocByVerID, Id ) 'Dim Doc As ISingleDoc If Not Doc Is Nothing Then 'Подготовим модуль для последующего автоматического освобождения Doc.UserModuleName = Doc.UniqueUserModuleName TCSApp.DeleteModuleByUserModuleName( Doc.UserModuleName ) I = Doc.ShowModal( "Наш документ" ) End If End If End Sub
А так обычно используется свойство Locate, но при работе с деревом необходимо выбрать нужную ветвь либо выбрать корень дерева и не выставить опцию показывать данные всех ветвей ShowOneTreeNodeData (при работе с архивом необходимо выбрать архив а не корень дерева).
Если можно пример работы с деревом Архива с использованием функции
ArchiveTree
Если можно пример работы с деревом Архива с использованием функции
ArchiveTree
Какой именно пример?
В Хэлпе я нашел только
Dim OCS As CSDN.OCS
Dim App As CSDN.Ocs_Application
Sub Test()
Call Login
Dim aTree As CSDN.ArchiveTree
Set aTree = App.ArchiveTree(False)
I = aTree.ShowModal("Классификатор архива документов")
Set aTree = Nothing
End Sub
Sub Login()
If OCS Is Nothing Then Set OCS = CreateObject("CSDN.OCS")
If App Is Nothing Then Set App = OCS.Login
End Sub
Но какой результат...Пользователь пощелкал по дереву архива...Выбрал нужное...И....Как получить например ID дерева, которое он выбрал и перейти в архив с позицыонированием на выбранное...
Пример поиска ноды в архиве (в других режимах проще) и создания ноды в дереве.
Sub TestATree If TCSApp.ArchiveTree( True ).ShowModal( "Выберите ветку дерева архива" )>0 Then NodeId = TCSApp.ArchiveTree( True ).DbTree.Selected.NodeId 'В обычных режимах достаточно сделать так 'Set Node =TCSApp.Archive.DbTree.DbNodeByNodeId( NodeId ) 'В Архиве дерево динамическое, поэтому только так 'Dim Node AS IDbNode Set Node = Nothing For i=0 To TCSApp.Archive.DbTree.RootNodes.Count-1 Set Node = TCSApp.Archive.DbTree.RootNodes.Item(i) For j=0 To Node.Count-1 Call Node.Item(j).Expand( False ) Next Next Set Node = TCSApp.Archive.DbTree.DbNodeByNodeId( NodeId ) If Not Node Is Nothing Then Node.Selected = True I = TCSApp.Archive.ShowModal( "Выбраная ветка дерева" ) If Not Node Is Nothing Then If TCSApp.MessageBoxAskYesNo( "", "Создать ветку", False, 2, False )=1 Then NewId = GetDbTreeNodeIdEx( TCSApp.Archive.DbTree, Node.FullPath( "" ) & "\\Тест создания", True ) I = TCSApp.Archive.ShowModal( "Созданная ветка дерева" ) End If End If End If End Sub '<doc Поиск ноды в дереве по полному пути '<par DbTree As IDbTree> '<par FullPath Полный путь> '<par AllowCreate Boolean Создавать путь если не существует (кроме корневой ноды)> '<type As Integer Идентификатор ноды. -1 Не найдена> '> Function GetDbTreeNodeIdEx( DbTree, FullPath, AllowCreate ) GetDbTreeNodeIdEx = -1 Paths = Split( CStr(FullPath), "\\" ) If Not IsArray(Paths) Then Exit Function Set PNode = Nothing 'Dim PNode as IDbNode Lvl = 1 For i=0 To DbTree.RootNodes.Count-1 Set PNode = DbTree.RootNodes.Item(i) If PNode.Text=Paths(Lvl) Then PNode.Selected = True Exit For End If Set PNode = Nothing Next If Not PNode Is Nothing Then For Lvl=2 To UBound(Paths) If Not PNode Is Nothing Then Set Node = Nothing 'Dim Node As IDbNode For I=0 To PNode.Count-1 Set Node = PNode.Item(i) If Node.Text=Paths(Lvl) Then Node.Selected = True Node.Expanded = True Exit For End If Set Node = Nothing Next If Node Is Nothing And AllowCreate Then On Error Resume Next PNode.Selected = True DbTree.CancelChanges DbTree.CreateNew DbTree.Properties("NodeText").AsString = Paths(Lvl) DbTree.SaveChangesEx If Err Then Call TCSApp.ShowDetailedErrorMessage( "Не могу создать ветку дерева классификатора", Err.Description ) Set Node = Nothing Else Set Node = DbTree.Selected End If On Error Goto 0 End If Set PNode = Node End If Next End If If Not PNode Is Nothing Then GetDbTreeNodeIdEx = PNode.NodeId End Function
Здравствуйте.
Чтобы не плодить темы, спрошу здесь. Не понимаю выскакивает ошибка в условии:
Dim Nmks 'As ISingleDoc Set Nmks = TCSApp.SingleDoc(0,Note) If Nmks Is Nothing Then Set Doc = TCSApp.CreateDoc( Notewithsuf, Name, DocType, ArchiveTreeID, WorkFlowTypes, WorkGroups, Null, Null ) end if
Система выдает ошибку:
SQL Server Error: Выполнение данной инструкции было прервано.
Конфликт инструкции INSERT с ограничением FOREIGN KEY "FK_PROJECTS_ROUTING". Конфликт произошел в базе данных "IndustriCS", таблица "dbo.ROUTING", column 'ROUTING_ID'. [MsSqlNativeError:547]
Ошибку поборол, но условие не отрабатывается:
If Nmks Is Nothing Then Set Doc = TCSApp.CreateDoc( Notewithsuf, Name, DocType, ArchiveTreeID, WorkFlowTypes, WorkGroups, Null, Null ) end if
Пишет, что Обозначение документа не уникально.
В качестве идентификатора способа обоработки (видимо WorkFlowTypes) передано что то не валидное.
Пишет, что Обозначение документа не уникально.
Ну тут видимо ответ уже в сообщении?
Пишет, что Обозначение документа не уникально.
Ну тут видимо ответ уже в сообщении?
Это понятно, но ведь должно отрабатываться условие, а по факту оно игнорируется:
Set Nmks = TCSApp.SingleDoc(0,Note)
If Nmks Is Nothing Then
Set Doc = TCSApp.CreateDoc( Notewithsuf, Name, DocType, ArchiveTreeID, WorkFlowTypes, WorkGroups, Null, Null )
end if
Ну судя по примеру кода вы ищете одно обозначение (Note), а создаете другое (Notewithsuf). Переменную одну используйте и наверное заработает все.
Был не внимателен, спасибо.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
TechnologiCS → TechnologiCS → Использование TechnologiCS API → Как через API позиционироваться на конкретный документ?