Текущее время: Сб, июл 12 2025, 15:20

Часовой пояс: 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 часа


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

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


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

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