Re: Работа с файловом составом

Как удалить физически файлы на диски для документа в АПИ.
Я добавляю командой Files.AddFile( OpenDialog.Files[i], -1 );.
Как заблокировать кнопки ввода, изменения и удаления при использовании Files.ShowModal['...'] или есть другая возможность просмотра файлового состава.

Re: Работа с файловом составом

Как удалить физически файлы на диски для документа в АПИ.
Я добавляю командой Files.AddFile( OpenDialog.Files[i], -1 );.

Ну раз вы сами файо добавляете, вы уж сами егои удаляйте. Мы это делать никак не можем. Мы следим только за файлами которые мы выгружаем (и то через АПИ вы и эти проблемы по большой части сами решать будете, в зависимости от способа работы).


Как заблокировать кнопки ввода, изменения и удаления при использовании Files.ShowModal['...'] или есть другая возможность просмотра файлового состава.

Ну вообще-то никак - есть права можешь делать, нет - нельзя. Если есть какая то серьезная потребность в этом - пишите будем разбираться.

Re: Работа с файловом составом

Цитата:
[color=red;](и то через АПИ вы [/color]
Файл я добавляю через АПИ.

Re: Работа с файловом составом

Это понятно. Но мы же не можем знать нужен вам этот файл или нет? Если вы выгрузите документ из OutdoCS-а и потом его закроете - мы дожны удалить файлы с диска. Ну а удаление в данном случае с нашей стороны будет сильно некорректно.

Re: Работа с файловом составом

А как у Вас Т-CS происходить при удалении версии или документа. Файлы, хранящиеся на томе и привязанные к документу, так же не удаляются?

Вопрос.

В АПИ можно создать новую версию документа? Если да, то как.

Re: Работа с файловом составом

А как у Вас Т-CS происходить при удалении версии или документа. Файлы, хранящиеся на томе и привязанные к документу, так же не удаляются?

Мы храним все файлы в файловом хранилище, к которому никто не может иметь доступ кроме как через нашу программу (ну если вы конечyо администрируете правильно). Ели вы удаляете документ (точнее версию) в нашей программе, в случае успешного удаления идет попытка удалить файлы этой версии на файловом сервере. Если удаление файлов произошло неудачно (например файловый сервер в данный момент не доступен) то вы можете удалить тела позже, выполнив операцию сборка мусора в программе Администратор. Подробнее смотрите в https://forum.technologics.ru/docs-hz/TCS_295/XX323.htm



В АПИ можно создать новую версию документа? Если да, то как.

Прямого способа к сожалению пока нет.  Но если очень нужно, можно сделать это пока вот так

  Archiv.ActionList.ActionByName( "AddNewVerAction").Execute;

Но правда следует обязательно добавить код по проверке на существование такой команды (причины описаны в программе исследования объектов) или обработать ошибку на ее отсутвие.

please-change-link

Re: Работа с файловом составом

[color=red;]"AddNewVerAction"[/color]

У меня нет такой команды! Как быть?
Заранее спасибо.

Re: Работа с файловом составом

А у какого модуля (интерфейса)?

Re: Работа с файловом составом

Нашел!!!

Re: Работа с файловом составом

Отлично. Теперь насчет файла. Есть у DocFiles такая функция 

AddFileEx(const FileName: WideString; Flags: Integer; FileTypeID: Integer); 

для него есть соответсвующию enum EnumFileOptions, в котором есть флаг ffOverwrite, установка которого означает заменить файл, если существует. 
Данная функция работает на текущую (выбранную)  папку DocFiles

Re: Работа с файловом составом

Я наверняка Вас «задолбал». Приношу извинения!

Я все на счет версий документа. То, что Вы предложили раннее. Не очень то устраивает, или я делаю не так. Дело в том, что добавление версии идёт через папку пользователя. А если необходимый документ не лежит в папках?

Я делаю так:
MyDocums :=TcsApp.Folders;
MyDocums.ShowModal('...');
MyDocums.ActionList.ActionByName[ 'AddNewVerAction'].Execute;

Как всё тоже сделать через ISingleDoc.

Как в АПИ можно вызвать форму просмотра версий на экран, если я нахожусь в Архиве?

Спасибо.

Re: Работа с файловом составом

на счет версий документа.

Все нормально, и делаете вы все правильно. Дело в том что АПИ только развивается (приоткрыта только часть - а сколько еще описывать).

Есть два пути - первый к которому следует стремиться - это работа через именованные свойства, которые мы будем стараться максимально поддерживать от версии к версии. Но открыть, описать и поддерживать все свойства сразу - слишком трудоемкое занятие. Поэтому упор делает на самые требуемые в настоящее время объекты и там в первую очередь открываются необходимые объекты. В идеале конечно нужно прямая функиця создать версию, которой сейчас просто нет. И как только она появится мы обязательно отметим это в примерах и на форуме в нужных темах.

И второй способ - более универсальный (дает способ ко многим видимым в настоящее вермя объектам ТКС) но не поддерживаемый( изменяемый отверсии к версии) - это работа через ChildModules и ActionList. Тут есть небольшая вероятность что их имена могут измениться, еще больше вероятность что свойства полученных через них объектов в новой версии изменятся. Но зато этот способ дает возможность пользоваться еще не открытыми (не описанными через Properties ) объектами. Что в данном случае и делается.

С документами можно работать как через архив (Archive), так и через папки (Folders). При чем работа с ними одинакова, и состав свойств тоже в большинстве своем совпадает).

Однако работать с уже известным документом конечно же лучше через ISingleDoc. Но команды созадть версию у него нет. Вот как следует поступить в данном случае (все это можно узнать зная сам ТКС и используя программу исследования объектов).

Распишу прямо здесь. Запускаю программу, и выбираю докуемнт по обозначению, ввожу обозначение докуменат и получаю его вид (точно такое же изображение вы конечно же можете получить и у себя в программе)
[img=Изображение]viewtopic.php-201_files/image_00007.htm[/img]

нам нужна команда создать новую версию - смотрим на закладке Dmodule -> ActionList такую команду (можно поискать ее на экране на форме отображаемой - если она есть на экране, то она в большинстве случаев должна быть и в списке). Такой команды нет. Идем далее.
В первую очередь изучаем состав свойств - свойства версии документа у него нет. Переходим на закладку DModule->ChildModules и смотрим список зависимых объектов (тут к сожалению сразу видно ошибочку - в Caption написано IDModule - хотя надо бы вывести русское название). Видим там зависимый объект PrjVerVersions
[img=Изображение]viewtopic.php-201_files/image_00008.htm[/img]

- это как раз список версия документа. Жмем кнопку показать и видим новое окно с версиями документа. Здесь на экране мы уже видим команду создать новую версию документа - и ищем теперь ее в спиcке. [img=Изображение]viewtopic.php-201_files/image_00009.htm[/img]

Находим ее - AddNewVerAction вот ее название, нажимаем Execute чтобы увидеть результат выполнения команды (обратите внимание что она не всегда доступна - Enabled=False). Все эти формы можно конечно же отобразить и у вас.

Re: Работа с файловом составом

Необходимо узнать местонахождение документа в архиве.

var Sketch : ISingleDoc;
    Archiv : IArchive;
    Node : DbNode;
    Tree : String;
    Sketch_ID : Integer;

begin

 Sketch := TCS_App.SingleDoc[ CSDN_TLB.dspSearchDocByDocID, Sketch_ID ];
 Archiv := TCS_App.Archive;
 Node := Archiv.DbTree.DbNodeByNodeId[Integer(Pointer(Sketch.Properties['TREE_ID'].AsInteger))];
 Tree := Node.FullPath['\\'];

end;

Возникает ошибка 'Object is no longer Valid.'

Re: Работа с файловом составом

Ну это скорее наш недочет, подумаем как с ним быть. А пока добавьте вот такой код.


function  FullReadNode( Node: DbNode);
var
 i: Integer;
begin
  for i:=0 to Node.Count-1 do FullReadNode( Node.Item[i] );
end

function  FullReadTree( DbTree: DBTree);
var
 i: Integer;
begin
  for i:=0 to DbTree.RootNodes.Count-1 do FullReadNode(DbTree.RootNodes.Item[i] );   
end

и вызовите функцию FullReadTree после строки   

Archiv := TCS_App.Archive; 
FullReadTree( Archiv.DbTree);

Это достаточно сделать один раз, или после каждого RefreshTree.

Re: Работа с файловом составом

Спасибо. Всё заработало.