terça-feira, 27 de outubro de 2020

Gerenciando Catálogos e Grupos no Fiori

 

    Faaaaaaaala pessoal, voltei como prometido para mais um post de Fiori!!

    No post anterior mostrei para vocês como cria uma app no Fiori Lauchpad a partir de uma transação do S4. Hoje vou mostrar como você gerencia quem pode (ou não) ver esse app de acordo com o usuário do ambiente do Fiori. Faremos isso a partir de um exemplo que vai explicar todo o processo desde a criação do Catálogo e seu Grupo.

    Uma coisa que faltou deixar claro no post anterior é que, dependendo de qual foi a arquitetura escolhida na fase de projeto, podemos ter o ambiente do Fiori separado do ambiente do S4. Dessa forma os usuários não são os mesmos apesar de poderem ter o mesmo nome. Resolvi voltar um pouco nisso pois todas as configurações a seguir são referentes ao usuário do ambiente do Fiori.

    Mãos na massa!! Primeiro vamos criar o catálogo acessando a transação /UI2/FLPD_CUST:

 

terça-feira, 13 de outubro de 2020

App Fiori Baseado em Qualquer Transação

 

    Faaaaaaala pessoal do mundo ABAP!!! Sangue novo na área!!

    Meu nome é João Carlos Keusseyan Fernandes, mas se já quiser ser meu chegado pode me chamar  de filho do Mauro (brinks!!).

    E já que eu estou chegando para ficar já vou fazer aquele postada dourada de um assunto que pouca gente domina. Bora falar de Fiori!!

    Hoje vou ensinar vocês a colocar qualquer transação do S4 para rodar no front-end do Fiori.

    Para quem não está nem um pouco familiarizado, o Fiori “é uma coleção de apps que representam uma parte de um novo paradigma de experiência do usuário” (típica explicação chata de material de prova). Basicamente ele fornece um conjunto de aplicativos que são usados da mesma forma que as transações que nós conhecemos só que de forma mais inteligente, eficiente, com umas paradas gráficas bem legais e umas outras funcionalidades (pessoal sênior em Fiori quer me matar agora).

    No Fiori as aplicações são exibidas para o usuário com o formato de tiles. Estes tiles são criados dentro de um catálogo que pertencem a um grupo de catálogos através de uma dualidade tile/link (confuso pra caramba não é mesmo?!). Estes grupos/catálogos sempre precisam estar presentes na configuração do usuário, se não o carinha nunca vai poder visualizar a aplicação. Não esquentem com toda essa parte teórica, pois farei uma outra postagem explicando como configura tudo isso.

    Primeiramente precisamos criar uma parada que se chama Objeto Semântico. Esse carinha é usado para fazermos o Target Mapping que é justamente a comunicação do nosso tile com a nossa transação do S4.

    Para criar o Semantic Object acessamos o tcode /UI2/SEMOBJ (sempre com o /n antes) e adicionamos uma linha conforme segue:




    Com isso podemos acessar o Lauchpad Design (que é onde gerenciamos os tiles, catálogos e grupos) pela transação /UI2/FLPD_CUST.

quinta-feira, 25 de abril de 2019

Business Transaction Events ( BTE ) - FIBF

*  Bom dia pessoal, iremos falar hoje sobre uma negocio que é usado no
* modulo de FI, a não muito famosa BTE ( Business Transaction Events ).
*  BTE são funções pré definidas e chamadas pelo standard, são pré definidas
* para que saibamos a assinatura ( parametros de importação e Expostação ),
*  Bom.... Vamos colocando a mão na massa e durante as ações eu vou
* tentando explicar, lembrando que o comentario de vocês ajuda muito
* a melhorar o Post caso necessario.

*  Primeiro passo, como tudo na vida, antes de implementar a BTE temos que
* saber o que vamos fazer que será necessario uma BTE, faremos uma coisa
* bem simples, iremos atualizar um campo da linha de documento contabil (BSEG)
* no momento da gravação. Agora sabendo o que vamos fazer, vamos para a
* transação 'FIBF' e entramos no Menu 'Ambiente / Sistemas Info ( Processos ).




*  Vamos colocar o 'Tipo de atributo' igual a 'A' ( Componente de aplicação )



*  Vamos trabalhar com '00001430 MODIFICAR DOCUMENTO:substit.campo cab./linha'
* clicando na Botão 'Interface' conseguimos ver a assinatura e clicando no
* botão 'Modulo de função modelo'... você pode não acreditar, mas irá
* mostrar uma função que podemos usar como modelo ( rsrs ).




quinta-feira, 3 de janeiro de 2019

Como disponibilizar / preencher novos campos para tabela de determinação de conta SD

Fala galera, belezinha ? Hoje vou mostrar como incluir campos nas tabelas de determinação de preço / conta de SD; as vezes o funcional precisa de mais campos com uma regra de calculo para
definir o valor, no standard não tem a opção 'tipo de decumento de vendas' o famoso AUART, estaremos disponibilizando esse campo para o funcional continuar com o seu trabalho, vamos lá.

Primeiramente precisamos definir se o campo que desejamos disponibilizar é uma informação a nivel de Header( KOMKCZ ) ou Item( KOMPCZ ) e assim definir a tabela a qual será colocada um APPEND, no nosso exemplo eu coloquei dois campos a nivel de header ( AUART e FKART ) e um campo a nivel de item ( PSTYV ).

Header :



Item :



Abaixo mostrando os campos adicionais no catalogo de campos para a criação da determinação.


segunda-feira, 17 de julho de 2017

Classe - 'CL_GUI_FRONTEND_SERVICES'

*--------------------------------------------------------------------*
*  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.

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.


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.

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.