• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Запуск плагина

Автор Александр Волков, 01.04.15, 09:26:27

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

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

Александр Волков

Здравствуйте.
Вопрос первый: как запустить плагин в Лоцмане так, чтобы в него можно было перетащить объект из дерева? Чтобы было так, как в поиске во вкладке "Контекст поиска".
Пробовал запустить плагин в немодальном режиме, он запускается, но пропадает и не отображается.

Вопрос второй: как организовать цикл по всей базе данных? Я могу получить только объекты, связанные с выбранным (или вниз, или вверх по дереву). Можно ли определить все корневые объекты базы данных, а от них я бы уже построил дерево вложенных в них объектов?

Manuylov

на будущее рекомендую создавать на каждый вопрос отдельную тему.

1й вопрос тоже интересует

по 2му вопросу можно использовать GetProjectListEx
+ Благодарностей: 1

Александр Волков

Спасибо, за функцию.

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

Danila

А вы про какой-то определенный плагин от АСКОНа имеете в виду, или собственный?

Какая версия Лоцмана у вас?

К сожалению, в своей версии мы не используем данные механизмы DragDrop (у нас Лоцман v10), но в будущем было бы интересно также оценить технические возможности.

В описании API\SDK для вашей Лоцмана нет ничего с описанием Drag\Drop?

Manuylov

основная проблема не в DragDrop, а в возможности вызова окна плагина в немодальном режиме.

Александр Волков

Я говорю про собственный плагин.
У нас Лоцман 2013.

Проблема как в немодальном режиме, так и в DragDrop. Но если такой возможности в Лоцман 2013 нет, тогда вопроса нет.

Александр Волков

В описании SDK я ничего не нашел.

Manuylov

DragDrop в модальном режиме из окна владельца в принципе невозможен.

Александр Волков

Я понимаю. Я и имею в виду, что для начала нужно в немодальном режиме запустить плагин, а потом DragDrop делать.

z-arthur

Чтобы окно было немодальным и при этом он не скрывался, нужно задать свойство формы PopupMode=pmAuto.
Следующий шаг - реализовать обработку событий Drag&Drop.
Когда начинается процесс Drag&Drop, ЛОЦМАН создает ярлык в папке "C:\Users\zakirov\AppData\Local\Temp" примерно со следующей ссылкой:
ask:Loodsman.URL?Action=Navigate,params=NTF8RE1IfDB8MjQ4Ng==

Тут, на сколько я помню, в части "NTF8RE1IfDB8MjQ4Ng" зашифрован путь к перетаскиваемому объекту (где-то у меня была функция для расшифровки).

Вот примерные наброски кода формы, которая ловит Drag&Drop

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls;

type
  TForm1 = class(TForm)
    lv1: TListView;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    procedure DropFiles(var msg: TWMDropFiles );
    procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses
  ShellAPI;

{$R *.dfm}

procedure TForm1.DropFiles(var msg: TWMDropFiles);
var
  i, fileCount: integer;
  fileName: array[0..MAX_PATH] of char;
begin
  fileCount:=DragQueryFile(msg.Drop, $FFFFFFFF, fileName, MAX_PATH);
  for i := 0 to fileCount - 1 do
  begin
    DragQueryFile(msg.Drop, i, fileName, MAX_PATH);
    ShowMessage(fileName);
  end;
  DragFinish(msg.Drop);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(Handle, True);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  DragAcceptFiles(Handle, false);
end;

procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
begin
  case Msg.Msg of
    WM_DROPFILES:
      DropFiles(Msg);
  end;
end;

end.
+ Благодарностей: 1

z-arthur

Строка NTF8RE1IfDB8MjQ4Ng - это BASE64 закодированная строка.
Чтобы ее раскодировать, можно воспользоваться функцией:
DecodeString('NTF8RE1IfDB8MjQ4Ng')
из модуля EncdDecd.
Раскодированная строка имеет вид
51|DMH|0|2486=
где
51 - идентификатор чекаута
DMH - название БД
0 - точно не знаю, идентификатор чего-то
2486 - идентификатор искомого объекта

Danila

Цитата: z-arthur от 01.04.15, 11:32:02
Строка NTF8RE1IfDB8MjQ4Ng - это BASE64 закодированная строка.
Чтобы ее раскодировать, можно воспользоваться функцией:
DecodeString('NTF8RE1IfDB8MjQ4Ng')
из модуля EncdDecd.
Раскодированная строка имеет вид
51|DMH|0|2486=
где
51 - идентификатор чекаута
DMH - название БД
0 - точно не знаю, идентификатор чего-то
2486 - идентификатор искомого объекта

0 - идентификатор родителя, по крайней мере раньше был

Danila

хотелось бы добавить, что в случае если ссылка создана на файл, то еще добавляется имя файла после |

Например так: 582013|ПРИМА|597447|597455|ЛНВК.464956.004 Комплект упаковки  изм.6.spw

Полный вид ссылки при этом: ask:Loodsman.URL?Action=Navigate,params=NTgyMDEzfM/QyMzAfDU5NzQ0N3w1OTc0NTV8y83Cyi40NjQ5NTYuMDA0IMru7O/r5eryIPPv4Oru4uroICDo5+wuNi5zcHc=

Сам механизм работы через зарегистрированную библиотеку ask.dll, находящуюся тут: C:\Program Files (x86)\Common Files\ASCON Shared\Loodsman\

Если перестанет вызываться ссылка, достаточно заново зарегистрировать библиотеку через regsvr32.

Manuylov

Цитата: z-arthur от 01.04.15, 11:08:57
Чтобы окно было немодальным и при этом он не скрывался, нужно задать свойство формы PopupMode=pmAuto.
Да уж, жаль в Делфи 7 нету такого.

LorD_LeLiK

Хотелось бы уточнить по поводу форм в не модальном режиме. Если после вызова плагина пытаться зайти сервис -> плагины лоцман падает (У меня стоит Лоцман ПГС 2014). Кто встречался с такой проблемой? (как понимаю память не освобождаеться)
Вызов функции в модуле Plagin:

procedure TPlugin.ShowForm;
begin
  frm := TfrmForm1.Create(nil, FAppProvider);
    frm.Show;
  end;
end;

frm - глобальная переменная,
А в самой форме, на FormDestroy:

FreeAndNil(plugin.frm);


Chaa

Цитата: LorD_LeLiK от 15.12.15, 15:19:26
А в самой форме, на FormDestroy:
FreeAndNil(plugin.frm);
FormDestroy уже вызывается из деструктора формы. Удаление формы во второй раз ни к чему хорошему не приведет.
Должно быть как-то так:

procedure TfrmForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    Action := caFree;
    plugin.frm := nil;
end;
+ Благодарностей: 1