Strona 1 z 1

Jaka to tabela?

: czw sty 31, 2019 2:16 pm
autor: anetajur
Cześć,
Mam pytanko, jaka tabela zawiera listę załączników? Chciałabym do raportu dodać kolumnę w której oznaczałabym czy jest załącznik do kontaktu utworzonego w VC01N. Jak klikam F1 to mam tylko informację o strukturze... a potrzebuję tabelę do której odwołam się w kodzie..

Re: Jaka to tabela?

: pt lut 01, 2019 10:00 am
autor: wojtas7
To jest CRM czy ERP? W ERP są tabele TOAV2, TOAV1.

Re: Jaka to tabela?

: pt lut 01, 2019 10:12 am
autor: anetajur
Hej dzięki za odzew :)
SAP ERP.
Jeżeli chodzi o tabelę TOAV1 w SE16n jak ją chciałam odpalić to niestety jest pusta, a tabela TOAV2 nie istnieje.
A jednak załączniki mam podpięte jak widać na poprzednim screenie, więc to chyba nie te tabelki :( jeszcze jakiś trop?
Sprawdzałam jeszcze tabelę DRAW, ale w niej są jakieś inne załączniki...

Re: Jaka to tabela?

: pt lut 01, 2019 11:09 am
autor: yacol
Jeśli mogę coś doradzić - w przypadku GOS sięganie bezpośrednio do tabel BD to proszenie się o problemy. GOS wcale nie jest taki trywialny jaki się początkowo wydaje. Sporo zależy od komponentów instalowanych w ramach danej instancji SAP - np. nieco inaczej to wygląda gdy jest w systemie jakiś content server. Tak czy inaczej lepiej używać dedykowanych klas lub modułów funkcyjnych.

I tak np. aby odczytać czy istnieją jakieś załączniki dla danego obiektu to wystarczy wywołać statyczną metodę COUNT_FOR_OBJECT klasy CL_GOS_ATTACHMENT_QUERY.

W systemie istnieje cała banda klas CL_GOS_* - warto się nimi zainteresować.

Pobranie listy załączników można też zrealizować przy pomocy klasy CL_BINARY_RELATION i metody READ_LINKS_OF_BINREL. Można też wykorzystać moduł funkcyjny BDS_GOS_CONNECTIONS_GET.

Generalnie temat jest dość szeroki i trochę trzeba nad nim przysiedzieć żeby być biegłym w tej materii.

Re: Jaka to tabela?

: pn lut 04, 2019 11:33 am
autor: anetajur
Ok, a więc załączniki są w tabeli SOOD, ale idąc tropem użycia tej metody... mam przykładowy kod użycia tej metody:

Kod: Zaznacz cały

i_object1-typeid = 'YBUS2012'.
      i_object1-catid  = 'BO'.
      i_object1-instid = i_ybus2012-docno.
      call method cl_gos_attachment_query=>count_for_object
        exporting
         is_object = i_object1
         ip_arl    = space
        receiving
         rt_stat   = i_stat1.
      read table i_stat1 into wa_stat1 index 1.
      if sy-subrc eq c_0.
         move wa_stat1-counter to v_attno1.
      endif.
Nie używałam jej nigdy i nie mam w niej biegłości. Ze strony SAP:

Kod: Zaznacz cały

 DATA:
ld_IP_ARL TYPE SGS_FLAG ,
ld_IP_ATTA TYPE SGS_FLAG ,
ld_IP_NOTE TYPE SGS_FLAG ,
ld_IP_PRIVATE TYPE SGS_FLAG ,
ld_IP_URL TYPE SGS_FLAG ,
ld_IT_OBJECT TYPE SIBFLPORBT ,
ld_RT_STAT TYPE SGS_T_ACNT.

"IP_ARL " Count Archive Link Relationships TYPE SGS_FLAG
"IP_ATTA " Count Attachments TYPE SGS_FLAG
"IP_NOTE " Count Notes TYPE SGS_FLAG
"IP_PRIVATE " Count Private Notes TYPE SGS_FLAG
"IP_URL " Count URL TYPE SGS_FLAG
"IT_OBJECT " Business Object TYPE SIBFLPORBT


" ld_IP_ARL = "
" ld_IP_ATTA = "
" ld_IP_NOTE = "
" ld_IP_PRIVATE = "
" ld_IP_URL = "
" ld_IT_OBJECT = "

CALL METHOD CL_GOS_ATTACHMENT_QUERY=>COUNT_FOR_OBJECT(
    EXPORTING
    IP_ARL = ld_IP_ARL
    IP_ATTA = ld_IP_ATTA
    IP_NOTE = ld_IP_NOTE
    IP_PRIVATE = ld_IP_PRIVATE
    IP_URL = ld_IP_URL
    IT_OBJECT = ld_IT_OBJECT
    RECEIVING
    RT_STAT = ld_RT_STAT ).
i_object1-typeid nie jestem pewna czy to SDOACTIV w moim przypadku. W OAC3 nie widzę tego połaczenia. Wszędzie w sumie TOA01. Czy może mi ktoś pomóc "obrobić" ten kod nr 1? ;)

Re: Jaka to tabela?

: pn lut 04, 2019 1:31 pm
autor: yacol
Też nigdy nie używałem tej metody do kontaktów handlowych w SD ale wydaje mi się, że w polu TYPEID powinnaś wpisać 'VBKA'. Jest też obiekt gospodarczy BUS1037 (Kontakt z partnerem handlowym) - rzuć na niego okiem.
Ten drugi przykład, który podałaś dotyczy metody CL_GOS_ATTACHMENT_QUERY=>COUNT_FOR_OBJECTS. Działa ona podobnie jak COUNT_FOR_OBJECT tylko umożliwia pobranie liczby załączników dla różnych typów obiektów (COUNT_FOR_OBJECT tylko dla jednego).

Re: Jaka to tabela?

: pn lut 04, 2019 1:54 pm
autor: anetajur
Dziękuje, faktycznie to bedzie pewnie jeden z tych obiektów.
Uzywałeś tej metody kiedyś? Bo mam problem z deklaracjami danych, masz może jakiś przykład na którym mogłabym się wzorować definiując dane? Obecnie mam tak, ale mam jeszcze jakieś błędy z brakiem danych:

Kod: Zaznacz cały

data: gos_attachment type ref to cl_gos_attachment_query,
      i_object       type sibflporb,
      i_stat         type SGS_T_ACNT.


      i_object-typeid = 'VBKA'. "lub BUS1037
      i_object-catid  = 'BO'.
      i_object-instid = v_docno.
      
      call method cl_gos_attachment_query=>count_for_object
        exporting
         is_object = i_object
         ip_arl    = space
        receiving
         rt_stat   = i_stat.
      
      read table i_stat into wa_stat index 1.
      if sy-subrc eq 0.
         move wa_stat-counter to v_attno.
      endif.

Re: Jaka to tabela?

: pn lut 04, 2019 5:51 pm
autor: yacol
W Twoim kodzie nie jest potrzebna deklaracja gos_attachment - do niczego nie jest używana ponieważ metoda COUNT_FOR_OBJECT jest statyczna a nie instancyjna. Brakuje definicji zmiennej v_docno, v_attno oraz wa_stat.

Genralnie staram się nie pisać swojego kodu tutaj żeby niczego nie sugerować ale ja napisałbym to trochę inaczej (tu z wykorzystaniem składni ABAP w wersji >= 7.40):

Kod: Zaznacz cały

data(lt_stat) = cl_gos_attachment_query=>count_for_object( is_object = value #( typeid = 'VBKA' catid = 'BO' instid = '...' ) ).
if lines( lt_stat ) > 0.
  data(lv_counter) = lt_stat[ 1 ]-counter.
endif.
Zamiast '...' powinnaś wstawić zmienną typu CAS_VBELN zawierającą numer dokumentu zbytu dla kontaktu handlowego - czyli pole, które jest kluczem w tabeli VBKA. Zmienna lv_counter zawiera ilość załączników w GOS dla danego dokumentu bądź 0 jesli takich załaczników nie ma. Zwróć proszę uwagę, że mój przykład żąda liczenia wszystkich elementów GOS (załączniki, adnotacje (notatki) czy odnośniki URL). Jeśli chcesz policzyć konkretne typy elementów GOS musisz użyć odpowiednich parametrów metody COUNT_FOR_OBJECT.

Re: Jaka to tabela?

: czw lut 07, 2019 11:25 am
autor: anetajur
Hej,
udało mi się to napisać :)
Mała wskazówka dla potomnych, obiekt BUS1037 dla kontaktów handlowych :)

A odczyt w metodzie wg zapytania z tabeli:

Kod: Zaznacz cały

SELECT *
      FROM srgbtbrel
      APPENDING CORRESPONDING FIELDS OF TABLE lt_link
      FOR ALL ENTRIES IN lt_brel
      WHERE
        instid_a = is_object-instid AND
        typeid_a = is_object-typeid AND
        catid_a = is_object-catid AND
        reltype = lt_brel-reltype
:)