Текущее время: Пн, июл 28 2025, 20:15

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Создание объекта как удалённого сервера
СообщениеДобавлено: Чт, сен 25 2008, 11:51 
Гость
Привет всем.

Есть задача - сабж.


Надо подключиться к COM+ дать свои входные данные и получить ответ.

Можно ли вообще это реализовать ?


Есть прога на дельфи, как подключаться:
Code:

{Функциия для создания обьекта как удаленного сервера}
function CreateRemoteServer(const MachineName: WideString ): RailTariff_tlb.IApplication;
var
  MQI:              TMultiQI;
  ServerInfo:       TCoServerInfo;
  IID_IAppliction:  TGuid;
  Flags:            DWORD;
  ClassID:          TGUID;
  hr:               HRESULT;
begin
  ClassID:=Railtariff_tlb.CLASS_Application;
  FillChar(ServerInfo, sizeof(ServerInfo), 0);
  ServerInfo.pwszName := PWideChar(MachineName);
  IID_IAppliction := RailTariff_tlb.IApplication;
  Flags := CLSCTX_REMOTE_SERVER;

  {  Запрос интерфейса IID_IAppliction у обьекта CLASS_Application}
  MQI.IID := @IID_IAppliction;
  MQI.itf := nil;
  MQI.hr := 0;
  hr:=CoCreateInstanceEx(ClassID, nil, Flags, @ServerInfo, 1, @MQI);
  OleCheck(hr);
  OleCheck(MQI.HR);
  Result := MQI.itf as RailTariff_tlb.IApplication;
end;


Не подскажете как это преобразовать в САПе? Хотя бы куда первый взгляд кинуть...


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 25 2008, 12:09 
Гость
Нашла http://help.sap.com/saphelp_470/helpdat ... ameset.htm

изучаю, но пока грустно... :(


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 25 2008, 15:23 
Гость
Есть вариант реализации через EXCEL.

Выгружаю в EXCEL-файл. Запускаю скрипт. Закачиваю обратно результат.
Но не хочется.

Мне бы код для примера какой-нибудь...


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 25 2008, 15:43 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
Если объект нормально заточен как COM/ActiveX, то можно попробовать к нему обратится напрямую, ну типа как к экселю. Я такое делал. Только COM-объект все-таки должен быть создан так как надо сапу.
Работа с таким объектом в простом случае: CREATE OBJECT - создание.
а обращения будут идти через CALL METHOD/GET PROPERTY/SET PROPERTY
Минусы подхода: ограничения накладываемые SAP: все параметры передаются как строка и имеют ограничение по длине 65 тысяч символов с копейками. Всякие vararray - не поддерживаются сапом.
Я Вас правильно понял? Вас именно это интересовало?
UPDATE Еще раз вчитался в первоначальный вопрос. Понял что нужен вызов удаленного объекта. Тогда мой вариант не подходит. У нас для соединения с удаленным объектом был некий посредник - самописный com-объект, который ставился к каждому пользователю на машину. Я из программы цеплялся к нему, а уж он занимался обменом информацией с удаленным сервером (в принципе, эта реализация - аналог того, как Вы предложили через эксель сделать). Ну или все-таки через датапровайдер, который описан по вами приведенной ссылке . Возможно кто-то решал уже эту задачу и другими способами.


Последний раз редактировалось Кодер Чт, сен 25 2008, 16:02, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 25 2008, 16:02 
Гость
Кодер написал(а):
Если объект нормально заточен как COM/ActiveX, то можно попробовать к нему обратится напрямую, ну типа как к экселю. Я такое делал. Только COM-объект все-таки должен быть создан так как надо сапу.
Работа с таким объектом в простом случае: CREATE OBJECT - создание.
а обращения будут идти через CALL METHOD/GET PROPERTY/SET PROPERTY
Минусы подхода: ограничения накладываемые SAP: все параметры передаются как строка и имеют ограничение по длине 65 тысяч символов с копейками. Всякие vararray - не поддерживаются сапом.
Я Вас правильно понял? Вас именно это интересовало?


Я думаю, что это то нужно, а вы можете пример дать как у вас это реализовано?


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 25 2008, 16:22 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
Прошу прощения, Вы ответили раньше, чем я внес изменения в свое сообщение. Продублирую:
Еще раз вчитался в первоначальный вопрос. Понял что нужен вызов удаленного объекта. Тогда мой вариант не подходит. У нас для соединения с удаленным объектом был некий посредник - самописный com-объект, который ставился к каждому пользователю на машину. Я из программы цеплялся к нему, а уж он занимался обменом данными с удаленным сервером (в принципе, эта реализация - аналог того, как Вы предложили через эксель сделать). Ну или все-таки через датапровайдер, который описан по вами приведенной ссылке . Возможно кто-то решал уже эту задачу и другими способами.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 25 2008, 16:31 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Можно использовать JAVA коннектор или C# коннектор.
Благо в этих языках реализовать вызов удаленного COM сервера не составляет труда. В C# ИМХО попроще, если что ;)
Го это опять промежуточный слой.
А напрямую - ну разве что использовать встроенный в САПу интерпритатор Javascript. Только я не знаю, можно ли на жабоскрипте реализовать работу с удаленным комовским объектом...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 25 2008, 16:57 
Гость
Кодер написал(а):
Прошу прощения, Вы ответили раньше, чем я внес изменения в свое сообщение. Продублирую:
Еще раз вчитался в первоначальный вопрос. Понял что нужен вызов удаленного объекта. Тогда мой вариант не подходит. У нас для соединения с удаленным объектом был некий посредник - самописный com-объект, который ставился к каждому пользователю на машину. Я из программы цеплялся к нему, а уж он занимался обменом данными с удаленным сервером (в принципе, эта реализация - аналог того, как Вы предложили через эксель сделать). Ну или все-таки через датапровайдер, который описан по вами приведенной ссылке . Возможно кто-то решал уже эту задачу и другими способами.


Да нет всё правильно. Так и есть. На комп пользователю ставится компонент COM+ и через него и надо работать.

Если посмотреть код макроса, то всё очень просто.


Тут вместе с коллегой стали смотреть
Сначала занесли через SOLE строку с APPL.

использую




Code:

DATA:
*       "Контейнер"
        gc_container TYPE REF TO cl_gui_custom_container,
*       Интерфейс управления
        gc_control   TYPE REF TO i_oi_container_control,
*       Интерфейс документа
        gc_document  TYPE REF TO i_oi_document_proxy,
*       Интерфейс электронной таблицы
        gc_sheet TYPE REF TO i_oi_spreadsheet,
*       интерфейс доступа к ошибке
        gc_error     TYPE REF TO i_oi_error.
DATA: lt_app TYPE soi_document_type_descr_list.

CALL METHOD gc_control->get_registered_doc_types
  IMPORTING
    descr_list = lt_app.


В списке который вываливается, нет строки с нашим APP.

Подсказали посмотреть SAPRDEMO_ACTIVEX_INTEGRATION.

Щас глядеть буду...


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 25 2008, 17:07 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
А не обязательно регистрировать.
Если очень хочется - то транзакция SOLE.
Но для работы этого не требуется.
Цитата:
If an OLE server has no Typeinfo, it can still be processed by ABAP, but the names of the methods and properties have to be in the same language as the language in which the frontend-application is installed.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 25 2008, 17:11 
Гость
При попытке открыть выдает ошибку
RETCODE = DOCUMENT_TYPE_NOT_REGISTERED

Code:
CALL METHOD DOCUMENT->OPEN_ACTIVEX_DOCUMENT
IMPORTING RETCODE = RETCODE.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 25 2008, 17:17 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
А объект в системе зарегистирован? Я имею в виду Win. А не SAP.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 25 2008, 17:30 
Гость
да вроде да
из редактора реестра взяли его CLSID {B0AB347F-2F18-4DDE-AAB3-CB3D43C3F80F}


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 25 2008, 17:32 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Ну попробуйте классически обратиться:

Code:
INCLUDE ole2incl.

DATA: test TYPE ole2_object.

CREATE OBJECT test 'тут имя вашего объекта, под которым он зареген'.

IF sy-subrc NE 0.

  BREAK-POINT.

ENDIF.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 25 2008, 17:38 
Гость
ДА! Классика помогла. SY-SUBRC = 0.
Теперь только надо взять его HANDLE и поработать с собственными методами.

Спасибо.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 25 2008, 18:43 
Гость
Кодер написал(а):
Работа с таким объектом в простом случае: CREATE OBJECT - создание.
а обращения будут идти через CALL METHOD/GET PROPERTY/SET PROPERTY
Минусы подхода: ограничения накладываемые SAP: все параметры передаются как строка и имеют ограничение по длине 65 тысяч символов с копейками. Всякие vararray - не поддерживаются сапом.




А как получить результат из таблицы в APP?


Code:
GET PROPERTY OF doc 'Result.Value("TotalPrice")' = l_sum.


Выдает sy-subrc = 3.


Принять этот ответ
Вернуться к началу
  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB