*--------------------------------------------------------------------*
* Eae galera, sempre em nossas vidas de ABAP, vamos precisar saber
* fazer download e upload de arquivo, sabemos tambem que estas mesmas funções
* 'GUI_DOWNLOAD' e 'GUI_UPLOAD' estão obsoletas.
* Conforme o 'F1' da função o mesmo indica você usar a classe
* 'CL_GUI_FRONTEND_SERVICES' que será a classe que vamos estudar hoje.
* Tentarei mostrar alguns Metodos interessantes dessa classe que trabalham
* com arquivos e pastas.
* A ideia desse programa será bem simples, ele te possibilita criar uma
* pasta e incluir nela copias dos arquivos de uma outra pasta, e no final
* , como tudo isso é só para teste, existe a possibilidade de deletar todos
* os arquivos copiados juntamente com a pasta caso deseje. Esse programa
* não fara nenhuma alteração de algum arquivo que você já tenha no Desktop,
* irá trabalhar somente com os criados pelo proprio programa.
* Recomendo criar uma pasta qualquer, incluir um arquivo qualquer também
* e começar a brincadeira.
* Como sempre faço, existem algums Breaks no código para forçá-los a
* entender o que cada metodo faz. Abaixo a lista dos metodos usados dessa
* Classe.
* cl_gui_frontend_services=>directory_browse
* cl_gui_frontend_services=>directory_create
* cl_gui_frontend_services=>directory_exist
* cl_gui_frontend_services=>directory_delete
* cl_gui_frontend_services=>directory_list_files
* cl_gui_frontend_services=>file_copy
* cl_gui_frontend_services=>file_exist
* cl_gui_frontend_services=>file_get_attributes
* cl_gui_frontend_services=>file_delete
* Lembando que o código está simples, mais para estudos mesmo, sugestões,
* critina ou qualquer tipo de opnião estamos disponivel no final do post,
* a nomenclatura dos metodos estão bem intuitivas para não precisar comentar
* muito, mas qualquer duvida estamos aí também.
* Bons estudos aeeee.
REPORT z_cl_gui_frontend_services.
TABLES :
sscrfields.
CLASS
zcl_main DEFINITION DEFERRED.
DATA :
o_main TYPE REF TO zcl_main.
DATA :
subrc TYPE sy-subrc,
result TYPE abap_bool,
gt_file_table TYPE rstt_t_files.
* T01 - Pastas
* C01 - Processar
* T02 - Arquivos
* T03 - Deletar arquivos e pastas novas após o processo ?
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.
PARAMETERS :
folder TYPE string,
n_folder TYPE string DEFAULT 'teste'.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-t02.
PARAMETERS :
folder2 TYPE string.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-t03.
PARAMETERS :
del_fold AS CHECKBOX DEFAULT abap_true,
del_file AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN END OF BLOCK b3.
CLASS zcl_main DEFINITION.
PUBLIC SECTION.
METHODS:
*--------------------------------------------------------------------*
directory,
*--------------------------------------------------------------------*
directory_browse
IMPORTING
iv_title TYPE string
CHANGING
cv_folder TYPE string,
*--------------------------------------------------------------------*
directory_create
IMPORTING
iv_directory TYPE string
CHANGING
cv_rc TYPE sy-subrc,
*--------------------------------------------------------------------*
directory_exist
IMPORTING
iv_directory TYPE string
CHANGING
cv_result TYPE abap_bool,
*--------------------------------------------------------------------*
directory_delete
IMPORTING
iv_directory TYPE string
CHANGING
cv_rc TYPE sy-subrc,
*--------------------------------------------------------------------*
directory_list_files
IMPORTING
iv_directory TYPE string
EXPORTING
ev_count TYPE i
CHANGING
ct_file_table TYPE rstt_t_files,
*--------------------------------------------------------------------*
file
CHANGING
ct_file_table TYPE rstt_t_files,
*--------------------------------------------------------------------*
file_copy
IMPORTING
iv_source TYPE string
iv_destination TYPE string
iv_overwrite TYPE abap_bool OPTIONAL
EXPORTING
ev_rc TYPE sy-subrc,
*--------------------------------------------------------------------*
file_exist
IMPORTING
iv_file TYPE string
EXPORTING
ev_result TYPE abap_bool,
*--------------------------------------------------------------------*
file_get_attributes
IMPORTING
iv_file TYPE string
EXPORTING
ev_attributes TYPE char10,
*--------------------------------------------------------------------*
popup_to_confirm_files
CHANGING
ct_file_table TYPE rstt_t_files,
*--------------------------------------------------------------------*
popup_to_confirm
IMPORTING
iv_title TYPE string
iv_question TYPE string
EXPORTING
ev_answer TYPE char1,
*--------------------------------------------------------------------*
delete_folder,
*--------------------------------------------------------------------*
delete_file
CHANGING
ct_file_table TYPE rstt_t_files,
*--------------------------------------------------------------------*
file_delete
IMPORTING
iv_file TYPE string
EXPORTING
ev_rc TYPE sy-subrc
.
ENDCLASS.
segunda-feira, 17 de julho de 2017
quinta-feira, 6 de julho de 2017
Alterando Request já liberada - RDDIT076
* Na marioria das vezes, o transporte de request realizado de forma
* organizada, padronização de nomenclatura, destino, essas coisas,
* Mas as vezes fazemos requests fora do padrão, aguardando alguma informação
* que complete essa nomenclatura padrão, o problema é quando liberamos
* para essa mesma request transporte ( =( ), procurando na internet algo
* que resolvesse isso encontrei o programa 'RDDIT076', esse mesmo programa
* Faz a alteração de quase tudo sobre a request ( incluindo Status, caso
* queira deixar modificavel(D) novamente ). A execução dela é bem simples
* mas como tudo.... MUITO CUIDADO. Para não mexer em algo que não devesse.
* Abaixo uns prints com o processo.
* Primeiramente Com o numero da request reservada vamos na transação se38,
* colocar 'RDDIT076' e dar 'F8', apos executado informar a request.
* Irá aparaecer uma tela com dados principais da request e as tasks da mesma,
* clique duas vezes, ou seleciona a request e aperte o botão de detalhamento.
* organizada, padronização de nomenclatura, destino, essas coisas,
* Mas as vezes fazemos requests fora do padrão, aguardando alguma informação
* que complete essa nomenclatura padrão, o problema é quando liberamos
* para essa mesma request transporte ( =( ), procurando na internet algo
* que resolvesse isso encontrei o programa 'RDDIT076', esse mesmo programa
* Faz a alteração de quase tudo sobre a request ( incluindo Status, caso
* queira deixar modificavel(D) novamente ). A execução dela é bem simples
* mas como tudo.... MUITO CUIDADO. Para não mexer em algo que não devesse.
* Abaixo uns prints com o processo.
* Primeiramente Com o numero da request reservada vamos na transação se38,
* colocar 'RDDIT076' e dar 'F8', apos executado informar a request.
* Irá aparaecer uma tela com dados principais da request e as tasks da mesma,
* clique duas vezes, ou seleciona a request e aperte o botão de detalhamento.
segunda-feira, 26 de junho de 2017
Função - REUSE_ALV_POPUP_TO_SELECT
REPORT zreuse_alv_popup_to_select.
*--------------------------------------------------------------------*
* Fala pessoal, hoje irei mostrar algo que facilita muito escolhas de
* registro em massa em um ALV, para fazer isso usarei a função
* 'REUSE_ALV_POPUP_TO_SELECT' que irá exibir todas as opções de seleção
* em massa.
* Estarei trabalhando com um exemplo simples que trará todos os objetos
* criados pelo usuário que executar o programa.
* A lista de opções de seleção de linhas do ALV será criada baseada nos
* tipos de objetos ( TADIR-OBJECT ).
* Espero que gostem desse metodo que ajudará muito na seleção de linhas
* do ALV, onde além de fazer linha por linha, será feito conforme range
* definido no PopUP.
* Segue no final do código os prints do processo.
* Valeo.
* Tipos.
TYPES :
BEGIN OF ty_tadir,
selected.
INCLUDE TYPE tadir.
TYPES :
END OF ty_tadir.
TYPES :
BEGIN OF ty_popup,
select,
text(50),
END OF ty_popup.
* Tabela global.
DATA :
gt_popup TYPE TABLE OF ty_popup.
* Variaveis referente ao ALVV
DATA :
* Objetos
o_docking TYPE REF TO cl_gui_docking_container,
o_grid TYPE REF TO cl_gui_alv_grid,
* Tabelas internas
gt_tadir TYPE TABLE OF ty_tadir,
gt_fieldcat TYPE TABLE OF lvc_s_fcat,
gt_exclude TYPE TABLE OF ui_func,
* Estruturas
gs_layout TYPE lvc_s_layo.
* Ranges
DATA :
r_object TYPE RANGE OF char20.
* Inicio do processo.
START-OF-SELECTION.
* Quando criarem a tela do ALV ( 9001 ) coloquem o código abaixo na tela.
*--------------------------------------------------------------------*
*PROCESS BEFORE OUTPUT.
* MODULE :
* status_9001,
* inicialization_9001.
*
*PROCESS AFTER INPUT.
* MODULE :
* user_command_9001.
*--------------------------------------------------------------------*
* Tela ALV principal.
CALL SCREEN 9001.
*&---------------------------------------------------------------------*
*& Form POPUP_COM_MULTIPLA_ESCOLHA
*&---------------------------------------------------------------------*
FORM popup_com_multipla_escolha .
DATA :
ls_popup LIKE LINE OF gt_popup,
lt_fcat_popup TYPE TABLE OF slis_fieldcat_alv,
ls_fcat_popup LIKE LINE OF lt_fcat_popup,
lt_excl TYPE slis_t_extab,
ls_excl TYPE slis_extab,
ls_object LIKE LINE OF r_object.
* Catalogo de campos do PopUp de opções.
ls_fcat_popup-tabname = 'LT_POPUP'.
ls_fcat_popup-col_pos = '1'.
ls_fcat_popup-fieldname = 'SELECT'.
ls_fcat_popup-seltext_m = 'SELECT'.
APPEND ls_fcat_popup TO lt_fcat_popup.
ls_fcat_popup-col_pos = '2'.
ls_fcat_popup-fieldname = 'TEXT'.
ls_fcat_popup-seltext_m = 'Status'.
ls_fcat_popup-outputlen = 50.
APPEND ls_fcat_popup TO lt_fcat_popup.
* Exclusão dos botões padrões do ALV.
ls_excl-fcode = '&ETA'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '%SC'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '%SC+'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&OUP'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&ODN'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&ILT'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&OL0'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&CRB'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&CRL'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&CRR'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&CRE'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&ALL'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&SAL'. APPEND ls_excl TO lt_excl.
CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
EXPORTING
i_title = 'Tipos de Objetos'
i_zebra = abap_true
i_screen_start_column = 1
i_screen_start_line = 1
i_checkbox_fieldname = 'SELECT'
i_tabname = 'LT_POPUP'
it_fieldcat = lt_fcat_popup
it_excluding = lt_excl
TABLES
t_outtab = gt_popup
EXCEPTIONS
program_error = 1
OTHERS = 2.
FREE r_object.
IF gt_popup[] IS NOT INITIAL.
LOOP AT gt_popup INTO ls_popup.
IF ls_popup-select = abap_true..
ls_object-sign = 'I'.
ls_object-option = 'EQ'.
ls_object-low = ls_popup-text.
APPEND ls_object TO r_object.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM.
*--------------------------------------------------------------------*
* Fala pessoal, hoje irei mostrar algo que facilita muito escolhas de
* registro em massa em um ALV, para fazer isso usarei a função
* 'REUSE_ALV_POPUP_TO_SELECT' que irá exibir todas as opções de seleção
* em massa.
* Estarei trabalhando com um exemplo simples que trará todos os objetos
* criados pelo usuário que executar o programa.
* A lista de opções de seleção de linhas do ALV será criada baseada nos
* tipos de objetos ( TADIR-OBJECT ).
* Espero que gostem desse metodo que ajudará muito na seleção de linhas
* do ALV, onde além de fazer linha por linha, será feito conforme range
* definido no PopUP.
* Segue no final do código os prints do processo.
* Valeo.
* Tipos.
TYPES :
BEGIN OF ty_tadir,
selected.
INCLUDE TYPE tadir.
TYPES :
END OF ty_tadir.
TYPES :
BEGIN OF ty_popup,
select,
text(50),
END OF ty_popup.
* Tabela global.
DATA :
gt_popup TYPE TABLE OF ty_popup.
* Variaveis referente ao ALVV
DATA :
* Objetos
o_docking TYPE REF TO cl_gui_docking_container,
o_grid TYPE REF TO cl_gui_alv_grid,
* Tabelas internas
gt_tadir TYPE TABLE OF ty_tadir,
gt_fieldcat TYPE TABLE OF lvc_s_fcat,
gt_exclude TYPE TABLE OF ui_func,
* Estruturas
gs_layout TYPE lvc_s_layo.
* Ranges
DATA :
r_object TYPE RANGE OF char20.
* Inicio do processo.
START-OF-SELECTION.
* Quando criarem a tela do ALV ( 9001 ) coloquem o código abaixo na tela.
*--------------------------------------------------------------------*
*PROCESS BEFORE OUTPUT.
* MODULE :
* status_9001,
* inicialization_9001.
*
*PROCESS AFTER INPUT.
* MODULE :
* user_command_9001.
*--------------------------------------------------------------------*
* Tela ALV principal.
CALL SCREEN 9001.
*&---------------------------------------------------------------------*
*& Form POPUP_COM_MULTIPLA_ESCOLHA
*&---------------------------------------------------------------------*
FORM popup_com_multipla_escolha .
DATA :
ls_popup LIKE LINE OF gt_popup,
lt_fcat_popup TYPE TABLE OF slis_fieldcat_alv,
ls_fcat_popup LIKE LINE OF lt_fcat_popup,
lt_excl TYPE slis_t_extab,
ls_excl TYPE slis_extab,
ls_object LIKE LINE OF r_object.
* Catalogo de campos do PopUp de opções.
ls_fcat_popup-tabname = 'LT_POPUP'.
ls_fcat_popup-col_pos = '1'.
ls_fcat_popup-fieldname = 'SELECT'.
ls_fcat_popup-seltext_m = 'SELECT'.
APPEND ls_fcat_popup TO lt_fcat_popup.
ls_fcat_popup-col_pos = '2'.
ls_fcat_popup-fieldname = 'TEXT'.
ls_fcat_popup-seltext_m = 'Status'.
ls_fcat_popup-outputlen = 50.
APPEND ls_fcat_popup TO lt_fcat_popup.
* Exclusão dos botões padrões do ALV.
ls_excl-fcode = '&ETA'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '%SC'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '%SC+'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&OUP'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&ODN'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&ILT'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&OL0'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&CRB'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&CRL'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&CRR'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&CRE'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&ALL'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&SAL'. APPEND ls_excl TO lt_excl.
CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
EXPORTING
i_title = 'Tipos de Objetos'
i_zebra = abap_true
i_screen_start_column = 1
i_screen_start_line = 1
i_checkbox_fieldname = 'SELECT'
i_tabname = 'LT_POPUP'
it_fieldcat = lt_fcat_popup
it_excluding = lt_excl
TABLES
t_outtab = gt_popup
EXCEPTIONS
program_error = 1
OTHERS = 2.
FREE r_object.
IF gt_popup[] IS NOT INITIAL.
LOOP AT gt_popup INTO ls_popup.
IF ls_popup-select = abap_true..
ls_object-sign = 'I'.
ls_object-option = 'EQ'.
ls_object-low = ls_popup-text.
APPEND ls_object TO r_object.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM.
quinta-feira, 25 de maio de 2017
Função - DD_DOMVALUES_GET
REPORT valores_de_dominios.
* Fala Pessoal, estou desenvolvendo um relatorio que irá trabalhar com
* informações de requests do ambiente, para um controle mais detalhado
* para a gerencia técnica e os mesmos me pediram pra colocar tudo sobre
* as requests e objetos incluindo os status deles, como na maioria dos
* textos sempre ficam em tabela separada conforme exemplo
* ( Ex1. MARA( Material ) -> MAKT ( Textos Material )
* Ex2. J_1BDOCTYPES ( Tipo de documento ) -> J_1BDOCTYPEST ( Textos ... )
* Visualizando as tabelas pela transação SE16N é possivel ver a tabela de
* Textos referente a tabela consultada.
* Isso facilita muito pegar os textos, mas as vezes os textos não estão em
* tabelas, estão implícitas dentro do dominio.
* Perceba que na imagem acima não está informado o campo 'Tab. Valores'
* onde estaria a tabela dos possiveis textos, além disso, os textos descritivos
* estão diretamente no dominio.
* Pra conseguir reservar essas informações que estão no dominio e só usar
* a função do titulo do post e pronto, rsrs.
* Segue um codigo que fiz como exemplo onde alimento a tabela com
* informações de dois dominios, para que vocês percebam que a tabela
* de retorno é a mesma e dentro da mesma é definido uma chave (DOMNAME),
* assim facilitando a busca.
* Fala Pessoal, estou desenvolvendo um relatorio que irá trabalhar com
* informações de requests do ambiente, para um controle mais detalhado
* para a gerencia técnica e os mesmos me pediram pra colocar tudo sobre
* as requests e objetos incluindo os status deles, como na maioria dos
* textos sempre ficam em tabela separada conforme exemplo
* ( Ex1. MARA( Material ) -> MAKT ( Textos Material )
* Ex2. J_1BDOCTYPES ( Tipo de documento ) -> J_1BDOCTYPEST ( Textos ... )
* Visualizando as tabelas pela transação SE16N é possivel ver a tabela de
* Textos referente a tabela consultada.
* Isso facilita muito pegar os textos, mas as vezes os textos não estão em
* tabelas, estão implícitas dentro do dominio.
* Perceba que na imagem acima não está informado o campo 'Tab. Valores'
* onde estaria a tabela dos possiveis textos, além disso, os textos descritivos
* estão diretamente no dominio.
* Pra conseguir reservar essas informações que estão no dominio e só usar
* a função do titulo do post e pronto, rsrs.
* Segue um codigo que fiz como exemplo onde alimento a tabela com
* informações de dois dominios, para que vocês percebam que a tabela
* de retorno é a mesma e dentro da mesma é definido uma chave (DOMNAME),
* assim facilitando a busca.
segunda-feira, 13 de março de 2017
Debuggando processo em UPDATE TASK e SM13
*--------------------------------------------------------------------*
* Fala Galera, hoje vou mostrar como faz para debuggar processos em
* Update Task. Funções que são executadas em update Task são reservadas
* e são somentes processadas quando executada o commando 'COMMIT WORK',
* esse comando irá processar tudo pue ficou na pilha pra ser processado
* depois. Vamos lá.
* Observações : Estarei realizando essa demonstração com vocês com uma
* função muito importante de atualização de dados da Nota fiscal, mas
* logo no começo dela já tem uma validação do campo DOC_NUMBER, portanto
* não alimente esse campo, para não ter problemas de atualizar algo que
* não deveria.
* Primeiramente para usar uma função em 'update task', a mesma, tem que
* ser uma função de atualização.
* Agora coloque o código abaixo e vamos pros testes.
* Primeira coisa que devemos fazer quando parar no primeiro 'break' e ir
* no menu 'Configurações->Modificar Configurações/Perfil Depurador' e entrar
* nessa janela abaixo
* 'Flag' o campo 'Depur. Atualização'.
Assinar:
Postagens (Atom)