Vous êtes sur la page 1sur 20

Webdynpro Application : Gestion des documents

Résumé :

Gestion des documents avec les fonctionnalités enregistrer, récupérer et supprimer via une application
Webdynpro ABAP.
Il stocke les fichiers joints dans une table de base de données personnalisée.

Prérequis :
Connaissance de base de Webdynpro ABAP, & OO ABAP

Étape by Étape Process


Le processus est divisé comme ci-dessous

• Créer une table personnalisée YTR_ATTACH_FILES pour stocker des fichiers


• Créer un composant WDA avec les méthodes enregistrer, récupérer et supprimer

Strictement, la logique métier doit être séparée du composant WDA en utilisant un modèle, c'est-à-dire
une classe, un module fonction, etc.

Créer une table transparente YTR_ATTACH_FILES


Étape 1.
Aller au transaction SE11 et entrer le nom de la table de base de données YTR_ATTACH_FILES
comme ci-dessous

Étape 2:
Définir les paramètres de livraison et de maintenance comme ci-dessous
Étape 3:
Allez dans les paramètres techniques et maintenez les entrées comme ci-dessous
Étape 4:
Créez les champs dans la table comme ci-dessous

Créer un composant Webdynpro ABAP


Étape1 :

Allez au transaction SE80 et créez le composant Webdynpro ABAP comme ci-dessous avec une vue
V_MAIN comme ci-dessous

Étape 2:
Accédez au contexte de vue V_MAIN et créez un noeud INPUT en utilisant le nom de table
YTR_ATTACH_FILES comme ci-dessous
Étape3:
Créez un noeud ATTACHMENT_LIST en utilisant le nom de la table YTR_ATTACH_FILES comme ci-
dessous
Étape 4:
Créez la mise en page en utilisant les nœuds de contexte INPUT & OUTPUT comme ci-dessous

Choisissez les éditeurs pour les colonnes de table comme suggéré ci-dessous
Étape 5:
Créez un élément d'interface utilisateur FILE_UPLOAD et liez les propriétés comme indiqué ci-dessous

Étape 6:
Créez un bouton BTN_ATTACH et attachez une action ATTACH comme ci-dessous
Ajoutez le code ci-dessous dans la méthode du gestionnaire d'événements
ONACTIONATTACH (pour joindre un fichier dans une table)

ONACTIONATTACH

METHOD onactionattach .
DATA lo_nd_input TYPE REF TO if_wd_context_node.
DATA lo_el_input TYPE REF TO if_wd_context_element.
DATA ls_input TYPE wd_this->element_input.
DATA lo_nd_attachment_list TYPE REF TO if_wd_context_node.
DATA lt_attachment_list TYPE wd_this->elements_attachment_list.
DATA ls_attachment_list LIKE LINE OF lt_attachment_list.
DATA lv_temp TYPE string.

“==========================================================
” Read the details of file chosen for attachment
“==========================================================
lo_nd_input =
wd_context->get_child_node( name = wd_this->wdctx_input ).

* get element via lead selection


lo_el_input = lo_nd_input->get_element( ).

* get all declared attributes


lo_el_input->get_static_attributes(
ONACTIONATTACH

IMPORTING
static_attributes = ls_input ).

” return if nothing to do
IF ls_input-file_data is INITIAL.
” Notify the user, please choose a file
RETURN.
ENDIF.

“==========================================================
” Read the attachment list
“==========================================================
* navigate from <CONTEXT> to <ATTACHMENT_LIST> via lead selection
lo_nd_attachment_list =
wd_context->get_child_node( name = wd_this->wdctx_attachment_list ).

lo_nd_attachment_list->get_static_attributes_table(
IMPORTING table = lt_attachment_list ).

“==========================================================
” Prepare data to save
“==========================================================
CLEAR ls_attachment_list.
ls_attachment_list-mandt = sy-mandt.
ls_attachment_list-uname = sy-uname.
” Generate Unique identifier
TRY.
ls_attachment_list-guid = cl_system_uuid=>create_uuid_c22_static( ).
CATCH cx_uuid_error. ” Error Class for UUID Processing Errors.
ENDTRY.

ls_attachment_list-file_data = ls_input-file_data.

” get file name from path


WHILE ls_input-file_name CA ‘\’.
SPLIT ls_input-file_name AT ‘\’
INTO lv_temp ls_input-file_name.
ENDWHILE.
ls_attachment_list-file_name = ls_input-file_name.

ls_attachment_list-file_type = ls_input-file_type.
ls_attachment_list-erdat = sy-datum.
ls_attachment_list-erzet = sy-timlo.
ls_attachment_list-status = abap_false.”attachment is new

APPEND ls_attachment_list TO lt_attachment_list.

“==========================================================
” Bind data to context
“==========================================================
lo_nd_attachment_list->bind_table(
EXPORTING
new_items = lt_attachment_list
).

ENDMETHOD.
Étape 7:
Créez un élément d'interface utilisateur TBL_LIST et reliez-le au nœud contextuel ATTACHMENT_LIST
comme ci-dessous.
Remarque : choisissez l'éditeur pour l'attribut FILE_NAME en tant que FICHIER TÉLÉCHARGÉ
(élément ui)
Étape 8:
Allez dans l'éditeur de colonnes TBL_LIST_FILE_NAME_EDITOR et liez les propriétés comme indiqué
ci-dessous
Étape 9:
Créez une barre d'outils à la table TBL_LIST et ajoutez un bouton BTN_SAVE et attachez une action
comme indiqué ci-dessous
Ajoutez le code ci-dessous (fonctionnalité Enregistrer) dans la méthode du
gestionnaire d'événements ONACTIONSAVE

ONACTIONSAVE

METHOD onactionsave .
DATA lo_nd_attachment_list TYPE REF TO if_wd_context_node.
DATA lt_attachment_list TYPE wd_this->elements_attachment_list.
DATA lo_msg_manager TYPE REF TO if_wd_message_manager.

FIELD-SYMBOLS <fs_attachment_list> LIKE LINE OF lt_attachment_list.

lo_nd_attachment_list =
wd_context->get_child_node( name = wd_this->wdctx_attachment_list ).

lo_nd_attachment_list->get_static_attributes_table(
IMPORTING table = lt_attachment_list ).

DATA lt_data TYPE TABLE OF ytr_attach_files.


DATA ls_data LIKE LINE OF lt_data.

“==========================================================
“Loop over attachment list for only new attachments
“==========================================================

LOOP AT lt_attachment_list ASSIGNING <fs_attachment_list>


WHERE status = abap_false.” new attachment

” set status
<fs_attachment_list>-status = abap_true.

CLEAR ls_data.
MOVE-CORRESPONDING <fs_attachment_list> TO ls_data.
APPEND ls_data TO lt_data.

ENDLOOP.

“get message manager


lo_msg_manager =
wd_comp_controller->wd_get_api( )->get_message_manager( ).

IF lt_data[] IS INITIAL.
” Attachement list is already saved
lo_msg_manager->report_error_message(
message_text = ‘Attachement list is already saved’ ).

RETURN.
ENDIF.

“==========================================================
” Save attachments
“==========================================================
MODIFY ytr_attach_files FROM TABLE lt_data.
IF sy-subrc IS INITIAL.
” after successful save, update the status
lo_nd_attachment_list->bind_table(
EXPORTING
new_items = lt_attachment_list
).

” Show success message


lo_msg_manager->report_success(
message_text = ‘Attachement list saved successfully !!!’ ).
ENDIF.

ENDMETHOD.
Étape 10:

Créez un autre bouton BTN_DELETE (pour supprimer les fichiers) et joignez l'action
DELETE_ATTACHMENT comme indiqué ci-dessous

Ajoutez le code ci-dessous dans (fonctionnalité Delete) dans la méthode du gestionnaire d'événements
ONACTIONDELETE_ATTACHMENT

ONACTIONDELETE_ATTACHMENT

METHOD onactiondelete_attachment .
DATA lo_node TYPE REF TO if_wd_context_node.
DATA lt_elements TYPE wdr_context_element_set.
DATA lo_element TYPE REF TO if_wd_context_element.
DATA ls_attach_list TYPE wd_this->element_attachment_list.
DATA lo_msg_manager TYPE REF TO if_wd_message_manager.
ONACTIONDELETE_ATTACHMENT

“==========================================================
” Get the selected elements from the context
“==========================================================
lo_node =
wd_context->get_child_node( name = wd_this->wdctx_attachment_list ).

lt_elements =
lo_node->get_selected_elements( ).

IF lt_elements[] IS INITIAL.
“report error message, Please choose a file to delete
lo_msg_manager =
wd_comp_controller->wd_get_api( )->get_message_manager( ).

lo_msg_manager->report_error_message(
message_text = ‘Please select atleast 1 row’ ).

RETURN.
ENDIF.

DATA lt_data TYPE TABLE OF ytr_attach_files.


DATA ls_data LIKE LINE OF lt_data.

CLEAR lt_data.

“==========================================================
” Delete the record from attachment list
“==========================================================
LOOP AT lt_elements INTO lo_element.
lo_element->get_static_attributes(
IMPORTING
static_attributes = ls_attach_list
).
” delete from the context node
lo_node->remove_element( element = lo_element ).

“Check if record exists in table


IF ls_attach_list-status = abap_true.
CLEAR ls_data.
MOVE-CORRESPONDING ls_attach_list TO ls_data.

APPEND ls_data TO lt_data.

ENDIF.
ENDLOOP.

“==========================================================
” Delete the record(s) from data base table
“==========================================================
DELETE ytr_attach_files FROM TABLE lt_data.
ENDMETHOD.

Étape 11:
Accédez à la méthode WDDOINIT () de vue et ajoutez le code ci-dessous (fonctionnalité Récupérer)

WDDOINIT

METHOD wddoinit .

DATA lo_nd_attachment_list TYPE REF TO if_wd_context_node.


DATA lt_attachment_list TYPE wd_this->elements_attachment_list.
WDDOINIT

DATA ls_attachment_list LIKE LINE OF lt_attachment_list.


DATA lt_data TYPE TABLE OF ytr_attach_files.

FIELD-SYMBOLS: <ls_data> LIKE LINE OF lt_data.


“==========================================================
” get the attachment files from table for the current user
“==========================================================
SELECT *
INTO TABLE lt_data
FROM ytr_attach_files
WHERE uname = sy-uname.

CLEAR lt_attachment_list.
LOOP AT lt_data ASSIGNING <ls_data>.
CLEAR ls_attachment_list.
MOVE-CORRESPONDING <ls_data> TO ls_attachment_list.
APPEND ls_attachment_list TO lt_attachment_list.
ENDLOOP.

“==========================================================
” Bind data to context node
“==========================================================
* navigate from <CONTEXT> to <ATTACHMENT_LIST> via lead selection
lo_nd_attachment_list =
wd_context->get_child_node( name = wd_this->wdctx_attachment_list ).

lo_nd_attachment_list->bind_table( new_items = lt_attachment_list


set_initial_elements = abap_true ).

ENDMETHOD.

Enregistrez le composant et activez-le

Étape 12:
Créer une application WDA comme ci-dessous
Maintenant, nous sommes prêts à voir certaines sorties et les fonctionnalités
de sauvegarde, de récupération et de suppression lors de l'ajout de fichiers
Maintenant, le fichier est attaché à la table mais il n'est pas encore sauvegardé dans la table de la base
de données.

Les données sont stockées dans la table de base de données YTR_ATTACH_FILES comme ci-
dessous
Note: sur le bouton de suppression de pièce jointe, il supprime également la pièce jointe de la base de
données (si le fichier est déjà stocké)

Messages d'erreur:
Si l'utilisateur clique sur le bouton Enregistrer la pièce jointe et qu'il n'y a pas de nouvelle pièce jointe à
enregistrer, l'utilisateur sera averti avec le message d'erreur ci-dessous
Si l'utilisateur clique sur le bouton Supprimer une pièce jointe et qu'aucune ligne n'a été sélectionnée
(choisie), l'utilisateur sera averti du message d'erreur ci-dessous