Текущее время: Вт, июл 01 2025, 15:31

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Re: OLE2: CALL METHOD OF и необязательные аргументы  Тема решена
СообщениеДобавлено: Пт, дек 23 2011, 18:18 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 16 2010, 09:57
Сообщения: 106
Откуда: СПб
Пол: Мужской
chumpa написал:
Да, ещё вспомнил по теме -- массивы не передаются, никак (те, которые в VARIANT могут быть).

Есть такая занятная штука - MSScriptControl (я о ней уже упоминал здесь: viewtopic.php?p=438438#p438438 ). Считаю ее для себя своим открытием года, несмотря на то, что штука известна уже более 10 лет. Как-то всё руки не доходили, а в этом году, к счастью, дошли.

В этот компонент внутри ABAP-программы можно загрузить в виде текста отлаженный код на VBScript и исполнить его. Всякие вкусности Бейсика вроде массивов VARIANT или пропуска необязательных параметров в середине(!) списка - доступны. Нет, напрямую массив в ABAP по-прежнему не передать, НО(!) можно получить вариантный массив (например, значения диапазона ячеек Excel - одной операцией присваивания: varArray = Range("A1:H100")), Бейсиком же развернуть массив в огромную строку, разделив значения в строках символами табуляции, а строки - символами перевода строки. Далее передать строку в стринг ABAP-а, который SPLIT-ами разрезать и поместить во внутреннюю таблицу, завершив, таким образом, преобразование "VARIANT-массив VB => внутренняя таблица ABAP". Законченный пример по передаче массива при случае покажу.

Сейчас же покажу пример с пропуском параметров, уже упомянутый выше в этом обсуждении. В рабочую книгу Excel, открытую из ABAP-а, Бейсиком будет добавлен лист с типом "Диаграмма" (с параметром After), после чего в ABAP-е новый лист будет переименован (конечно же, на самом деле всё "происходит" в ABAP-е и разделение этапов на "абаповский" и "бейсиковский" используется чисто для наглядности):
Code:
REPORT  zzzzzzz.

TYPE-POOLS: ole2.

DATA:
  excel     TYPE ole2_object,
  workbooks TYPE ole2_object,
  sc        TYPE ole2_object,
  new_sheet TYPE ole2_object,
  vbcode    TYPE string.

START-OF-SELECTION.

  "открыли Excel в ABAP-е
  CREATE OBJECT excel 'Excel.Application'.
  SET PROPERTY OF excel 'Visible' = 1.
  CALL METHOD OF excel 'Workbooks' = workbooks.
  CALL METHOD OF workbooks 'Add'.

  "переходим в VB (в смысле, в ActiveX)
  CREATE OBJECT sc 'MSScriptControl.ScriptControl'.
  SET PROPERTY OF sc 'Language' = 'vbscript'.

  "устанавливаем соответствие между объектами VB и ABAP
  CALL METHOD OF sc 'AddObject' EXPORTING #1 = 'xlApp' #2 = excel.

  "загружаем код VB (vbscript) для выполнения поставленной задачи
  CONCATENATE
  'Function addNewSheet'
  '    Set addNewSheet = xlApp.Sheets.Add( , xlApp.Worksheets(2), , -4109)' "-4109 = xlChart
  'End Function'
  INTO vbcode SEPARATED BY cl_abap_char_utilities=>cr_lf.
  CALL METHOD OF sc 'AddCode' EXPORTING #1 = vbcode.

  "проигрываем" код VB, возвращая созданный лист ABAP-у
  CALL METHOD OF sc 'Run' = new_sheet EXPORTING #1 = 'addNewSheet'.

  "снова в ABAP-е - изменяем имя листу, созданному в VB
  SET PROPERTY OF new_sheet 'Name' = 'Диаграммище'.

  CALL METHOD cl_gui_cfw=>flush.
  FREE OBJECT: sc, new_sheet, workbooks, excel.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: OLE2: CALL METHOD OF и необязательные аргументы
СообщениеДобавлено: Пн, дек 26 2011, 10:30 
Начинающий
Начинающий

Зарегистрирован:
Ср, апр 27 2011, 12:04
Сообщения: 14
Gustav, спасибо, оно. Добавлю только, что разделение этапов на ABAP и VBS все-таки имеет место, ведь код VBS в методе sc.Run выполняется целиком на стороне клиента. Таким образом, имеет смысл по максимуму перенести операции с xlApp в него, чтобы избежать лишних запросов на апп-сервер (если, конечно, не использовать NO FLUSH).


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

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


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

Сейчас этот форум просматривают: Yandex [Bot]


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

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