+ All Categories
Home > Documents > Smartform_Passo a Passo AbapJr

Smartform_Passo a Passo AbapJr

Date post: 08-Dec-2015
Category:
Upload: rmcms
View: 102 times
Download: 4 times
Share this document with a friend
Description:
Passo a Passo para confecção de um Smartform
18
Best Practices Here are few of DOs and DONTs when working and designing a Smart Forms. Don’t slam Code lines Many times, Code lines are slammed with lot of code. Few reasons, you should NOT slam code lines node within the Smart Forms. Very small Editor: When you open the ABAP Editor to maintain the Code Lines, you would notice a very small window. If you are using a “normal” screen, you would run into double scrollbar issue as well. Since it is having double scroll bar and small editor, it would be difficult to write a code within it. Difficult to find: Since Code lines can exist at any node level, it would be very difficult to navigate when required to find a specific code lines Commented Code: Commented code in the beginning of the program lines, makes it more difficult to determine if there is any code or not. Instead, you should think about alternative approaches: Code Lines Node Usage: Use it only to do formatting on the data Code lines should be used for very few lines of code. Segregation of the Logic: Try to wrap the logic in an Object or a FM which can be easily called in more than one places. This would give you an opportunity to re-factor your code, write an ABAP Unit test case, Inherit existing functionality (if ABAP Objects is used) Rename each and every Node and its description
Transcript

Best Practices

Here are few of DOs and DONTs when working and designing a Smart Forms.

Don’t slam Code lines

Many times, Code lines are slammed with lot of code.

Few reasons, you should NOT slam code lines node within the Smart Forms.

Very small Editor: When you open the ABAP Editor to maintain the Code Lines, you would notice a very small window. If you are using a “normal” screen, you would run into double scrollbar issue as well. Since it is having double scroll bar and small editor, it would be difficult to write a code within it.

Difficult to find: Since Code lines can exist at any node level, it would be very difficult to navigate when required to find a specific code lines

Commented Code: Commented code in the beginning of the program lines, makes it more difficult to determine if there is any code or not.

Instead, you should think about alternative approaches:

Code Lines Node Usage: Use it only to do formatting on the data Code lines should be used for very few lines of code.

Segregation of the Logic: Try to wrap the logic in an Object or a FM which can be easily called in more than one places. This would give you an opportunity to re-factor your code, write an ABAP Unit test case, Inherit existing functionality (if ABAP Objects is used)

Rename each and every Node and its description

Justifications to rename every node

Unclear Purpose: If you don’t rename difficult to navigate and understand the purpose of the node. Its difficult to find relevant node and locate it. You can search the text in the FM by if the node is not renamed properly it won’t find it

Without proper naming, nodes would be like:

Properly documented node will help you and others to understand the purpose of the node:

Translation in SE63: Without proper name of the text node, it will appear like a TEXT01 TEXT02 etc. You would need to pay lot of extra attention to make sure you put the correct translation to correct node.

Without proper name, you will see this in SE63 while translating the SmartForms

With Proper Name, you would see nicely named text symbols in SE63:

Inactive Nodes

Many a times developers use 1=2 in condition to make that element “Inactive” from the form. This technique is fine as you want to retain that node and relevant logic within it. But, not maintaining proper documentation would make maintenance difficult. So, Make sure you update the description with phrase like COMMENTED, NOT USED, INACTIVE, etc.

Eventually in subsequent changes, these inactive nodes must be removed from the form. Too many inactive nodes will take long time for From to process.

Without Properly commented node, would be lost in the node tree of the Smartforms:

With proper comments, easy to find Inactive nodes:

Avoid Using Templates

Template needs definite space on the form. If you have many templates in single window which are conditionally printed on the form, Form will not complaint about the height of the window at time of Syntax check. This error will occur at run time and would be difficult to track.

Try to use LOOP with TABLE LINE. This will make sure that you don’t need definite space when you are printing dynamically.

Error Handling

After each generated FM call, make sure you get the errors as well whenever there is any exception. Call FM SSF_READ_ERRORS to retrieve the error message. Pass these message back to the NAST protocol if the SmartForm is being called from the Output control.

SmartForms Error Handling

  

CALL FUNCTION lf_fm_name EXPORTING archive_index = toa_dara archive_parameters = arc_params control_parameters = ls_control_param mail_recipient = ls_recipient mail_sender = ls_sender output_options = ls_composer_param user_settings = SPACE  IMPORTING job_output_info = ls_job_info EXCEPTIONS formatting_error = 1 internal_error = 2 send_error = 3 user_canceled = 4 OTHERS = 5.IF sy-subrc <> 0.* DATA: LT_ERRORTAB TYPE TSFERROR. FIELD-SYMBOLS: <FS_ERRORTAB> TYPE LINE OF TSFERROR.** get smart form protocoll CALL FUNCTION 'SSF_READ_ERRORS' IMPORTING ERRORTAB = LT_ERRORTAB.** add smartform protocoll to nast protocoll LOOP AT LT_ERRORTAB ASSIGNING <FS_ERRORTAB>. CALL FUNCTION 'NAST_PROTOCOL_UPDATE' EXPORTING MSG_ARBGB = <FS_ERRORTAB>-MSGID MSG_NR = <FS_ERRORTAB>-MSGNO MSG_TY = <FS_ERRORTAB>-MSGTY MSG_V1 = <FS_ERRORTAB>-MSGV1 MSG_V2 = <FS_ERRORTAB>-MSGV2 MSG_V3 = <FS_ERRORTAB>-MSGV3 MSG_V4 = <FS_ERRORTAB>-MSGV4 EXCEPTIONS OTHERS = 1. ENDLOOP.ELSE.** ENDIF. 

Breakpoints

Since many of the developers feel comfortable putting break point in the code lines for debugging purpose even though you can achieve Smartforms: Dynamic Breakpoints. If you have hard coded break point it would make it difficult for you to debug the same form in Quality system, where you don’t have access to remove the form. You would think, “Oh man, Why didn’t I remove this?”

Smartforms - Passo a Passo - Parte I  Ahhhhh,,, hoje vou comentar e mostrar pra vocês uns dos posts mais pedidospor todos os meios de comunicação que vocês tem comigo que ehhhhhhhhhh .....Bem,... não eh mais surpresa pois vocês devem ter lido o títulodeste post que é Smartforms,,,, Não custa lembrar mas esses posts passo apasso que eu coloco no blog são simples, mas fazem você sair do outrolado, espero que consigam adquirir ou pelomenos complementar algumconhecimento. Primeiramente temos que saber que Smartforms são relatórios de impressãodentro da sap, se vocês se lembram do Sapscript vão falar que é a mesmo

coisa, e é mesmo, pelomenos o resultado final, mas pra chegar até o momentoda impressão, os dois tem suas peculiaridades, o sapscript e bem mais dificilde visualizar enquanto o Smartforms ele tem uma janela lateral num formatohierarquico que você consegue desenvolver com maior nitidez, cada objeto devisualização da tela; pra eu não ficar falando os pros e os contras vamos começara fazer logo isso e vocês mesmos falam qual é o melhor depois. Vamos entrar na transação 'SMARTFORMS' ( é isso mesmo ).

 Olha só a tela aiii, ela é bem simples.... vamos dar um nome proformulário e clicar no botão 'Criar'. Fazendo isso você irá para tela onde nós efetivamente iremos trabalhar com acriação do Smartforms.

 Reparem que eu numerei as janelas para que não tenha problemas, Nº 1 - São os objetos, textos, janelas, logica de processamento,.. tudoque existe dentro do seu smartforms de forma hierárquica Nº 2 - Clicando na Parte Nº1 todos as informações, caracteristicas e funçõesdaquele objeto serão mostrados nessa janela. Nº 3 - Aqui e como tah ficando seu layout, conforme você vai desenvolvendoele vai criando automaticamente os objetos mas ficam jogados na tela, portantoclicando no botão 'FORM PAINTER' você conseguirá visualizar e mudar de posiçãotudo que foi criado não se esqueça das limitações que sua pagina têm rsrs.

 A idéia inicial deste formulário vai ser mostrar o resultado de um selectque será feito em um programa, estou começando pelo formulário, mas naverdade deveriamos começar pelo programa que irá dar carga no Smartforms,mas como será um passo a passo, vamos começar a explicar e fazer osmartforms juntos, irei fazer um smart simples, depois iremos para o programa,e depois voltamos para o Smart para deixarmos o mesmo um pouco maisinteressante. Primeira coisa que iremos fazer e buscar o logo da empresa para o smart,se você não lembra como adicionar imagem no SAP acesse o link abaixo.http://abapjuniores.blogspot.com.br/2012/01/importar-imagem-se78.html Clique com o Botão direito na Pagina 1 e faça conforme imagem abaixo.

 Clique duas vezes no objeto Gráfico e coloque as informações da imagem quedeseja mostrar. Depois de criado, aperte o Botão 'FORM PAINTER'  e posicione a imagem aondedesejar. Observação 1 : Lembrando que a Janela Principal ( MAIN ), como o nome delamesma diz, ela é a principal, e também a única que dá loop de dados, portantoquando quiser mostrar algo a nivel item você terá que colocar na 'Main'. Observação 2 : Diferentente que o Sapscript, o Smartforms pode ser executadodireto, clicando no F8 irá aparecer a tela da SE37 ( Função ) e um nome defunção bem loko, execute essa função e passe os parametros obrigatórios casotenha, informe a impressora e visualize... Não gaste papel a toa heimmm.

 Bem, antes de continuar, o formulário irá mostrar todos os dados de Spool( informações da pilha de impressão )do Usúario que executa o programa,os dados do cabeçalho será as informações do User, e os dados da Main ( Nivel Item ) serão as informações do Spool desse User. portanto como iremos trazer estes dados que foram selecionados no programapara o Smartforms, a resposta é simples, o Smartforms que você criou é naverdade uma função criada dinamicamente pelo sap num grupo de função tambémcriada só pra executar o seu Smart, daí como ele é tipo uma função significaque ele tem parametros de importação e exportação, e essas informações estãono menu 'Opções Globais / Interface de formulário' conforme imagem abaixo,façam conforme a imagem e criem na aba 'Tabelas' a tabela do tipo 'TSP01'que irá receber todos os dados do Spool. ( Usem a atribuição 'LIKE' ). Depois ative.

 Agora vamos criar uma janela para colocar as informações do header, primeiroclique com o botão direito na Pagina e selecione Criar/Janela,

 Depois disso deixe o layout conforme abaixo.

 Agora clique com o botão direito na janela criada e selecione Criar/Tabelae depois faça a mesma coisa só que selecionando Criar/Lógica de proces./linhas de programa, conforme abaixo.

 Iremos colocar uma informação na 'Area Principal' da tabela que acabamos decriar com uma logica de processamento, mas para isso precisaremos criar umavariável para receber o valor que a lógica irá retornar, lá na opções globaisda Smart existe o Menu 'Definições globais' clique duas vezes nele e crie avariável conforme abaixo.

 Ative. Clique duas vezes no code e coloque o código abaixo. Repare nas informações que eu coloquei nos parametros de entrada e de saida.

 Eu sei, vocês devem estar pensando... Mas porque esse louco tah fazendotudo isso só pra pegar o nome do primeiro user que é único? A resposta é bem simples, porque eu queria mostrar como colocar códigodentro do Smart, rsrsrs. Agora que nós pegamos o nome vamos jogar essa variável num lugar no Smartpara ser exibido, vamos clicar com o botão direito na Area principal databela que criamos dentro da janela1 que criamos também, veja imagem abaixo.

 Irá aparecer as informações daquela linha ( entrada tabela ) e vamosinformar qual a categoria de linha que aquela tabela têm, existe uma padrão,então coloque-a, mas a nivel item eu vou mostrar como trabalhar com issodireito, e sobre o campo 'Estilo' eu vou postar mais tarde como criar eatribuir um estilo para seu Smart que nada mais é do que informar o formatodas palavras que irão ser exibidas, percebam que depois que você atribuiuuma categoria de linha foi criada uma celula (coluna ) na linha da tabela,clique com o botão direito nessa celula e vá no menu Criar / texto conformeimagem.

 Depois de criada vá na aba 'Características Gerais' texto e clique nobotão 'Inserir Campo' alí perto do Lapizinho digíte a variável no campo'Campos' com a variável entre o caracter especial & ( E comenrcial ),tenso? rsrsrs, veja abaixo como.

 Ta muito zuado nosso Smart, falando de beleza lógico, rsrs, é o primeironé, então bele. Agora que nosso formulário tem informação header, vamoscolocar o que o pessoal mais tem medo num Smart que é colocar as informaçõesnivel item, o que na verdade é um grande mito, pois é muito de boa, como eutinha falado antes, tudo que for nivel item temos que colocar dentro dajanela principal pois somente lá e liberado o Loop, então vamos clicar como botão direito na janela Principal ( MAIN ) e criar uma tabela igualzinho aprimeira janela que criamos os dados Header, só que aki nós vamos ter quecriar alguns campinhos que virão na tabela de item e nesses campos terão queser mostrados informações de cada registro, conforme abaixo.

TabSmart       CampoItem          CampoTabelaTransp.campo 1 - Numero Spool          -     RQIDENTcampo 2 - Nome User             -     RQOWNERcampo 3 - Hora geração Spool    -     RQCRETIMEcampo 4 - Hora eliminação Spool -     RQDELTIMEcampo 5 - Dispositivo Saida     -     RQDEST

 Portanto temos que vamos criar essas 5 colunas nessa categoria de linha,o que também é muito fácil, depois de criar a tabela na Janela principalvamos clicar no botão 'Linhas e colunas' é um lápis que está na aba'Tabelas', e delimitar o tamanho de cada campo, caso queira fazer algo commedidas um pouco mais exatas é só clicar no botão 'Detalhes' e escrever otamanho das colunas que vão ficar os valores, pra voltar na tela anterior ésó clicar no botão 'Table Painter' veja imagem e vê se ajuda alguma coisa.

 Na tabela da Janela principal iremos trabalhar com as informações da tabelade item, para fazer esse 'Link' vá na aba 'Dados' digite o nome da tabela eo nome da estrutura que vai receber o mesmo, tipo o comando 'READ TABLE',reparem nas janelinhas 'Condição WHERE' e 'Critérios de Ordenação',o Smartforms é uma ferramenta bem completa.

  Voltando na aba 'Tabela' reparem que no espaço que riscamos as limitaçõesde cada linha está escrito '%LTYPE1' esse é o nome da sua categoria de linha,agora vamos criar uma linha( Entrada tabela ) igual a tabela que passamos,só que agora quando informarmos a categoria dessa linha será gerada5 celulas ( colunas )abaixo da mesma, e em cada uma delas vamos criar um texto

e em cada texto vamos colocar um campo da estrutura que irá receber os dadostabela de itens que colocamos na aba 'Dados' anteriormente, façam conforme aimagem abaixo e conforme a tabelinha que eu informei acima.

 Ative, Ufa, parece que acabamos a parte de desenho, agora vamos pra nossarazão de viver, os códigos, to brincando, a parte dos códigos vamos no próximopost porque se eu to cansado de escrever vocês devem estar cansado jah de ler,portanto, proximo post sobre o programa que chama o Smart e alguns comentáriospertinentes ao assunto Smartforms, e depois vamos começar a entrar um poucomais fundo no assunto. Bons Estudos e vamo lá rapaziada, qualquer duvida estoua disposição, tentarei responder o máximo no menor prazo possível.

Postado por Mauro Luiz Junior às 05:44 Marcadores: ABAP, Smartforms, Transações

6 comentários:

1.

Vinícius de Morais Mussato11 de setembro de 2012 10:17

Excelente post. No aguardo da parte 2 :)

Responder

2.

Mauro Luiz Junior12 de setembro de 2012 06:49

Logo Mais...

Responder

3.

Alê Henrique25 de setembro de 2012 07:44

Isso ae Maurão, só alegria.

Responder

4.

Anônimo11 de abril de 2013 10:58

Muito bom mesmo!Somente uma ressalva... como eu defino o tamanho do logo ?

Responder

5.

Mauro Luiz Junior6 de maio de 2013 06:32

Fala Mano, na hora que você tiver atribuindo a imagem ao objeto gráfico do seu Smartforms, você vai precisar colocar, NOME , OBJETO e ID.... Logo abaixo vai ter um frame Escrito... 'Características técnicas' Na resolução, dependendo do valor que colocar a imagem aumenta ou diminui.Espero ter ajudado.

Responder

6.

Fernando Silva31 de julho de 2015 06:47

Mauro, parabéns pelos posts... esse foi meio difícil de acompanhar, mas estou tentando! hahaha... vou ver a parte 2! Valeu!

Smartforms - Passo a Passo - Parte II * Olha ai, essa e a segunda parte sobre Smartforms onde agora falaremos* sobre o programa que irá chamar e popular seu Smartforms.* lembrando que depois desse passo iremos deixar esse mesmo Smart com* uma cara de documento mesmo, e não esse rascunho de nada que fizemos,* faremos tratativas de dados internos, criaremos mas parametros de* Importação e tabelas, sem conta o Estilo que mostrei num proximo post.* Bons estudos.*&---------------------------------------------------------------------*REPORT z_prog_call_smartforms.

DATA : it_tsp01 TYPE TABLE OF tsp01, vl_fm_name TYPE rs38l_fnam.CONSTANTS :* Aqui voçês coloquem o nome do Smartforms de vocês. c_form TYPE rs38l_fnam VALUE 'ZSD_TESTE2'.

START-OF-SELECTION.

SELECT * FROM tsp01 INTO TABLE it_tsp01 WHERE rqowner = sy-uname.

BREAK-POINT.

* Eu mantive os comentários do Post sobre essa função. Good Luck.

IF it_tsp01 IS NOT INITIAL.

* Executada a função que retorna o nome da função que chama o formulário PERFORM z_busca_nome_function.

* Executa o function que chama o formulário. PERFORM z_call_form.

ENDIF.

*&---------------------------------------------------------------------**& Form z_busca_nome_function*&---------------------------------------------------------------------*FORM z_busca_nome_function .

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING formname = c_form* VARIANT = ' '* DIRECT_CALL = ' ' IMPORTING fm_name = vl_fm_name EXCEPTIONS no_form = 1 no_function_module = 2 OTHERS = 3 .

ENDFORM. " z_busca_nome_function*&---------------------------------------------------------------------**& Form z_call_form*&---------------------------------------------------------------------*FORM z_call_form .* Uma diquinha pra que você traga todos os parametros corretos é executar* o smartforms, quando você apertar F8 ele ira para a transação se37 com* função já escrita no campo do nome da função, copie o nome daquela função,* volte para esse programa, clique no botão MODELO e e cole o nome da função,* mas não se esqueça que esse nome de função é temporário, portanto, depois* de fazer esse procedimento mude o nome da função que você colou pela variavel* de retorno da função acima conforme eu fiz abaixo.

CALL FUNCTION vl_fm_name* EXPORTING* ARCHIVE_INDEX =* ARCHIVE_INDEX_TAB =* ARCHIVE_PARAMETERS =* CONTROL_PARAMETERS =* MAIL_APPL_OBJ =* MAIL_RECIPIENT =* MAIL_SENDER =* OUTPUT_OPTIONS =* USER_SETTINGS = 'X'* IMPORTING* DOCUMENT_OUTPUT_INFO =* JOB_OUTPUT_INFO =* JOB_OUTPUT_OPTIONS = TABLES it_tsp01 = it_tsp01 EXCEPTIONS

formatting_error = 1 internal_error = 2 send_error = 3 user_canceled = 4 OTHERS = 5 . IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.

ENDFORM. " z_call_form


Recommended