Форум пользователей ПО АСКОН

Профессиональные вопросы => Программирование приложений => Тема начата: URI от 19.05.10, 15:57:26

Название: привязка файла к документу
Отправлено: URI от 19.05.10, 15:57:26
 День добрый. Пытаюсь привязать файл к документу (или зарегистрировать ,иначе говоря, в базе данных)  методом
RegistrationOfFile. Файл предварительно записывается в раб. папку пользователя и реально туда
попадает. В параметры метода задаю реквизиты дока, с которым файл вроде должен быть связан:
тип дока, уник. номер, версию. Блокирую док.  Файл железно сохраняется по указанному адресу.
Но отработав, метод в параметре v1 дает ошибку ФАЙЛ НЕ ОБНАРУЖЕН!!!

Set PLM = CreateObject("LoodsmanServerApplication.MainSystem")
    PLM.ConnectToDB Demo, v, v1
    v3 = PLM.CheckOut(PM, Number, "1", 0, v, v1)
    PLM.ConnectToDB Demo, v, v1
    PLM.ConnectToCheckOut CStr(v3), Demo, v, v1
   
    S1 = Number + " ПМ.xls"'имя файла
    S = PapkaC + S1 ' PapkaC- папка пользователя
    TWB.SaveAs S  ' сохранение отчета по пути S-записывается файл и наблюдается там
    PLM.RegistrationOfFile PM, Number, "1", 0, S1, PapkaC, v, v1
   
    PLM.SaveChanges CStr(v3), Demo, v, v1
    PLM.DisconnectCheckOut CStr(v3), Demo, v, v1
    PLM.CheckIn CStr(v3), Demo, v, v1

Убедительно прошу откликнуться!
Название: Re: привязка файла к документу
Отправлено: URI от 20.05.10, 20:01:17
Нет ответов.
Ну тогда может кто подскажет по методу API - UpFile. Он должен вроде добавлять новый файл к документу.
Есть среди входных параметорв такие:

stFileName -[in] Название файла. Может быть получено из метода методов GetInfoAboutVersion (режим 7), GetLinkedObjectsAndFiles.

stFullFilePath  - [in] Относительный путь к файлу. Это путь к файлу относительно диска из настройки "Буква рабочего диска". Может быть получено из методов GetInfoAboutVersion(режим 7), GetLinkedObjectsAndFiles.

Смотрим GetInfoAboutVersion (реж 7) -  возвращает список файлов, закрепленных за доком. Но файл - то еще не закреплен??????
И еще параметр: vaFileData - [in] Содержимое файла. Массив байт. Значение представляет собой одномерный вариантный массив (тип VT_UI1 (C++), varByte(Delphi)). Я собираюсь прицепить обычный .dot( или .xlt)??????????

Люди! Подскажите! Какими все же методами следует пользоваться для привязки файла к доку?????



Название: Re: привязка файла к документу
Отправлено: Maxagg от 21.05.10, 05:30:46
Рабочий модуль добавления файла
И еще, есть специальный подраздел, и не удивляйтесь что вам не отвечают

Если незнаете что такое Tversion, подключите модули
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, PICutil,PIClasses,DBClient, DB, ADODB, XPMan, Gauges,
  Grids, Buttons, ExtCtrls,comobj, ComCtrls,shellapi;

type
  TFmmain = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
   st,sel:integer;
   bdname:string;
   folder:string;
  // function Count:double;

    { Public declarations }
  end;

var
  Fmmain: TFmmain;

implementation

{$R *.dfm}
var
ver0,ver1:Tversion;
dat0,dat1:Tclientdataset;

procedure CopyFile(SourceFileName, TargetFileName: string);
var
  S, T : TFileStream;
begin
  S := TFileStream.Create(sourcefilename, fmOpenRead );
  try
    T := TFileStream.Create(targetfilename, fmOpenWrite or fmCreate);
    try
      T.CopyFrom(S, S.Size ) ;
      FileSetDate(T.Handle, FileGetDate(S.Handle));
    finally
      T.Free;
    end;
  finally
    S.Free;
  end;
end;

procedure TFmmain.Button1Click(Sender: TObject);
var
  i,n:integer;
  fnot,fn:string;
  vfolder:Tversion;
  dfolder:Tclientdataset;
  sss1,sss2:string;
begin
//поиск рабочей папки
  vfolder:=Tversion.Create;
  dfolder:=Tclientdataset.create(nil);
  dfolder.Data:=vfolder.GetInfoAboutCurrentUser;
  dfolder.First;
  folder:=dfolder.Fields.fieldbyname('_FILEDIR').AsString;
  dfolder.free;
  vfolder.free;

//открываем файл для добавления
  opendialog1.Execute;
  fn:=opendialog1.Filename;
  for i:=1 to length(fn) do
  if fn='\'then n:=i;
  fnot:=copy(fn,n+1,length(fn));
//Указатель на использование выбранного объекта
  ver0:=Tversion.FromIDVersion(sel);
  sss1:=fmmain.bdname;
  sss2:='';
  checkout(ver0,sss1,sss2);
//закидываем
  CopyFile(Pchar(fn),Pchar(folder+'\'+fnot));
  ver0.RegistrationOfFile(fnot,'');
  checkin(ver0,sss1,sss2);
  ver0.Free; 
end;

end.
Название: Re: привязка файла к документу
Отправлено: Maxagg от 21.05.10, 05:33:30
Вот модули