Как обновить в ЛОЦМАН

Автор Daiver, 18.11.09, 08:17:18

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Daiver

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

Подскажите как сделать программно:
1. обновление всех проектов в ЛОЦМАН
2. закрытие окна ЛОЦМАН и открытие окна ЛОЦМАН

PS код

  //определение владельца для новых форм (окон)
  Application.Handle := ParentHandle;
   AssignRunMethod(RunMethod);

  //Создать форму
  dlgMain  := TForm1.Create(Application);
  try
    //Передать в форму выбранный в дереве объект
      dlgMain.ParentVersion:=PDMVersion;
      PDMVersionPapka := TVersion.FromIDVersion(2895); {2895} {5310}

    if dlgMain.ShowModal = mrOk then begin
      try
        //если выполняется из режима БД, то взять в CheckOut и присоединиться к нему
          begin
         stCO := RunMethod('CheckOut', [PDMVersionPapka.stType, PDMVersionPapka.stProduct, PDMVersionPapka.stVersion, 1]);
         RunMethod('ConnectToCheckOut',[stCO, DataBaseName]);

         cdsAttr := TClientDataSet.Create(nil);
         cdsAttr.Create(nil);
         cdsAttr.Data := PDMVersionPapka.GetAttributes;
         if cdsAttr.FieldByName('_NAME').AsString='Номер изменения'  then nameatr:=cdsAttr.FieldByName('_VALUE').AsInteger;
         nameatr:=nameatr+1;
         nameatrstr:=IntToStr(nameatr);
         cdsAttr.Free;
         RunMethod('UpAttrValue',[PDMVersionPapka.stType, PDMVersionPapka.stProduct, PDMVersionPapka.stVersion, 'Номер изменения', nameatr]);
        end;

        try
          //присоединить к выбраному в дереве объекту-родителю (PDMVersion)
          //по связи stLink новый объект типа stType,
          //c ключевым атрибутом stProduct, в состоянии stState,
          inNewLinkId := RunMethod('InsertObject', [
             PDMVersionPapka.stType,PDMVersionPapka.stProduct, PDMVersionPapka.stVersion,
            tipizm,nameatrstr, #32, 'Состоит из ...', 'Проектирование', false]);
{            PostMessage(ParentHandle,WM_REFRESHPARENT,0,0);
            PostMessage(ClientHandle,WM_REFRESHPARENT,0,0);}

          if inNewLinkId<>0 then begin
            with TClientDataSet.Create(nil) do
            try
              //определение id нового объекта через id созданой связи
              {Data := RunMethod('GetInfoAboutLink', [inNewLinkId, 2]);
              inNewId := FieldByName('_ID_CHILD').AsInteger;}
            inNewIdLink := RunMethod('UpLink',[
            tipizm, nameatrstr, 1,
            PDMVersion.stType,    PDMVersion.stProduct,    PDMVersion.stVersion,
            0,1,1,'',false, 'Касается']);

RunMethod('UpAttrValue',[tipizm, nameatrstr, 1, 'Дата выпуска', dlgMain.DateTimePicker1.Date ]);
RunMethod('UpAttrValue',[tipizm, nameatrstr, 1, 'Причина изменения', dlgMain.ComboBox1.Text]);
RunMethod('UpAttrValue',[tipizm, nameatrstr, 1, 'Составил', dlgMain.Label8.Caption]);
RunMethod('UpAttrValue',[tipizm, nameatrstr, 1, 'Количество листов', strtoint(dlgMain.Edit3.Text)]);
RunMethod('UpAttrValue',[tipizm, nameatrstr, 1, 'Дополнительная информация', dlgMain.Edit4.Text]);
RunMethod('UpAttrValue',[tipizm, nameatrstr, 1, 'Изменение касается',  dlgMain.ParentVersion.stProduct]);
            finally
              Free;
            end;

            //обновить объект-родитель в дереве
            PostMessage(ParentHandle,WM_REFRESHPROJECTLIST,0,0);
            showmessage('Создано!');
            //перейти в дереве на созданный объект
{            PostMessage(ParentHandle,WM_REFRESHPROJECTLIST,0,0);
            PostMessage(ClientHandle,WM_GOTOCHILD,inNewLinkId,0);}
          end else
            ShowMessage('Объект Не создан !!!');

        finally
          //если автоматически выполнялся CheckOut, то отсоединиться и принять изменения в БД
          if trim(stCheckOut)='' then
          begin
            RunMethod('DisconnectCheckOut', [stCO, DataBaseName]);
            RunMethod('CheckIn', [stCO, DataBaseName]);
          end;
        end;
       
      except// Отсловим исключение возникающее при работе с ЛОЦМАН:PLM
        on E: Exception do
        begin
          MessageDlg(E.Message, mtError, [mbOK], 0);
           dlgMain.Close;
          Exit
        end;
      end;
    end;
  finally
     dlgMain.Free;
  end;
  Application.Handle := 0; //сброс AOwner, если не сделать будет сворачивать клиентское окно
end;




AI

Попробуйте вместо .Free использовать FreeAndNil