Текущее время: Чт, ноя 06 2025, 19:38

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


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

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


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

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