Тема: Создание папок и документов с файлами в архиве
Добрый день!
Как это сделать программно. Нужно создать много папок и документов в архиве. Желательно без GUI. Предполагаю создать консольную утилиту на C#.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
TechnologiCS → TechnologiCS → Использование TechnologiCS API → Создание папок и документов с файлами в архиве
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Добрый день!
Как это сделать программно. Нужно создать много папок и документов в архиве. Желательно без GUI. Предполагаю создать консольную утилиту на C#.
Добрый день!
Примеры на форуме где то есть (хотя поиском сразу не нашел).
Есть наш модуль импорта документов на скриптах - он в исходниках, можно его посмотреть, но лучше использовать (так как там довольно большой модуль). Однотипные документы из файлов им должно быть удобно создавать.
В 7.2 (в разработке) значительно доработан встроенный модуль импорта/экспорта документов, но это лучше на последней версии (там ошибки правились) - документация только с релизом будет. Там по факту надо dbf создать правильно.
Ну и примеры найду скину сюда.
Возможно ли создание разделов архива при помощи TechnologiCS API?
Возможно ли создание разделов архива при помощи TechnologiCS API?
Создание папки (раздела) в заданном архиве - да, возможно, при наличии прав на создание разделов в дереве архива. Вот пример функции, которая создаёт папку архива на C#:
/// <summary> /// Создание узла (папки) в дереве класификатора (архива) /// </summary> /// <param name="ATree">Дерево</param> /// <param name="AParentNodeId">Идентификатор родительского узла</param> /// <param name="ANodeName">Название создаваемого узла (папки)</param> /// <returns>Идентификатор созданного узла (папки) или -1 при неудаче</returns> private int CreateNode(IDbTree ATree, int AParentNodeId, string ANodeName) { int R = -1; if ((ATree != null) & (AParentNodeId > 0) & (ANodeName != "")) { IDbNode ParentNode = ATree.DbNodeByNodeId[AParentNodeId]; if (ParentNode != null) { ParentNode.Selected = true; (ATree as IPModule).CancelChanges(); (ATree as IPModule).CreateNew(); (ATree as IPModule).Properties["NODETEXT"].Value = ANodeName; try { (ATree as IPModule).SaveChanges(); R = ATree.Selected.NodeId; } catch { (ATree as IPModule).CancelChanges(); } ParentNode = null; } } return R; }
Такой код работает, ноды создаются.
CSDN.TCS fTCS = new CSDN.TCS(); CSDN.Tcs_Application TCSApp = (CSDN.Tcs_Application) fTCS.Login(); IDbTree tree = TCSApp.Archive.DbTree; var r = CreateNode(tree, 30000, "Node1"); Console.WriteLine(r); r = CreateNode(tree, r, "Node2"); Console.WriteLine(r); /* ROOT(30000) Node1(40001) Node2(40002) */
А почему такой код не работает?
CSDN.TCS fTCS = new CSDN.TCS(); CSDN.Tcs_Application TCSApp = (CSDN.Tcs_Application) fTCS.Login(); IDbNode Node = TCSApp.Archive.DbTree.DbNodeByNodeId[40002]; /* Необработанное исключение: System.Runtime.InteropServices.COMException: Object is no longer valid в CSDN.DbTreeClass.get_DbNodeByNodeId(Int32 NodeId) в TcsApiUsing.Program.Main(String[] args) в D:\Projects\TcsApiUsing\Program.cs:строка 23 */
В дереве архива есть какая-то особенность, прежде чем получить узел с помощью метода DbNodeByNodeId, нужно прочитать или раскрыть (метод Expand) все ветки дерева. Возможно, в последней версии TechnologiCS, достаточно будет только обновить дерево архива (метод RefreshTree), но раньше было необходимо прочитывать все узлы дерева.
Лучше, конечно, этот момент у Олега Зырянова уточнить.
В дереве архива есть какая-то особенность, прежде чем получить узел с помощью метода DbNodeByNodeId, нужно прочитать или раскрыть (метод Expand) все ветки дерева. Возможно, в последней версии TechnologiCS, достаточно будет только обновить дерево архива (метод RefreshTree), но раньше было необходимо прочитывать все узлы дерева.
Лучше, конечно, этот момент у Олега Зырянова уточнить.
В последней версии тоже нужно прочитать сначала все ветви дерева.
В Архиве (и в некоторых других режимах) дерево динамическое, нужно сделать Expand у архива (первый уровень дерева), где находится ветка.
В справке нашёл, что у IDbNode2 есть метод Expand. Но для C# интерфейса IDbNode2 нет.
Просто приведите к типу IDbNode2 либо объявите этим типом (вы же его как IDbNode объявили, он только это и показывает).
Такого типа для C# нет.
Библиотека типов у вас от другой версии или не знаю откуда. Возьмите нашу (Interop.CSDN.2.dll) либо сделайте с последней версией (хотя мы свою с последней версии всегда генерируем).
Да у меня была подключена Interop.CSDN.dll. Я её из демоверсии взял кажется.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
TechnologiCS → TechnologiCS → Использование TechnologiCS API → Создание папок и документов с файлами в архиве