2010-09-17 19 views
2

Je pense qu'il me manque probablement un paramètre d'exportation (de mon POV d'appel de fonction).Comment puis-je faire apparaître mes données dans mon ALV?

Dans l'appel de fonction, les paramètres que je passe autour sont: Exportation: i_callback_program, i_callback_pf_status_set, i_callback_user_command, is_layout, it_fieldcat, i_save Tables: t_outtab Et les exceptions ainsi que la manipulation.

J'ai vérifié que la table interne que je passe a des données et c'est le cas.

Je pense que les informations que j'ai mises en place suffiront mais si vous avez vraiment besoin de voir le code, je le ferai.

Je suis un noob et toute aide serait appréciée.

Thanx.

+0

Quel module fonction appelez-vous? – BenV

+0

Vous devriez toujours fournir un exemple de code si possible, cela aurait rendu la réponse beaucoup plus facile. – vwegert

Répondre

1

Il existe plusieurs façons d'utiliser ALV, nous pouvons donc avoir besoin de plus d'informations sur votre code pour vous aider.

  • La première méthode consiste à utiliser le module de fonction REUSE_ALV_GRID_DISPLAY. Cela affichera directement le contenu de la table dans la sortie dynpro. Si tout ce dont vous avez besoin est un affichage, alors allez-y, car c'est le plus simple: Si la structure de la table est dans le dictionnaire, cet appel peut être aussi simple que ceci (ceci affichera tous les membres de la structure comme

myreport = sy-repid. 
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' 
     EXPORTING 
      i_callback_program   = myreport 
      it_excluding    = exclude_tab 
     TABLES 
      t_outtab     = display_data 
     EXCEPTIONS 
      program_error    = 1 
      OTHERS      = 2. 

Si la structure est déclarée dans le programme, vous devez créer un catalogue sur le terrain. le code suivant peut servir de base:

FORM fill_fieldcat CHANGING p_fieldcat TYPE slis_t_fieldcat_alv. 

* Data definition 
    DATA ls_fieldcat TYPE slis_fieldcat_alv. 

* Macro definition 
    DEFINE append_fieldcat. 
    clear ls_fieldcat. 

    ls_fieldcat-fieldname  = &1. * name of the field in struct 
    ls_fieldcat-tabname  = &2. * name of the table 
    ls_fieldcat-row_pos  = &3. * column 
    ls_fieldcat-ref_fieldname = &4. * field in ref table 
    ls_fieldcat-ref_tabname = &5. * ref table 
    ls_fieldcat-outputlen  = &6. * size of output 
    ls_fieldcat-seltext_m  = &7. * text (space if using the element typetext) 
    ls_fieldcat-ddictxt  = 'M'. 
    ls_fieldcat-key   = &8. * is this a key field in table 
    ls_fieldcat-emphasize  = &9. * emphisze column display 

    append ls_fieldcat to p_fieldcat. 
    END-OF-DEFINITION. 

* Init. 
    REFRESH p_fieldcat. 

* Append fielcatalog for ALV 
    append_fieldcat: 
    'FORMATIONCODE' 'DISPLAY_TAB' 1 'SHORT' 'HRP1000' 12 'Code Stage'  space space, 
    'FORMATIONTEXT' 'DISPLAY_TAB' 1 'STEXT' 'HRP1000' 20 'Libelle Stage' space space, 
    'SESSIONID'  'DISPLAY_TAB' 1 'OBJID' 'HRP1000' space 'Session'  space space, 
    'BEGDA'   'DISPLAY_TAB' 1 'BEGDA' 'HRP1000' space 'Debut'   space space, 
    'ENDDA'   'DISPLAY_TAB' 1 'BEGDA' 'HRP1000' space 'Fin'   space space, 
ENDFORM.     "fill_fieldCat 

vous appelez alors le formulaire pour créer le catalogue sur le terrain, et l'utiliser dans le paramètre it_fieldcat de l'appel de fonction.

  • La deuxième méthode consiste à utiliser ABAP-Object. Utilisez le contrôle se83 pour des exemples de cette utilisation. la base est la suivante:

Dans votre Dynpro, vous déclarez un conteneur personnalisé avec un nom donné ("ALV_CONT"). Puis, alors PBO du dynpro vous initialisez le récipient et mettre un objct ALV intérieur:

* global variables : 
DATA : delegationlist_table  TYPE REF TO cl_gui_alv_grid, 
     delegationlist_container TYPE REF TO cl_gui_custom_container. 
data : gs_layout TYPE lvc_s_layo. 

dans PBO

IF delegationlist_container IS INITIAL. 
* create a custom container control for our ALV Control 
    CREATE OBJECT delegationlist_container 
     EXPORTING 
     container_name    = 'ALV_CONT' 
     EXCEPTIONS 
     cntl_error     = 1 
     cntl_system_error   = 2 
     create_error    = 3 
     lifetime_error    = 4 
     lifetime_dynpro_dynpro_link = 5. 

* create an instance of alv control 
    CREATE OBJECT delegationlist_table 
     EXPORTING 
     i_parent = delegationlist_container. 

* Set a titlebar for the grid control 
    gs_layout-grid_title = 'Délégations'. 
    gs_layout-sel_mode = 'A'. 
    gs_layout-cwidth_opt ='X'. 

* set table as data source 
* the struct name *must* be uppercase 
* the table must have this struc 
    CALL METHOD delegationlist_table->set_table_for_first_display 
     EXPORTING 
     i_structure_name = 'ZPRT_DELEGATIONLIST' 
     is_layout  = gs_layout 
     CHANGING 
     it_outtab  = delegationlist. 

    ENDIF. 

espère que cette aide,
Cordialement

Guillaume PATRY

+0

Trois commentaires à ce sujet: 1. myrepid n'est plus nécessaire dans les versions R/3 actuelles (voir les notes de version ABAP sur SY-REPID). 2. Je vous recommande d'utiliser REUSE_ALV_GRID_DISPLAY_LVC, il fait la même chose mais avec plus de structures de paramètres en cours. 3. Ne créez jamais le catalogue de champs manuellement si vous pouvez l'éviter - vous risquez d'oublier d'adapter votre programme si vous changez la structure sous-jacente plus tard. – vwegert

1

EDIT: Oh, et une autre chose - si vous êtes vraiment en POV (processus sur Value-Request = F4), sachez qu'il y a des limites à ce que tu peux faire. Essayez votre code dans un rapport simple juste après START-OF-SELECTION, et si cela fonctionne, essayez le même code dans un module POV.

===

Si vous ne passez pas un nom de la structure, vous devez vous assurer que vous passez un catalogue complet sur le terrain (!), Sinon la grille ALV pourrait commencer à fonctionner de façon erratique ou pas du tout. Utilisez les modules de fonction LVC_FIELDCATALOG_MERGE et LVC_FIELDCAT_COMPLETE (dans cet ordre) pour obtenir un catalogue de champs LVC pouvant être utilisé avec les classes ou REUSE_ALV_GRID_DISPLAY_LVC.

0

Merci pour l'effort, mais comme il s'est avéré, l'erreur que j'ai faite était que je n'ai pas capitalisé les noms de champs dans la construction du catalogue de terrain. Une telle erreur de débutant. Je suppose que je ne ferai pas cette erreur de sitôt.

-migs

+0

Vous devez marquer ceci comme la réponse acceptée. – BenV

1

Un couple de personnes suggérées ici en utilisant le REUSE_ALV_GRID_DISPLAY. Je suis sûr que c'est un moyen courant de faire avancer les choses (je l'utilisais moi-même), mais j'ai récemment pris un cours de sap delta et ils m'ont fortement suggéré de ne plus l'utiliser (REUSE_ALV_GRID_DISPLAY pas officiellement supporté par SAP).

Au lieu de cela, utilisez CL_SALV_TABLE, documentation ici: http://help.sap.com/erp2005_ehp_04/helpdata/EN/d7/b22041aa7df323e10000000a155106/frameset.htm

Il est en fait assez facile à utiliser aussi.

0

Transmettez la table interne de sortie au paramètre FM "t_outtab". Il va imprimer votre sortie de données.