Тема: Создание папок и документов с файлами в архиве

Добрый день!
Как это сделать программно. Нужно создать много папок и  документов в архиве. Желательно без GUI. Предполагаю создать консольную утилиту на C#.

Re: Создание папок и документов с файлами в архиве

Добрый день!

Примеры на форуме где то есть (хотя поиском сразу не нашел).
Есть наш модуль импорта документов на скриптах - он в исходниках, можно его посмотреть, но лучше использовать (так как там довольно большой модуль). Однотипные документы из файлов им должно быть удобно создавать.
В 7.2 (в разработке) значительно доработан встроенный модуль импорта/экспорта документов, но это лучше на последней версии (там ошибки правились) -  документация только с релизом будет. Там по факту надо dbf создать правильно.
Ну и примеры найду скину сюда.

Спасибо сказали: q41HCxSH0bAz1Reugyc01

Re: Создание папок и документов с файлами в архиве

Возможно ли создание разделов архива при помощи TechnologiCS API?

Re: Создание папок и документов с файлами в архиве

q41HCxSH0bAz1Reugyc0 пишет:

Возможно ли создание разделов архива при помощи 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;
}
Спасибо сказали: q41HCxSH0bAz1Reugyc01

Re: Создание папок и документов с файлами в архиве

Такой код работает, ноды создаются.

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
*/

Re: Создание папок и документов с файлами в архиве

В дереве архива есть какая-то особенность, прежде чем получить узел с помощью метода DbNodeByNodeId, нужно прочитать или раскрыть (метод Expand) все ветки дерева. Возможно, в последней версии TechnologiCS, достаточно   будет только обновить дерево архива (метод RefreshTree), но раньше было необходимо прочитывать все узлы дерева.
Лучше, конечно, этот момент у Олега Зырянова уточнить.

Спасибо сказали: q41HCxSH0bAz1Reugyc01

Re: Создание папок и документов с файлами в архиве

Дмитрий Гамий пишет:

В дереве архива есть какая-то особенность, прежде чем получить узел с помощью метода DbNodeByNodeId, нужно прочитать или раскрыть (метод Expand) все ветки дерева. Возможно, в последней версии TechnologiCS, достаточно   будет только обновить дерево архива (метод RefreshTree), но раньше было необходимо прочитывать все узлы дерева.
Лучше, конечно, этот момент у Олега Зырянова уточнить.

В последней версии тоже нужно прочитать сначала все ветви дерева.

Re: Создание папок и документов с файлами в архиве

В Архиве (и в некоторых других режимах) дерево динамическое, нужно сделать Expand у архива (первый уровень дерева), где  находится ветка.

Re: Создание папок и документов с файлами в архиве

В справке нашёл, что у IDbNode2 есть метод Expand. Но для C# интерфейса IDbNode2 нет.

Re: Создание папок и документов с файлами в архиве

Просто приведите к типу IDbNode2 либо объявите этим типом (вы же его как IDbNode объявили, он только это и показывает).

Re: Создание папок и документов с файлами в архиве

Такого типа  для C# нет.

Post's attachments

2.PNG 5.9 Кб, файл не был скачан. 

You don't have the permssions to download the attachments of this post.

Re: Создание папок и документов с файлами в архиве

Библиотека типов у вас от другой версии или не знаю откуда. Возьмите нашу (Interop.CSDN.2.dll) либо сделайте с последней версией (хотя мы свою с последней версии всегда генерируем).

Спасибо сказали: q41HCxSH0bAz1Reugyc01

Re: Создание папок и документов с файлами в архиве

Да у меня была подключена Interop.CSDN.dll. Я её из демоверсии взял кажется.