Текущее время: Чт, авг 21 2025, 22:24

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




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Передать значения BEx-переменных в VBA (7.0)?
СообщениеДобавлено: Вт, дек 13 2011, 11:30 
Начинающий
Начинающий

Зарегистрирован:
Чт, май 05 2011, 11:35
Сообщения: 16
Всем доброго дня!
Суть вопроса - как передать в VBA-макрос текущие значения Bex-переменных (7.0)?
Какие варианты рассматриваются:
или: найти значения этих перменных для этого запроса где-то в системной таблице (буфере) , написать FM-ник, вызвать по RFC, (неизвестно какая таблица? где искать?)
или: считать через какой-нибудь класс BEXAPI (какой? есть метод variableContainer какого-то класса, вроде предназначен не для этого)
какие варианты НЕ рассматриваются:
или: повесить на каждую (или одну) переменную user-exit, записать значения всех переменных в табличку, считать с таблички через FM-ник, вызванный по RFC
или: на "очень" скрытый лист рабочей книги вывести BEX-фильтр - считать оттуда (самый простой метод)
Коллеги, буду весьма признателен, если кто-нибудь сможет просветить по первым двум пунктам.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Передать значения BEx-переменных в VBA (7.0)?
СообщениеДобавлено: Вт, дек 13 2011, 12:53 
Почетный гуру
Почетный гуру

Зарегистрирован:
Чт, фев 03 2005, 10:18
Сообщения: 503
Wanderer написал(а):
или: на "очень" скрытый лист рабочей книги вывести BEX-фильтр - считать оттуда (самый простой метод)


А чем собственно вас смущает этот метод?

Вот тут кстати описано как "разобрать" XML с данными о запросах хранящихся в книге, в том числе и "распарсить" значения текущих переменных.
http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/25185
P.S. Книга должна быть не сжата.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передать значения BEx-переменных в VBA (7.0)?
СообщениеДобавлено: Вт, дек 13 2011, 13:34 
Начинающий
Начинающий

Зарегистрирован:
Чт, май 05 2011, 11:35
Сообщения: 16
Спасибо, метод интересный!
Тут есть 2 "НО". Во-первых надо сохранить книгу локально, а во вторых надо подцепить в обязательном порядке dll Microsoft XML.
Хотелось бы получить значения переменных в процессе рантайма, может быть есть еще какие-либо предположения?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Передать значения BEx-переменных в VBA (7.0)?
СообщениеДобавлено: Вт, дек 13 2011, 13:37 
Почетный гуру
Почетный гуру

Зарегистрирован:
Чт, фев 03 2005, 10:18
Сообщения: 503
Wanderer написал(а):
Спасибо, метод интересный!
Тут есть 2 "НО". Во-первых надо сохранить книгу локально


Локальное сохранение не требуется.
Нужно, чтобы книга была сохранена на сервере.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передать значения BEx-переменных в VBA (7.0)?
СообщениеДобавлено: Вт, дек 13 2011, 14:28 
Начинающий
Начинающий

Зарегистрирован:
Чт, май 05 2011, 11:35
Сообщения: 16
Sub parseXML()
Dim objXML As MSXML2.DOMDocument
Dim strXML As String
Dim oNodeList As IXMLDOMSelection
Dim curNode As IXMLDOMNode
Dim oList As IXMLDOMSelection
Dim varNode As IXMLDOMNode
Dim n As Long, n2 As Long, n3 As Long
Dim s As String


'Get XML BEx repository
Set objXML = New MSXML2.DOMDocument

----> strXML = Worksheets("BExRepositorySheet").Scripts(1)

Ругается все время в этом месте - хоть рабочую книгу открываю, хоть запрос - оба сохранены на сервере. Item'ов в Scripts нету никаких, только Parent - Application - Count - Creator. Почему в сэмпле указан элемент (1) когда массив обычно начинается с 0? Почему указанный элемент может отсутствовать?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Передать значения BEx-переменных в VBA (7.0)?
СообщениеДобавлено: Чт, дек 15 2011, 23:41 
Ассистент
Ассистент

Зарегистрирован:
Ср, июн 03 2009, 17:01
Сообщения: 48
1. Проверь наличие листа BExRepositorySheet
2. Посмотри есть ли скрипты вообще
Dim vScript
vScript= Worksheets("BExRepositorySheet").Scripts
if vScript is nothing then msgbox "none"
3. Попробуй явно указать элемент коллекции
strXML = Worksheets("BExRepositorySheet").Scripts.Item(1)

Но все это может не помочь, т.к. после 400 патча GUI 7.20 (решавшую проблему с Excel2007) скрипт закодирован: некая комбинация JScript.Encode, base64, gzip.

Можно достать через TextElements:
BEx.Items(1).DataProvider.Result.TextElements


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Передать значения BEx-переменных в VBA (7.0)?
СообщениеДобавлено: Пт, дек 16 2011, 14:30 
Почетный гуру
Почетный гуру

Зарегистрирован:
Чт, фев 03 2005, 10:18
Сообщения: 503
NotTemp написал(а):
Но все это может не помочь, т.к. после 400 патча GUI 7.20 (решавшую проблему с Excel2007) скрипт закодирован: некая комбинация JScript.Encode, base64, gzip.

А у Вас случайно не установлено свойство книги "Использовать сжатие...."?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передать значения BEx-переменных в VBA (7.0)?
СообщениеДобавлено: Пт, дек 16 2011, 16:43 
Начинающий
Начинающий

Зарегистрирован:
Чт, май 05 2011, 11:35
Сообщения: 16
Верно, у меня 6 патч. 7200.2.6.1062
Нашел и Worksheets("BExRepositorySheet").Scripts (там только Parent - Application - Count - Creator), нашел и
BEx.Items(1).DataProvider.Result.TextElements - там тоже нет ни одного Item'a.
Книга не сжата, но стоит галка на "Использовать оптимизированную память".
Если у вас все совпадает, но тем не менее доступ к переменным есть, может быть существуют еще какие-либо обстоятельства и условия?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Передать значения BEx-переменных в VBA (7.0)?
СообщениеДобавлено: Вт, дек 20 2011, 01:17 
Ассистент
Ассистент

Зарегистрирован:
Ср, июн 03 2009, 17:01
Сообщения: 48
В библиотеку BexApi.dll неправильно импортированы классы, поэтому в Watch членов класса не видно. Нужно всегда проверять самому, благо для коллекций синтаксис стандартный.
Для себя написал такую функцию (получает имя переменной и и grid (таблицу анализа), а возвращает значение переменной
Code:
Private Function getVariableValue(bexGrid As Object, sVariable) As String
Const sPrifix = "VARIABLE_"
Dim objTextElements, objTextElement

    getVariableValue = vbNullString
      objTextElements = bexGrid.DataProvider.Result.TextElements
      For Each objTextElement In bexGrid.DataProvider.Result.TextElements
        If objTextElement.ID = sPrifix & sVariable Then
          getVariableValue = objTextElement.Value
          Exit For
        End If
      Next objTextElement
   
End Function


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

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


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

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


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

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