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

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

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

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

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

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

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

Работа с Лоцман-клиент.

Автор Sergey, 15.05.10, 08:44:50

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

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

Sergey

Добрый день.

Может быть кто-нибудь сталкивался с подобной задачей. Необходимо запустить Лоцман-клиент из стороннего приложения, так что бы пользователь мог указать объект в дереве из любой базы и затем данные об объекте и базе передались обратно в стороннее приложение. Если есть пример, буду очень признателен.
Заранее благодарю.

Доп. инф.
Лоцман V10

EVD


Sergey


Sergey

А есть ли у кого-нибудь описание API Лоцман-клиент? Если есть, поделитесь пожалуйста.

PS: В папке SDK есть только описание API сервера приложений.

EVD

Может поможет, есть API для МиС
http://download.ascon.ru/public/MiS/MiS_API.zip

Я его использовал, когда подключался к МиС. То же самое оказалось и для Лоцмана, код почти не переписывал, изменилось только имя класса для CreateObject
Таким же способом выбирается и из Вертикаль-справочников.

Sergey

Документация по МиС у меня есть, но все равно спасибо. С запуском и выбором объекта из Лоцман-справочника я разобрался из вашего примера. Но вот все таки хотелось бы, если она конечно, вообще, существует, получить документацию по API Лоцман-клиент.

teplinskiy

Цитата: Sergey от 19.05.10, 05:15:16
...хотелось бы, если она конечно, вообще, существует, получить документацию по API Лоцман-клиент.
API Лоцман-клиент как такового не существует.
Но можно попробовать обратиться к нему по базовому протоколу:

var
  vaLN: OleVariant;
...
begin 
  ...
  vaLN := CreateOleObject('Loodsman.BOLoodsmanSimpleProvider');
  ...
end;

это кусок из BOSimple_TLB.pas:

// *********************************************************************//
// Interface: IBOSimpleProvider
// Flags:     (4416) Dual OleAutomation Dispatchable
// GUID:      {B57C3F55-8C78-437F-AEFD-911FC1A3617A}
// *********************************************************************//
  IBOSimpleProvider = interface(IDispatch)
    ['{B57C3F55-8C78-437F-AEFD-911FC1A3617A}']
    function  Get_Request: IBORequest; safecall;
    procedure Refresh; safecall;
    function  Get_SourceID: WideString; safecall;
    procedure ExecuteRequest; safecall;
    function  Get_Response: IBOResponse; safecall;
    function  GetObject(const ClassID: WideString; const ObjectID: WideString; Options: Integer): IBOObject; safecall;
    function  GetObjects(const ClassID: WideString; Options: Integer): IBOObjectCollection; safecall;
    function  Select(Modal: WordBool; var Location: WideString; ClientWindow: Integer): WordBool; safecall;
    procedure GetObjectInfo(const Location: WideString; var ClassID: WideString;
                            var ObjectID: WideString); safecall;
    procedure RegisterClient(const aName: WideString); safecall;
    procedure UnRegisterClient; safecall;
    function  Get_ClientID: Integer; safecall;
    function  Get_Status: Integer; safecall;
    property Request: IBORequest read Get_Request;
    property SourceID: WideString read Get_SourceID;
    property Response: IBOResponse read Get_Response;
    property ClientID: Integer read Get_ClientID;
    property Status: Integer read Get_Status;
  end;

Sergey

"Такой же" кусок я получил и из "loodsman.tlb", но если вышеуказанное еще хоть как-то описано, то на то что я привел ниже описания я не нашел. Хотя похоже его и правда нет. Используя "интуицию и научный тык" удалось немного разобраться с методами IDataSet, но видимо прийдется и дальше так работать...

вырезка из "loodsman.tlh"

...
struct __declspec(uuid("60446488-9d7b-4776-866e-7ee647f72972"))
IDataSet : IDispatch
{
    // Raw methods provided by interface
   
      virtual HRESULT __stdcall First ( ) = 0;
      virtual HRESULT __stdcall Last ( ) = 0;
      virtual HRESULT __stdcall Next ( ) = 0;
      virtual HRESULT __stdcall Prior ( ) = 0;
      virtual HRESULT __stdcall get_CurrentRecord (
        /*[out,retval]*/ long * Value ) = 0;
      virtual HRESULT __stdcall put_CurrentRecord (
        /*[in]*/ long Value ) = 0;
      virtual HRESULT __stdcall get_RecordCount (
        /*[out,retval]*/ long * Value ) = 0;
      virtual HRESULT __stdcall get_FieldValue (
        /*[in]*/ BSTR Name,
        /*[out,retval]*/ VARIANT * Value ) = 0;
      virtual HRESULT __stdcall put_FieldValue (
        /*[in]*/ BSTR Name,
        /*[in]*/ VARIANT Value ) = 0;
      virtual HRESULT __stdcall get_FieldCount (
        /*[out,retval]*/ long * Value ) = 0;
      virtual HRESULT __stdcall get_FieldName (
        /*[in]*/ long Index,
        /*[out,retval]*/ BSTR * Value ) = 0;
      virtual HRESULT __stdcall get_Filter (
        /*[out,retval]*/ BSTR * Value ) = 0;
      virtual HRESULT __stdcall put_Filter (
        /*[in]*/ BSTR Value ) = 0;
      virtual HRESULT __stdcall get_Filtered (
        /*[out,retval]*/ VARIANT_BOOL * Value ) = 0;
      virtual HRESULT __stdcall put_Filtered (
        /*[in]*/ VARIANT_BOOL Value ) = 0;
      virtual HRESULT __stdcall Append ( ) = 0;
      virtual HRESULT __stdcall Delete ( ) = 0;
      virtual HRESULT __stdcall Edit ( ) = 0;
      virtual HRESULT __stdcall Post ( ) = 0;
      virtual HRESULT __stdcall Cancel ( ) = 0;
      virtual HRESULT __stdcall Insert ( ) = 0;
      virtual HRESULT __stdcall MoveBy (
        /*[in]*/ long Distance,
        /*[out,retval]*/ long * Result ) = 0;
      virtual HRESULT __stdcall IsEmpty (
        /*[out,retval]*/ VARIANT_BOOL * Value ) = 0;
      virtual HRESULT __stdcall Locate (
        /*[in]*/ BSTR KeyFields,
        /*[in]*/ VARIANT KeyValues,
        /*[in]*/ VARIANT_BOOL CaseSensitive,
        /*[in]*/ VARIANT_BOOL PartialKey,
        /*[out,retval]*/ VARIANT_BOOL * Value ) = 0;
      virtual HRESULT __stdcall get_DATA (
        /*[out,retval]*/ VARIANT * Value ) = 0;
      virtual HRESULT __stdcall put_DATA (
        /*[in]*/ VARIANT Value ) = 0;
      virtual HRESULT __stdcall get_Eof (
        /*[out,retval]*/ VARIANT_BOOL * Value ) = 0;
      virtual HRESULT __stdcall get_Bof (
        /*[out,retval]*/ VARIANT_BOOL * Value ) = 0;
      virtual HRESULT __stdcall get_IndexFieldNames (
        /*[out,retval]*/ BSTR * Value ) = 0;
      virtual HRESULT __stdcall put_IndexFieldNames (
        /*[in]*/ BSTR Value ) = 0;
};

struct __declspec(uuid("7779a0a3-1bf6-45c8-a536-21ad4b97e46d"))
IPluginCall : IDispatch
{
    // Raw methods provided by interface

      virtual HRESULT __stdcall RunMethod (
        /*[in]*/ BSTR stMetod,
        /*[in]*/ VARIANT vaParams,
        /*[out,retval]*/ VARIANT * vaResult ) = 0;
      virtual HRESULT __stdcall GetDataSet (
        /*[in]*/ BSTR stMetod,
        /*[in]*/ VARIANT vaParams,
        /*[out,retval]*/ struct IDataSet * * vaResult ) = 0;
      virtual HRESULT __stdcall get_DBName (
        /*[out,retval]*/ BSTR * Value ) = 0;
      virtual HRESULT __stdcall get_CheckOut (
        /*[out,retval]*/ long * Value ) = 0;
      virtual HRESULT __stdcall get_AppHandle (
        /*[out,retval]*/ OLE_HANDLE * Value ) = 0;
      virtual HRESULT __stdcall get_ClientHandle (
        /*[out,retval]*/ OLE_HANDLE * Value ) = 0;
      virtual HRESULT __stdcall get_IdVersion (
        /*[out,retval]*/ long * Value ) = 0;
      virtual HRESULT __stdcall get_stType (
        /*[out,retval]*/ BSTR * Value ) = 0;
      virtual HRESULT __stdcall get_stProduct (
        /*[out,retval]*/ BSTR * Value ) = 0;
      virtual HRESULT __stdcall get_stVersion (
        /*[out,retval]*/ BSTR * Value ) = 0;
      virtual HRESULT __stdcall get_IdParent (
        /*[out,retval]*/ long * Value ) = 0;
      virtual HRESULT __stdcall get_stParentType (
        /*[out,retval]*/ BSTR * Value ) = 0;
      virtual HRESULT __stdcall get_stParentProduct (
        /*[out,retval]*/ BSTR * Value ) = 0;
      virtual HRESULT __stdcall get_stParentVersion (
        /*[out,retval]*/ BSTR * Value ) = 0;
      virtual HRESULT __stdcall get_IdLink (
        /*[out,retval]*/ long * Value ) = 0;
      virtual HRESULT __stdcall get_SelectedParent (
        /*[out,retval]*/ VARIANT_BOOL * Value ) = 0;
};
...

YorikER

Если честно, то я не понял, почему Вы для своих задач не хотите использовать методы API сервера приложений... Дерево объектов, аналогичное дереву ЛОЦМАН-Клиента, Вы можете представить пользователю в окне своего приложения и выбирайте и читайте информацию, как хотите, хоть вдоль, хоть поперек... http://www.infnt.ru/VLDelphi/VLDelphiMain.html - здесь я потихоньку описываю, как в Delphi написать свое клиентское приложение для ЛОЦМАНа... Может Вам поможет... Буду искренне рад...

Sergey

Я их и использую. Просто хотелось еще узнать и о возможностях клиентской части.

За ссылку, спасибо. Хоть я и пишу на C++, но дополнительная информация никогда лишней не бывает.

Sergey

Продолжаю тему о выборе объекта из дерева в Лоцман-е.

А как ограничить возможность выбора объекта, например по типу?