Текущее время: Пн, июл 21 2025, 22:30

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




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: RSDRI_INFOPROV_READ_RFC
СообщениеДобавлено: Ср, апр 28 2010, 08:52 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, июл 03 2007, 10:26
Сообщения: 486
Откуда: Kazakhstan, Astana
Пол: Мужской
Система SAP BW 3.5. В 7-ке пока проверить не могу.
Описываю структуру данных. Вызываю RSDRI_INFOPROV_READ все считывается OK. Далее пробую использовать RSDRI_INFOPROV_READ_RFC, данные считываются, но вид у них не читабельный. Видимо неправильно обрабатывается длина записей.
Таблица g_t_field из ( e_t_field) содержит 78 полей (Я в своей структуре использую только 5.) и мне всю структуру куба описывать не хочется. Ведь для RSDRI_INFOPROV_READ все работает хорошо. Проблема похожа на эту http://forums.sdn.sap.com/thread.jspa?threadID=1666522

Code:

TYPES:
  BEGIN OF gt_s_data,
    zafgld01 TYPE /bic/oizafgld01,
    zcompany TYPE /bic/oizcompany,
    0calday TYPE /bi0/oicalday,
    0amount TYPE /bi0/oiamount,
    0currency TYPE /bi0/oicurrency,
   END OF gt_s_data.

TYPES:
gt_t_data TYPE STANDARD TABLE OF gt_s_data
         WITH DEFAULT KEY INITIAL SIZE 10.

* G_T_DATA = an internal table that can hold the result set
DATA: g_t_data TYPE gt_t_data,
      g_s_data TYPE gt_s_data,
      g_t_alldata TYPE gt_t_data.

CALL FUNCTION 'RSDRI_INFOPROV_READ_RFC'
  DESTINATION 'NONE'
  EXPORTING
    i_infoprov             = 'ZUSU_C02'
    i_reference_date       = sy-datum

  IMPORTING
    e_end_of_data          = l_end_of_data
  TABLES
    i_t_sfc                = l_t_sfc
    i_t_sfk                = l_t_sfk
    i_t_range              = l_t_range
    e_t_rfcdata            = l_t_rfcdata
    e_t_field              = g_t_field
  CHANGING
    c_first_call           = l_first_call
  EXCEPTIONS
    illegal_input          = 1
    illegal_input_sfc      = 2
    illegal_input_sfk      = 3
    illegal_input_range    = 4
    illegal_input_tablesel = 5
    no_authorization       = 6
    generation_error       = 7
    illegal_download       = 8
    illegal_tablename      = 9
    illegal_resulttype     = 10
    x_message              = 11
    data_overflow          = 12
    OTHERS                 = 13.

IF sy-subrc <> 0.
  BREAK-POINT.
ENDIF.

  CALL FUNCTION 'RSDRI_DATA_UNWRAP'
    EXPORTING
      i_t_rfcdata = l_t_rfcdata
    CHANGING
      c_t_data    = g_t_data.

  IF sy-subrc <> 0.
    BREAK-POINT.
  ENDIF.
  APPEND LINES OF g_t_data TO g_t_alldata.
  CLEAR g_t_data.

_________________
"Great minds discuss ideas. Average minds discuss events. Small minds discuss people-Eleanor Roosevelt--Knowledge is to share, Keep it free, Keep sharing"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: RSDRI_INFOPROV_READ_RFC
СообщениеДобавлено: Ср, апр 28 2010, 10:59 
Специалист
Специалист

Зарегистрирован:
Пн, июл 18 2005, 12:10
Сообщения: 169
Пол: Мужской
Поиграйте с i_resulttype
call function 'RSDRI_INFOPROV_READ_RFC'
destination params-destination
exporting
i_infoprov = s_map_infoprov-infoprov
i_reference_date = sy-datum
i_save_in_table = rs_c_false
i_save_in_file = rs_c_false
i_authority_check = rsdrc_c_authchk-read
i_resulttype = 'V'
tables
i_t_sfc = t_sfc
i_t_sfk = t_sfk
i_t_range = t_range
e_t_rfcdatav = lt_rfcdatav


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: RSDRI_INFOPROV_READ_RFC
СообщениеДобавлено: Ср, апр 28 2010, 11:16 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, июл 03 2007, 10:26
Сообщения: 486
Откуда: Kazakhstan, Astana
Пол: Мужской
Да уже играл, ставил 'V' и 'U' тоже пробовал. Когда ставил i_resulttype = 'V' или 'U' то FM возвращает пустые таблицы! Это для единиц измерения вроде.

_________________
"Great minds discuss ideas. Average minds discuss events. Small minds discuss people-Eleanor Roosevelt--Knowledge is to share, Keep it free, Keep sharing"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: RSDRI_INFOPROV_READ_RFC
СообщениеДобавлено: Ср, апр 28 2010, 11:35 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, авг 04 2006, 20:56
Сообщения: 1006
Откуда: 37 МИКРОРАЙОН
Пол: Мужской
Ради интереса попробовал протестировать прогу RSDRI_INFOPROV_READ_DEMO там два ФМа : RSDRI_INFOPROV_READ и RSDRI_INFOPROV_READ_RFC.
Вот что получилось:
Для Фма RSDRI_INFOPROV_READ
Цитата:
1800-000304 112001 01 0,00 0,00
3128-400001 112001 01 0,00 0,00
4270-000017 01 0,00 0,00
6731-000731 112001 01 0,00 0,00
6731-002278 112001 01 0,00 0,00
6731-400001 112001 01 0,00 0,00
7731-400002 112001 01 0,00 0,00
7940-000193 01 0,00 0,00
75IT-000404 01 0,00 0,00
7YIL-000092 112001 01 0,00 0,00
760-000002 01 0,00 0,00
160-000003 01 0,00 0,00

Для Фма RSDRI_INFOPROV_READ_RFC
Цитата:
000000000000000 2020202020202,02 2020202020202,02
000000000000000 2020202020202,02 2020202020202,02
000000000000000 2020202020202,02 2020202020202,02
000000000000000 2020202020202,02 2020202020202,02
000000000000000 2020202020202,02 2020202020202,02
000000000000000 2020202020202,02 2020202020202,02
000000000000000 2020202020202,02 2020202020202,02
000000000000000 2020202020202,02 2020202020202,02
000000000000000 2020202020202,02 2020202020202,02
000000000000000 2020202020202,02 2020202020202,02
000000000000000 2020202020202,02 2020202020202,02
000000000000000 2020202020202,02 2020202020202,02

В коде нашел следующее место:
Code:
* The result in G_T_RFCDATA is unwrapped into G_T_DATA
* !!! This only works if G_T_DATA is based on /BI0/V0SD_C012 !!!

Мне думается, что нужно описывать всю структуру куба.


Последний раз редактировалось ROKO Ср, апр 28 2010, 15:10, всего редактировалось 2 раз(а).

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: RSDRI_INFOPROV_READ_RFC
СообщениеДобавлено: Ср, апр 28 2010, 11:40 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, янв 30 2007, 17:10
Сообщения: 488
А что нельзя описать структуру вот так?
Code:
    DATA: cube_stru(30) TYPE c.
    FIELD-SYMBOLS: <ls_data> TYPE STANDARD TABLE.
    CONCATENATE '/BIC/V' infocubename '2' INTO cube_stru.
    CREATE DATA data_ref TYPE TABLE OF (cube_stru).
    ASSIGN data_ref->* TO <ls_data>.

_________________
Карма - это суперпозиция граблей, на которые мы уже успели наступить, но которые еще не долетели...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: RSDRI_INFOPROV_READ_RFC
СообщениеДобавлено: Ср, апр 28 2010, 11:50 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, июл 03 2007, 10:26
Сообщения: 486
Откуда: Kazakhstan, Astana
Пол: Мужской
To ROKO вот и я про то же. Видимо есть какие-то особенности для этого FM если куб имеет нав. атрибуты и их кол-во.
To Soulsurfer Согласен с вами, что можно.
Просто было желание удостовериться, что нужно описывать именно всю структуру куба в особенности если полей много и есть нав. атрибуты. Сомнения ведь появились после использования RSDRI_INFOPROV_READ, где такие особенности не проявились.

_________________
"Great minds discuss ideas. Average minds discuss events. Small minds discuss people-Eleanor Roosevelt--Knowledge is to share, Keep it free, Keep sharing"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: RSDRI_INFOPROV_READ_RFC
СообщениеДобавлено: Ср, апр 28 2010, 11:51 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, янв 30 2007, 17:10
Сообщения: 488
С SAP лучше перебдеть, чем недобдеть :lol:

_________________
Карма - это суперпозиция граблей, на которые мы уже успели наступить, но которые еще не долетели...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: RSDRI_INFOPROV_READ_RFC
СообщениеДобавлено: Ср, апр 28 2010, 11:58 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, июл 03 2007, 10:26
Сообщения: 486
Откуда: Kazakhstan, Astana
Пол: Мужской
Soulsurfer написал(а):
С SAP лучше перебдеть, чем недобдеть :lol:

Это уж точно!
Итак выводы = по использованию данногоо FM =
1. Возможные проблемы с кубами со сложной структурой. Могут быть проблемы с кодировкой.
Решается с помощью описания структуры куба, проверкой настроек UNICODE (еще с этим разбираться буду :P ), выставлением параметра i_resulttype = 'V' или 'U', вот что в обработке
Code:
  IF e_t_rfcdatav IS REQUESTED AND l_resulttp = 'V'.
    CLEAR e_t_rfcdatav[].
    l_outv = rs_c_true.
    PERFORM add_units_to_sfc
      USING    l_th_sfk
      CHANGING l_th_sfc.
  ENDIF.

  IF e_rfcdata_uc IS REQUESTED AND l_resulttp = 'U'.
    CLEAR e_rfcdata_uc.
    l_outu = rs_c_true.
  ENDIF.

И вот еще один темплэйт в добавок =
Code:
*Copyright (c) 2009, J.Rumpf, www.web-dreamer.de / BSD Licence
*All rights reserved.
*
*Redistribution and use in source and binary forms, with or without modification
*are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, th
*   is list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
*   this list of conditions and the following disclaimer in the documentation
*   and/or other materials provided with the distribution.
* * Neither the name of the owner nor the names of its contributors may be used
*   to endorse or promote products derived from this software without specific
*   prior written permission.
*
*THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
*ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
*WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
*DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
*FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
*DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
*SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
*CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
*OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
*OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
TYPE-POOLS: rsdrc.
  CONSTANTS: cube TYPE rsinfoprov VALUE 'ZYOURINFOPROVIDER'.
  DATA: cube_struct TYPE string,
        fact_struct TYPE string.
  "generic structure with ALL Characteristics and Keyfigures of the Cube
  CONCATENATE '/bic/v' cube 'j' INTO cube_struct.
* cube_struct = 'YOUR_STRUCTURE'.
  "Facttable of the Cube - be carfull in Big Cubes - there is an 'f' and an 'g'
  CONCATENATE '/bic/v' cube 'f' INTO fact_struct.

  TYPES:
  t_cube_struct TYPE TABLE OF ( cube_struct ) "== Set on YOUR Target Structure or the content of cube_struct !!!
  WITH DEFAULT KEY  INITIAL SIZE 0.

  DATA:
       e_th_sfc  TYPE rsdri_th_sfc, "Characteristics of the Cube
       e_th_sfk  TYPE rsdri_th_sfk, "Keyfigures of the cube

       line_of_e_th_sfc TYPE rsdri_s_sfc,
       line_of_e_th_sfk TYPE rsdri_s_sfk,

       ddic TYPE dd_x031l_table, "Datadictonary for later use
       ldic LIKE LINE OF ddic,   "Ddic row
       fact_ddic TYPE dd_x031l_table, "fact_ddic

       my_structure TYPE REF TO data, "Structure of DDIC

       g_t_data TYPE t_cube_struct, "table-typ of return-table
       t_all_data TYPE t_cube_struct, "Table-type of return-table
       c_first_call  TYPE  rs_bool, " First-call
       r_seloption  TYPE rsdri_t_range, "Selection-Table
       w_seloption  TYPE LINE OF rsdri_t_range, "Selection-Row
       end_of_data TYPE rs_bool, "Last Call
       infoprov TYPE rsinfoprov " Infoprovider = cube
       .
**********************************************************************
"Sometimes your Structure has Columns you don't have in your Cube
" Here you can add this columns to be ignored by the cube.
" !!! Please note - the function will aggregate on it's standard key figure behaviour
" if you don't add all relevant primary keys!

  DATA: ignore_list TYPE STANDARD TABLE OF fieldname.
  ldic-fieldname = 'MY_IGNORE_COLUMN_NAME'.  APPEND ldic-fieldname TO ignore_list.

**********************************************************************
" From here you go with your selection on your cube - for each selection
" you need to copy the following lines
data: Z_INFOOBJEKT type /BIC/OIZ_INFOOBJEKT. " == Important because of the selection-type

  " Selection-Condition:
  Z_INFOOBJEKT = 'my_selection'.
  w_seloption-chanm = 'Z_INFOOBJEKT'. "technical name of InfoObjekt
  w_seloption-sign = 'I'. " Include
  w_seloption-compop = 'EQ'. " EQUAL
  w_seloption-low = Z_INFOOBJEKT. "

  APPEND w_seloption TO r_seloption.

**********************************************************************
* No change from here necessary.

  FIELD-SYMBOLS:  TYPE ANY.
  DATA: fact_ref TYPE REF TO cl_abap_structdescr.
  CREATE DATA my_structure TYPE (fact_struct). "Struktur-Objekt der Faktentabelle lesen
  fact_ref ?= cl_abap_tabledescr=>describe_by_data_ref( my_structure ).
  CALL METHOD fact_ref->get_ddic_object "DDIC Beschreibung auslesen
    RECEIVING
      p_object     = fact_ddic
    EXCEPTIONS
      not_found    = 1
      no_ddic_type = 2
      OTHERS       = 3.

  DATA: descr_ref TYPE REF TO cl_abap_structdescr.
  CREATE DATA my_structure TYPE (cube_struct).
  descr_ref ?= cl_abap_tabledescr=>describe_by_data_ref( my_structure ). "Struktur-Objekt der zu lesenden Objekte lesen
  CALL METHOD descr_ref->get_ddic_object " DDic Beschreibung auslesen
    RECEIVING
      p_object     = ddic
    EXCEPTIONS
      not_found    = 1
      no_ddic_type = 2
      OTHERS       = 3.

  DATA: wa_rol LIKE ldic-fieldname.
  LOOP AT ddic INTO ldic. " Iterate over all relevant Keyfigures
    READ TABLE ignore_list FROM ldic-fieldname INTO wa_rol.
    IF sy-subrc NE 0.
      READ TABLE fact_ddic WITH KEY rollname = ldic-rollname ASSIGNING . "Compare if rollname of fact-table is in Cube-structure - if it is ne 0;
      IF sy-subrc NE 0. " Key-Figure
        line_of_e_th_sfc-chanm = ldic-fieldname.
        INSERT line_of_e_th_sfc INTO TABLE e_th_sfc.
      ELSE. " must be a characteristic
        line_of_e_th_sfk-kyfnm = ldic-fieldname. "
        INSERT line_of_e_th_sfk INTO TABLE e_th_sfk. " !! Be carefull by Cubes with many keyfigures see above !!
      ENDIF.
    ENDIF.
  ENDLOOP.

  infoprov = cube. " Just for type-matching.
  WHILE ( end_of_data  NE 'X'). " As long as not end_of_data
    CALL FUNCTION 'RSDRI_INFOPROV_READ'
       EXPORTING
         i_infoprov                   = cube
         i_th_sfc                     = e_th_sfc
         i_th_sfk                     = e_th_sfk
         i_t_range                    = r_seloption
*   I_TH_TABLESEL                =
*   I_T_RTIME                    =
*   I_REFERENCE_DATE             = SY-DATUM
*   I_ROLLUP_ONLY                = RS_C_TRUE
*   I_T_REQUID                   =
*   I_SAVE_IN_TABLE              = ' '
*   I_TABLENAME                  =
*   I_SAVE_IN_FILE               = ' '
*   I_FILENAME                   =
      i_packagesize                = 10000
*   I_MAXROWS                    = 0
      i_authority_check            = rsdrc_c_authchk-none "use if you want to check auth
*   I_CURRENCY_CONVERSION        = 'X'
*   I_USE_DB_AGGREGATION         = RS_C_TRUE
*   I_USE_AGGREGATES             = RS_C_TRUE
*   I_READ_ODS_DELTA             = RS_C_FALSE
*   I_CALLER                     = RSDRS_C_CALLER-RSDRI
*   I_DEBUG                      = RS_C_FALSE
*   I_CLEAR                      = RS_C_FALSE
      IMPORTING
        e_t_data                     = g_t_data
        e_end_of_data                = end_of_data
*   E_AGGREGATE                  =
*   E_SPLIT_OCCURRED             =
*   E_T_MSG                      =
*   E_STEPUID                    =
       CHANGING
         c_first_call                 = c_first_call
      EXCEPTIONS
        illegal_input                = 1
        illegal_input_sfc            = 2
        illegal_input_sfk            = 3
        illegal_input_range          = 4
        illegal_input_tablesel       = 5
        no_authorization             = 6
        illegal_download             = 7
        illegal_tablename            = 8
        trans_no_write_mode          = 9
        inherited_error              = 10
        x_message                    = 11
        OTHERS                       = 12
               .
    IF sy-subrc ne 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
    APPEND LINES OF g_t_data TO t_all_data.
  ENDWHILE.

_________________
"Great minds discuss ideas. Average minds discuss events. Small minds discuss people-Eleanor Roosevelt--Knowledge is to share, Keep it free, Keep sharing"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: RSDRI_INFOPROV_READ_RFC
СообщениеДобавлено: Ср, апр 28 2010, 14:49 
Специалист
Специалист

Зарегистрирован:
Пн, июл 18 2005, 12:10
Сообщения: 169
Пол: Мужской
BORLAND написал:
Да уже играл, ставил 'V' и 'U' тоже пробовал. Когда ставил i_resulttype = 'V' или 'U' то FM возвращает пустые таблицы! Это для единиц измерения вроде.

потому как он возвращает в других параметрах:
e_t_rfcdatav


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: RSDRI_INFOPROV_READ_RFC
СообщениеДобавлено: Ср, апр 28 2010, 15:17 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, июл 03 2007, 10:26
Сообщения: 486
Откуда: Kazakhstan, Astana
Пол: Мужской
Спасибо! Все работает!
To mas!
To Soulsurfer!
To ROKO!

_________________
"Great minds discuss ideas. Average minds discuss events. Small minds discuss people-Eleanor Roosevelt--Knowledge is to share, Keep it free, Keep sharing"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: RSDRI_INFOPROV_READ_RFC
СообщениеДобавлено: Пт, апр 30 2010, 11:57 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, окт 21 2006, 20:34
Сообщения: 280
так можно просто скопировать RSDRI_INFOPROV_READ в дистанционный модуль и не париться с ньюансами что они недоделали в RFC версии


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: RSDRI_INFOPROV_READ_RFC
СообщениеДобавлено: Пт, апр 30 2010, 12:37 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, июл 03 2007, 10:26
Сообщения: 486
Откуда: Kazakhstan, Astana
Пол: Мужской
dump написал(а):
так можно просто скопировать RSDRI_INFOPROV_READ в дистанционный модуль и не париться с ньюансами что они недоделали в RFC версии

Это при использовании VIP? Там для второго интерфейса вызов RSDRI_INFOPROV_READ не подойдет, а вот RSDRI_INFOPROV_READ_RFC работает.
RSDRI_INFOPROV_READ будет работать в VIP при использовании первого интерфейса с RFC pack = On. Обсуждалось здесь = http://sapboard.ru/forum/viewtopic.php?f=12&t=60433

http://help.sap.com/saphelp_nw2004s/hel ... ameset.htm

_________________
"Great minds discuss ideas. Average minds discuss events. Small minds discuss people-Eleanor Roosevelt--Knowledge is to share, Keep it free, Keep sharing"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: RSDRI_INFOPROV_READ_RFC
СообщениеДобавлено: Ср, май 05 2010, 13:03 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, окт 21 2006, 20:34
Сообщения: 280
нет - я думал про чтение обычного инфопровайдера - если такие глюки - то можно просто обернуть в рфс модуль - про виртуальные не могу сказать - не пробовал


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

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


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

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


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

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