quinta-feira, 30 de outubro de 2014

Carregar imagem no servidor

data:   gcl_cont_photo TYPE REF TO cl_gui_custom_container,
      gcl_picture    TYPE REF TO cl_gui_picture.


DATAg_pic_index TYPE sy-tabix.  
FORM adicionar_imagem.

  DATABEGIN OF lt_hextab OCCURS 1000,
          line(33TYPE x,
        END OF lt_hextab.

  DATAlt_file TYPE filetable,
        lt_res  TYPE match_result_tab.

  DATAlw_file TYPE file_table,
        lw_res  TYPE match_result,
        lw_wm23 TYPE ztwm_0023.

  DATAl_rc       TYPE i,
        l_low      TYPE tvarvc-low,
        l_size     TYPE i,
        l_len      TYPE i,
        l_file     TYPE rlgrap-filename,
        l_filename TYPE rlgrap-filename,
        l_title    TYPE string,
        l_text     TYPE LENGTH 100.

  SELECT SINGLE low
    INTO l_low
    FROM tvarvc
   WHERE name EQ 'Z_WM_DIRETORIO_PAPELETA'.

  IF sy-subrc <> OR l_low IS INITIAL.
    MESSAGE i000 WITH text-m06
                      'Z_WM_DIRETORIO_PAPELETA'.
    EXIT.
  ENDIF.

  l_title text-006.

  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      window_title         l_title
      initial_directory    'C:\'
      default_extension    '*.jpg'
      file_filter          '(*.jpg)|*.jpg|(*.jpeg)|*.jpeg|'
      multiselection       'X'
    CHANGING
      file_table           lt_file
      rc                   l_rc
    EXCEPTIONS
      cntl_error           1
      error_no_gui         2
      not_supported_by_gui 3.

  CHECK sy-subrc AND lt_file[] IS NOT INITIAL.

  LOOP AT lt_file INTO lw_file.

    l_file lw_file.

    FIND ALL OCCURRENCES OF '\' IN l_file  RESULTS lt_res.
    CHECK lt_res[] IS NOT INITIAL.
    READ TABLE lt_res INTO lw_res
                      INDEX lineslt_res ).
    l_len strlenl_file lw_res-offset.
    l_filename l_file+lw_res-offset(l_len).

    lw_wm23-filename l_filename.

    SELECT COUNT)
      FROM ztwm_0023
     WHERE nuoco    EQ fw_alv-nuoco
       AND filename EQ lw_wm23-filename.

    IF sy-subrc 0.
      MESSAGE i289 WITH l_filename fw_alv-nuoco.
      EXIT.
    ENDIF.

    CONCATENATE text-m08 l_filename INTO l_text.

    CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
      EXPORTING
        percentage 100
        text       l_text.

    CLEAR lt_hextab[].

    CALL FUNCTION 'WS_UPLOAD'       "#EC *
      EXPORTING
        codepage   '8400'
        filetype   'BIN'
        filename   l_file
      IMPORTING
        filelength l_size
      TABLES
        data_tab   lt_hextab
      EXCEPTIONS
        OTHERS     7.

    l_file l_low.
    CONCATENATE l_file l_filename INTO l_file.

    OPEN DATASET l_file FOR OUTPUT IN BINARY MODE.

    IF sy-subrc <> 0.
      MESSAGE i288 WITH l_file.
      EXIT.
    ENDIF.

    LOOP AT lt_hextab.
      TRANSFER lt_hextab TO l_file.
    ENDLOOP.

    CLOSE DATASET l_file.

    CLEAR ztwm_0023.
    ztwm_0023-nuoco    fw_alv-nuoco.
    ztwm_0023-filefull l_file.
    ztwm_0023-filename l_filename.
    INSERT ztwm_0023.

  ENDLOOP.

  COMMIT WORK.

  MESSAGE i290 WITH l_file.

ENDFORM.                    " ADIC


*&---------------------------------------------------------------------*
*&      Module  STATUS_9200  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_9200 OUTPUT.
  SET PF-STATUS '9200'.
  SET TITLEBAR '9200' WITH gw_alv-nuoco.

 
  IF gcl_cont_photo IS INITIAL.
    PERFORM carrega_imagens.
  ENDIF.

ENDMODULE.                 " STATUS_9200  OUTPUT
 



*&---------------------------------------------------------------------*
*&      Form  CARREGA_IMAGENS
*&---------------------------------------------------------------------*
FORM carrega_imagens .

* Create controls
  CREATE OBJECT gcl_cont_photo
    EXPORTING
      container_name 'CC_PHOTO'.

  CREATE OBJECT gcl_picture
    EXPORTING
      parent gcl_cont_photo.

* Load the picture for the handling unit
  CALL METHOD gcl_picture->set_display_mode
    EXPORTING
      display_mode cl_gui_picture=>display_mode_fit.
  CALL METHOD cl_gui_cfw=>flush.

  PERFORM load_picture USING g_pic_index.

ENDFORM.                    " CARREGA_IMAGENS

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9200  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_9200 INPUT.
  CASE sy-ucomm.
    WHEN 'BACK'.
      SET SCREEN 0.
      LEAVE SCREEN.

    WHEN 'ANT_PIC'.
      CHECK g_pic_index > 1.
      SUBTRACT FROM g_pic_index.
      PERFORM load_picture USING g_pic_index.

    WHEN 'PRO_PIC'.
      CHECK g_pic_index < linesgt_wm23 ).
      ADD TO g_pic_index.
      PERFORM load_picture USING g_pic_index.

  ENDCASE.

ENDMODULE.                 " USER_COMMAND_9200  INPUT

*&---------------------------------------------------------------------*
*&      Form  LOAD_PICTURE
*&---------------------------------------------------------------------*
FORM load_picture USING f_index.

  DATAlt_data TYPE STANDARD TABLE OF x255.

  DATAl_url TYPE char255.
  DATAl_content  TYPE xstring.
  DATAl_repid TYPE sy-repid,
        l_pic_size TYPE i.

  CHECK gcl_picture IS NOT INITIAL.

  CHECK f_index > 0.

  READ TABLE gt_wm23 INDEX f_index INTO gw_wm23.

* Read it from application server
  OPEN DATASET gw_wm23-filefull FOR INPUT IN BINARY MODE.
  IF sy-subrc <> 0.
    MESSAGE i288 WITH gw_wm23-filefull.
    CALL METHOD gcl_picture->clear_picture.
    EXIT.
  ENDIF.

  READ DATASET gw_wm23-filefull INTO l_content .
  CLOSE DATASET gw_wm23-filefull.

* Convert
  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
      buffer        l_content
    IMPORTING
      output_length l_pic_size
    TABLES
      binary_tab    lt_data.

* CReate URL
  CALL FUNCTION 'DP_CREATE_URL'
    EXPORTING
      type     'IMAGE'
      subtype  'JPG'
      size     l_pic_size
      lifetime cndp_lifetime_transaction
    TABLES
      data     lt_data
    CHANGING
      url      l_url.

* Load picture from URL
  gcl_picture->load_picture_from_url_asyncl_url ).

ENDFORM.                    " LOAD_PICTURE
 

Ampliação tela Cliente/Fornecedor



Primeiro passo: 
Criar um grupo de função Z*
Criar uma tela do tipo subtela
Adicionar nessa tela os campos do cliente q não possuem no standard – No meu caso incluí um campo  novo APPEND na tabela LFA1.  Salvar e ativar.


Passo 2 – Criar grupo de tela e implementações BADI 



- Preparar  ampliação  livre de modificações do mestre de fornecedores
- Incluir um novo grupo de telas.. no meu caso criei o “Z1” 



- Subtelas próprias do cliente



- Criar um novo – no meu caso o Z*
- Vai criar uma implementação para a instância de classe  VENDOR_ADD_DATA_CS


No valor de filtro colocar o Grupo de telas que foi criado na primeira etapa no caso Z1






No método – GET_TAXI_SCREEN

Codificar o método para que para o grupo de tela criado seja chamado o programa q foi criado no primeiro passo juntamente com a tela.
No método : SET_DATA
Codificar o método para gravar o campo de tela do programa Z no programa standard.
No caso eu criei uma função dentro do grupo de funções em q criei a tela para fazer essa trasferência de dados entre um programa e outro. O parâmetro I_ACTIVITY indica se o cadastro está em modo de criação, modificação ou exibição. No meu caso deixei para entrar na função apenas em modo edição e criação.

Código bem simples da função, apenas para carregar na memória meu programa e passar para o standard.
Método: GET_DATA
Nesse método vai pegar o dado do standard e jogar para  a tela do grupo de funções Z.
Código muito parecido com o SET_DATA onde tbm criei uma função.
- Código bem simples da função apenas para passagem dos dados.
 


- Lembrar que todos os outros métodos não utilizados devem ser criados mesmo q não tenha código algum.

- Salvar e ativar.. 



Segunda parte

Criar uma implementação para a BADI  VENDOR_ADD_DATA

- Dentro do método – CHECK_ADD_ON_ACTIVE 


Validar o grupo de telas criado para ativá-lo
 


- Lembrar que todos os outros métodos não utilizados devem ser criados mesmo q não tenha código algum.

- Salvar e ativar.. 


- Parte final.
- parametrização.
- Na transação SM30  - adicionar o parâmetro do grupo de tela criado
Visão:    V_TAXITABS_KRED
 


- Adicionar uma sequência ordinal e um código de função qualquer..  e a descrição.


Salvar.
 


Acessar a XK03 para testar. vai ficar com um botão para a tela criada. No meu caso Campos adicionais Martini.