UNPKG

navidev-adt-api

Version:

API de conexión al Abap Developer Tools

2 lines 50 kB
export declare const content = "\"! <p class=\"shorttext synchronized\">AL30 - View configuration</p>\nclass ZCL_AL30_CONF definition\n public\n create public\n\n global friends ZCL_AL30_CONTROLLER .\n\npublic section.\n type-pools ABAP .\n\n types:\n*\"* public components of class ZCL_AL30_CONF\n*\"* do not include other source files here!!!\n tt_info_data TYPE STANDARD TABLE OF dfies WITH EMPTY KEY .\n\n \"! <p class=\"shorttext synchronized\">Read view</p>\n methods READ_VIEW\n importing\n !IV_NAME_VIEW type TABNAME\n !IV_ALL_LANGUAGE type SAP_BOOL default ABAP_FALSE\n !IV_LANGU type SYLANGU default SY-LANGU\n !IV_READ_DDIC type SAP_BOOL default ABAP_TRUE\n exporting\n !EV_TEXT_VIEW type AS4TEXT\n !ES_RETURN type BAPIRET2\n !ES_VIEW type ZAL30_T_VIEW\n !ET_FIELDS type ZIF_AL30_DATA=>TT_FIELDS_VIEW\n !ET_FIELDS_TEXT type ZIF_AL30_DATA=>TT_FIELDS_TEXT_VIEW\n !ET_FIELDS_DDIC type DD03PTAB\n !ET_FOREIGN_KEY_DDIC type DD05MTTYP .\n \"! <p class=\"shorttext synchronized\">Checks if view is correct in DDIC</p>\n methods CHECK_VIEW_DDIC\n importing\n !IV_NAME_VIEW type TABNAME\n exporting\n !E_RETURN type BAPIRET2\n !E_TEXT_VIEW type AS4TEXT .\n \"! <p class=\"shorttext synchronized\">Create a view</p>\n methods INSERT_VIEW\n importing\n !IV_NAME_VIEW type TABNAME\n !IV_USE_DEFAULT_VALUES type SAP_BOOL default ABAP_FALSE\n !IS_DEFAULT_VALUES type ZIF_AL30_DATA=>TS_DEFAULT_VALUES_CREATE optional\n exporting\n !ES_RETURN type BAPIRET2\n !ET_FIELDS type ZIF_AL30_DATA=>TT_FIELDS_VIEW\n !ET_FIELDS_TEXT type ZIF_AL30_DATA=>TT_FIELDS_TEXT_VIEW\n !ES_VIEW type ZAL30_T_VIEW\n !ET_FIELDS_DDIC type DD03PTAB .\n \"! <p class=\"shorttext synchronized\">Delete a view</p>\n methods DELETE_VIEW\n importing\n !IV_NAME_VIEW type TABNAME\n returning\n value(RS_RETURN) type BAPIRET2 .\n \"! <p class=\"shorttext synchronized\">Save view</p>\n methods SAVE_VIEW\n importing\n !IS_VIEW type ZAL30_T_VIEW\n !IT_FIELDS type ZIF_AL30_DATA=>TT_FIELDS_VIEW\n !IT_FIELDS_TEXT type ZIF_AL30_DATA=>TT_FIELDS_TEXT_VIEW optional\n returning\n value(RS_RETURN) type BAPIRET2 .\n \"! <p class=\"shorttext synchronized\">Check view for insert</p>\n methods CHECK_VIEW_INSERT\n importing\n !IV_NAME_VIEW type TABNAME\n exporting\n !ES_RETURN type BAPIRET2\n !EV_TEXT_VIEW type AS4TEXT .\n \"! <p class=\"shorttext synchronized\">Check view when is reading</p>\n methods CHECK_VIEW_READ\n importing\n !IV_NAME_VIEW type TABNAME\n exporting\n !ES_RETURN type BAPIRET2\n !EV_TEXT_VIEW type AS4TEXT .\n \"! <p class=\"shorttext synchronized\">Check if there are changes between the view and the dictiona</p>\n methods CHECK_CHANGES_DICT\n importing\n !IT_FIELDS type ZIF_AL30_DATA=>TT_FIELDS_VIEW optional\n !IT_FIELDS_TEXT type ZIF_AL30_DATA=>TT_FIELDS_TEXT_VIEW optional\n !IS_VIEW type ZAL30_T_VIEW\n !IV_LANGU type SYLANGU default SY-LANGU\n exporting\n !EV_DIFF_FIELDS type SAP_BOOL\n !EV_DIFF_TEXT type SAP_BOOL .\n \"! <p class=\"shorttext synchronized\">Adjusts the view with the data dictionary.</p>\n methods ADJUST_VIEW_DICTIONARY\n importing\n !IV_KEEP_TEXT type SAP_BOOL default ABAP_TRUE\n !IV_LANGU type SYLANGU default SY-LANGU\n exporting\n value(ES_RETURN) type BAPIRET2\n !EV_TEXT_VIEW type AS4TEXT\n changing\n !CT_FIELDS_VIEW type ZIF_AL30_DATA=>TT_FIELDS_VIEW\n !CT_FIELDS_TEXT_VIEW type ZIF_AL30_DATA=>TT_FIELDS_TEXT_VIEW\n !CS_VIEW type ZAL30_T_VIEW .\n \"! <p class=\"shorttext synchronized\">Check exit class</p>\n methods CHECK_EXIT_CLASS\n importing\n !IV_EXIT_CLASS type ZAL30_E_EXIT_CLASS\n returning\n value(RS_RETURN) type BAPIRET2 .\n \"! <p class=\"shorttext synchronized\">Get logon languages</p>\n methods GET_LOGON_LANGUAGES\n importing\n !IV_LANGU type SYLANGU default SY-LANGU\n exporting\n !ET_LANG type ZIF_AL30_DATA=>TT_LOGON_LANG\n !ET_R_LANG type ZIF_AL30_DATA=>TT_R_LANG .\n \"! <p class=\"shorttext synchronized\">Get fields of data dictionary</p>\n methods GET_FIELDS_VIEW_DDIC\n importing\n !IV_NAME_VIEW type ANY\n !IV_LANGU type SYLANGU default SY-LANGU\n !IV_ADD_TEXTTABLE type SAP_BOOL default ABAP_FALSE\n !IV_ALL_LANGUAGE type SAP_BOOL default ABAP_FALSE\n exporting\n !ES_DD02V type DD02V\n !ET_FIELDS type ZIF_AL30_DATA=>TT_FIELDS_VIEW\n !ET_FIELDS_TEXT type ZIF_AL30_DATA=>TT_FIELDS_TEXT_VIEW\n !EV_TEXTTABLE type TABNAME\n !ET_FIELDS_DDIC type DD03PTAB\n !ET_FOREIGN_KEY_DDIC type DD05MTTYP\n raising\n ZCX_AL30 .\n \"! <p class=\"shorttext synchronized\">Transport View</p>\n methods TRANSPORT_VIEW\n importing\n !IS_VIEW type ZAL30_T_VIEW\n !IT_FIELDS_VIEW type ZIF_AL30_DATA=>TT_FIELDS_VIEW\n !IT_FIELDS_TEXT_VIEW type ZIF_AL30_DATA=>TT_FIELDS_TEXT_VIEW optional\n exporting\n !ES_RETURN type BAPIRET2\n changing\n !CV_ORDER type E070-TRKORR .\n \"! <p class=\"shorttext synchronized\">Read single view ddic</p>\n methods READ_SINGLE_VIEW_DDIC\n importing\n !IV_NAME_VIEW type ANY\n !IV_LANGU type SYLANGU default SY-LANGU\n exporting\n !ES_DD02V type DD02V\n !ET_DD03P type DD03PTAB\n !ET_DD05M type DD05MTTYP\n raising\n ZCX_AL30 .\n \"! <p class=\"shorttext synchronized\">Read info of a data element</p>\n \"!\n \"! @parameter iv_rollname | <p class=\"shorttext synchronized\">Data element</p>\n \"! @parameter es_info | <p class=\"shorttext synchronized\">info</p>\n methods READ_SINGLE_DATA_ELEMENT\n importing\n !IV_ROLLNAME type ROLLNAME\n !IV_LANGU type SYLANGU default SY-LANGU\n exporting\n !ES_INFO type DFIES\n raising\n ZCX_AL30 .\n \"! <p class=\"shorttext synchronized\">Read info in all languages</p>\n \"!\n \"! @parameter iv_rollname | <p class=\"shorttext synchronized\">Data element</p>\n \"! @parameter et_info | <p class=\"shorttext synchronized\">Information in each language</p>\n methods READ_DATA_ELEMENT_ALL_LANG\n importing\n !IV_ROLLNAME type ROLLNAME\n exporting\n !ET_INFO type TT_INFO_DATA\n raising\n ZCX_AL30 .\n PROTECTED SECTION.\n\n*\"* protected components of class ZCL_AL30_CONF\n*\"* do not include other source files here!!!\n DATA mt_logon_lang TYPE zif_al30_data=>tt_logon_lang .\n DATA mt_fields TYPE zif_al30_data=>tt_fields_view .\n DATA mt_fields_text TYPE zif_al30_data=>tt_fields_text_view .\n DATA mt_fields_ddic TYPE dd03ptab .\n DATA mt_foreign_key_ddic TYPE dd05mttyp.\n DATA ms_view TYPE zal30_t_view .\n\n \"! <p class=\"shorttext synchronized\">Save the data in ddic format</p>\n METHODS save_view_ddic\n IMPORTING\n !is_view TYPE zal30_t_view\n !it_fields TYPE zif_al30_data=>tt_fields_view\n !it_fields_text TYPE zif_al30_data=>tt_fields_text_view OPTIONAL\n RAISING\n zcx_al30 .\n \"! <p class=\"shorttext synchronized\">Read view in all languages</p>\n METHODS read_view_ddic_all_lang\n IMPORTING\n !iv_name_view TYPE any\n !iv_langu TYPE sylangu DEFAULT sy-langu\n EXPORTING\n !es_dd02v TYPE dd02v\n !et_dd03p TYPE dd03ptab\n !et_dd05m TYPE dd05mttyp .\n \"! <p class=\"shorttext synchronized\">Read text view</p>\n METHODS read_text_view\n IMPORTING\n !iv_name_view TYPE tabname\n !iv_all_language TYPE sap_bool DEFAULT abap_false\n !iv_langu TYPE sylangu DEFAULT sy-langu\n EXPORTING\n !et_fields_text TYPE zif_al30_data=>tt_fields_text_view .\n \"! <p class=\"shorttext synchronized\">Get text table of view</p>\n METHODS get_texttable_view\n IMPORTING\n !iv_name_view TYPE any\n !iv_langu TYPE sylangu DEFAULT sy-langu\n !iv_all_language TYPE sap_bool DEFAULT abap_false\n EXPORTING\n !ev_texttable TYPE tabname\n !et_fields TYPE zif_al30_data=>tt_fields_view\n !et_fields_text TYPE zif_al30_data=>tt_fields_text_view\n !et_fields_ddic TYPE dd03ptab .\n \"! <p class=\"shorttext synchronized\">Adjust fields of view</p>\n METHODS adjust_fields_view\n IMPORTING\n !iv_all_language TYPE sap_bool DEFAULT abap_false\n !iv_langu TYPE sylangu DEFAULT sy-langu\n !it_fields_ddic TYPE dd03ptab\n CHANGING\n !ct_fields TYPE zif_al30_data=>tt_fields_view\n !ct_fields_text TYPE zif_al30_data=>tt_fields_text_view .\n \"! <p class=\"shorttext synchronized\">Fill default values of fields</p>\n METHODS fill_default_values_fields\n CHANGING\n !cs_fields TYPE zif_al30_data=>ts_fields_view .\n \"! <p class=\"shorttext synchronized\">Fill default values of view</p>\n METHODS fill_default_values_view\n IMPORTING\n !is_default_values TYPE zif_al30_data=>ts_default_values_create OPTIONAL\n !iv_use_default_values TYPE sap_bool DEFAULT abap_false\n CHANGING\n !cs_view TYPE zal30_t_view .\n \"! <p class=\"shorttext synchronized\">Is fields a checkbox?</p>\n METHODS is_field_checkbox\n IMPORTING\n !iv_rollname TYPE domname\n RETURNING\n VALUE(rv_result) TYPE zal30_s_fields_attr_general-checkbox .\n PRIVATE SECTION.\n\n*\"* private components of class ZCL_AL30_CONF\n*\"* do not include other source files here!!!\nENDCLASS.\n\n\n\nCLASS ZCL_AL30_CONF IMPLEMENTATION.\n\n\n METHOD adjust_fields_view.\n DATA ls_fields_text TYPE LINE OF zif_al30_data=>tt_fields_text_view.\n\n LOOP AT ct_fields ASSIGNING FIELD-SYMBOL(<ls_fields>).\n\n \" Este campo al ser a\u00F1adido el 06/05/2020 puede ser que en configuraciones previas no exista, en en ese caso se le pone el valor por defecto\n <ls_fields>-lbl_type_header = cond #( when <ls_fields>-lbl_type_header is initial then zif_al30_data=>cs_label_type_col_header-default else <ls_fields>-lbl_type_header ).\n\n \" Si el texto se introduce manual solo tendr\u00E9 que actualizar la posici\u00F3n donde debe salir, que ser\u00E1 la misma que la del campo\n CASE <ls_fields>-source_text.\n WHEN zif_al30_data=>cs_source_text-manual.\n LOOP AT ct_fields_text ASSIGNING FIELD-SYMBOL(<ls_fields_text>) WHERE fieldname = <ls_fields>-fieldname.\n <ls_fields_text>-pos_ddic = <ls_fields>-pos_ddic.\n ENDLOOP.\n\n \" Si viene del diccionario se a\u00F1ade el texto que proviene del mismo\n WHEN zif_al30_data=>cs_source_text-dictionary.\n\n \" Si el campo es virtual no vendr\u00E1 del diccionario por lo tanto hay llamar a otros m\u00E9todo para recuperar sus textos\n IF <ls_fields>-virtual = abap_true.\n TRY.\n \" La b\u00FAsqueda del texto del elemento de datos tambi\u00E9n depende si se quiere para todos los idiomas o solo\n \" para el idioma pasado por par\u00E1metro. El primero se usa en la configuraci\u00F3n de la vista, el segundo cuando se\n \" mantienee los datos.\n IF iv_all_language = abap_true.\n read_data_element_all_lang( EXPORTING iv_rollname = <ls_fields>-virtual_dtel\n IMPORTING et_info = DATA(lt_info) ).\n ELSE.\n read_single_data_element( EXPORTING iv_rollname = <ls_fields>-virtual_dtel\n iv_langu = iv_langu\n IMPORTING es_info = DATA(ls_info) ).\n INSERT ls_info INTO TABLE lt_info.\n ENDIF.\n LOOP AT lt_info ASSIGNING FIELD-SYMBOL(<ls_info>).\n ls_fields_text = CORRESPONDING #( <ls_info> ).\n ls_fields_text = CORRESPONDING #( BASE ( ls_fields_text ) <ls_fields> ).\n ls_fields_text-spras = <ls_info>-langu.\n INSERT ls_fields_text INTO TABLE ct_fields_text.\n CLEAR ls_fields_text.\n ENDLOOP.\n CLEAR lt_info. .\n CATCH zcx_al30.\n ENDTRY.\n ENDIF.\n\n LOOP AT it_fields_ddic ASSIGNING FIELD-SYMBOL(<ls_fields_ddic>) WHERE fieldname = <ls_fields>-fieldname.\n\n MOVE-CORRESPONDING <ls_fields_ddic> TO ls_fields_text.\n ls_fields_text-spras = <ls_fields_ddic>-ddlanguage.\n ls_fields_text-pos_ddic = <ls_fields>-pos_ddic.\n INSERT ls_fields_text INTO TABLE ct_fields_text.\n CLEAR ls_fields_text.\n\n ENDLOOP.\n ENDCASE.\n ENDLOOP.\n\n \" Obtenemos la \u00FAltima posici\u00F3n usada\n DATA(lv_position) = REDUCE #( INIT x = 0 FOR <wa> IN ct_fields NEXT x = COND #( WHEN <wa>-pos_ddic > x THEN <wa>-pos_ddic ELSE x ) ).\n lv_position = lv_position + 1.\n\n \" Se ajusta aquellos campos que no tienen posici\u00F3n.\n LOOP AT ct_fields ASSIGNING <ls_fields> WHERE pos_ddic IS INITIAL.\n <ls_fields>-pos_ddic = lv_position.\n lv_position = lv_position + 1.\n ENDLOOP.\n\n\n ENDMETHOD.\n\n\n METHOD adjust_view_dictionary.\n DATA lt_fields_old TYPE zif_al30_data=>tt_fields_view.\n DATA lt_fields_text_old TYPE zif_al30_data=>tt_fields_text_view.\n\n\n CLEAR: es_return, ev_text_view.\n\n* Si los campos a nivel de par\u00E1metro est\u00E1n informados tienen prioridad sobre los globales\n IF ct_fields_view IS NOT INITIAL.\n DATA(lt_fields) = ct_fields_view.\n ELSE.\n lt_fields = mt_fields.\n ENDIF.\n\n IF ct_fields_text_view IS NOT INITIAL.\n DATA(lt_fields_text) = ct_fields_text_view.\n ELSE.\n lt_fields_text = mt_fields_text.\n ENDIF.\n\n IF cs_view IS INITIAL.\n cs_view = ms_view.\n ENDIF.\n\n* Se pasa los par\u00E1metros de entrada a tablas auxiliares\n lt_fields_old = lt_fields.\n lt_fields_text_old = lt_fields_text.\n\n* Limpio los par\u00E1metros changing.\n CLEAR: ct_fields_view, ct_fields_text_view.\n\n* Leo los campos de la vista en formato listo para ser tratado y los pongo en los par\u00E1metros changing.\n TRY.\n CALL METHOD get_fields_view_ddic\n EXPORTING\n iv_name_view = cs_view-tabname\n iv_add_texttable = abap_true\n IMPORTING\n es_dd02v = DATA(ls_dd02v)\n et_fields = ct_fields_view\n et_fields_text = ct_fields_text_view\n ev_texttable = cs_view-texttable.\n\n CATCH zcx_al30 .\n es_return = zcl_al30_util=>fill_return( iv_type = 'E' iv_number = '013' iv_message_v1 = cs_view-tabname ).\n EXIT.\n ENDTRY.\n\n* Recupero el texto\n ev_text_view = ls_dd02v-ddtext.\n*\n LOOP AT ct_fields_view ASSIGNING FIELD-SYMBOL(<ls_fields>).\n\n \" Si el campo existe en la tabla que toca (puede ser que se pueden mover campos entre la tabla principal y la de textos) paso los valores que pudiera tener.\n READ TABLE lt_fields_old ASSIGNING FIELD-SYMBOL(<ls_fields_old>) WITH KEY fieldname = <ls_fields>-fieldname\n field_texttable = <ls_fields>-field_texttable.\n IF sy-subrc = 0.\n <ls_fields> = <ls_fields_old>.\n ELSE.\n \" El nuevo campo se le rellena con sus valores por defecto\n fill_default_values_fields( CHANGING cs_fields = <ls_fields> ).\n ENDIF.\n\n \" Si el campo tiene como origen del texto manual y se quiere mantener el texto entonces voy moviendo los textos antiguos al nuevo\n IF <ls_fields>-source_text = zif_al30_data=>cs_source_text-manual AND iv_keep_text = abap_true.\n LOOP AT ct_fields_text_view ASSIGNING FIELD-SYMBOL(<ls_fields_text>) WHERE fieldname = <ls_fields>-fieldname.\n READ TABLE lt_fields_text_old ASSIGNING FIELD-SYMBOL(<ls_fields_text_old>)\n WITH KEY fieldname = <ls_fields>-fieldname\n spras = <ls_fields_text>-spras.\n IF sy-subrc = 0.\n <ls_fields_text> = <ls_fields_text_old>.\n ENDIF.\n\n ENDLOOP.\n ENDIF.\n\n ENDLOOP.\n\n \" Se a\u00F1aden los campos virtuales que hab\u00EDa en la tabla antigua\n LOOP AT lt_fields_old ASSIGNING <ls_fields_old> WHERE virtual = abap_true.\n INSERT <ls_fields_old> INTO TABLE ct_fields_view.\n LOOP AT lt_fields_text_old ASSIGNING <ls_fields_text_old> WHERE fieldname = <ls_fields_old>-fieldname.\n INSERT <ls_fields_text_old> INTO TABLE ct_fields_text_view.\n ENDLOOP.\n ENDLOOP.\n\n* Finalmente grabo la vista\n es_return = save_view( EXPORTING is_view = cs_view\n it_fields = ct_fields_view\n it_fields_text = ct_fields_text_view ).\n\n* Se pasan los nuevos campos ajustados a las variables globales\n mt_fields = ct_fields_view.\n mt_fields_text = ct_fields_text_view.\n ms_view = cs_view.\n\n ENDMETHOD.\n\n\n METHOD check_changes_dict.\n FIELD-SYMBOLS <ls_dd03p> TYPE dd03p.\n\n DATA ld_name TYPE ddobjname.\n DATA ls_dd02v TYPE dd02v.\n DATA lt_dd03p TYPE TABLE OF dd03p.\n DATA ld_num_fields TYPE i.\n DATA ld_num_fields_ddic TYPE i.\n DATA lv_texttable_ddic TYPE tabname.\n\n ev_diff_fields = ev_diff_text = abap_false.\n\n* Si los campos a nivel de par\u00E1metro est\u00E1n informados tienen prioridad sobre los globales\n IF it_fields IS NOT INITIAL.\n DATA(lt_fields) = it_fields.\n ELSE.\n lt_fields = mt_fields.\n ENDIF.\n\n IF it_fields_text IS NOT INITIAL.\n DATA(lt_fields_text) = it_fields_text.\n ELSE.\n lt_fields_text = mt_fields_text.\n ENDIF.\n\n\n* Obtengo informaci\u00C3\u00B3n de la tabla\n TRY.\n CALL METHOD get_fields_view_ddic\n EXPORTING\n iv_name_view = is_view-tabname\n iv_add_texttable = abap_true\n IMPORTING\n et_fields = DATA(lt_fields_ddic)\n et_fields_text = DATA(lt_fields_text_ddic)\n ev_texttable = lv_texttable_ddic.\n CATCH zcx_al30.\n ENDTRY.\n\n IF lt_fields_ddic[] IS NOT INITIAL.\n\n* Se mira campo por campo las posibles diferencias, los virtuales no se procesan porque nunca existen en el diccionario.\n LOOP AT lt_fields ASSIGNING FIELD-SYMBOL(<ls_fields>) WHERE virtual = abap_false.\n\n \" Se mira que el campo existe en la tabla que le pertoca. Si un campo esta en la principal y pasa a la de texto, o la inversa,\n \" se tiene que detectar porque afectar\u00EDa a la actualizaci\u00F3n.\n READ TABLE lt_fields_ddic TRANSPORTING NO FIELDS WITH KEY fieldname = <ls_fields>-fieldname\n field_texttable = <ls_fields>-field_texttable.\n IF sy-subrc = 0.\n* Nota IRB 04/06/2019: No tiene sentido validar el texto porque si se introduce manualmente da igual el que pueda tener\n* en el diccionario. Y si se escoge el diccionario siempre tomar\u00E1 el texto del mismo. A\u00FAn asi, la dejo la validaci\u00F3n por\n* si hay que implementar dicha casu\u00EDstica.\n* \" La validaci\u00F3n de texto solo se efectua cuando el origen del texto del campo ser\u00E1 manual.\n* IF <ls_fields>-source_text = zif_al30_data=>cs_source_text-manual.\n* LOOP AT it_fields_text ASSIGNING FIELD-SYMBOL(<ls_fields_text>).\n*\n* READ TABLE lt_fields_text_ddic ASSIGNING FIELD-SYMBOL(<ls_fields_text_ddic>)\n* WITH KEY fieldname = <ls_fields_text>-fieldname\n* spras = <ls_fields_text>-spras.\n* IF sy-subrc = 0.\n** Si el existe el mismo campo miro los textos\n* IF <ls_fields_text>-scrtext_s NE <ls_dd03p>-scrtext_s\n* OR <ls_fields_text>-scrtext_m NE <ls_dd03p>-scrtext_m\n* OR <ls_fields_text>-scrtext_l NE <ls_dd03p>-scrtext_l\n* OR <ls_fields_text>-reptext NE <ls_dd03p>-reptext.\n* ev_diff_text = abap_true.\n* EXIT.\n* ENDIF.\n*\n* ELSE.\n** A la primera diferencia salgo, no tiene sentido leer el resto de campos.\n* ev_diff_fields = abap_true.\n* EXIT.\n* ENDIF.\n* ENDLOOP.\n* ENDIF.\n ELSE.\n \" A la primera diferencia salgo, no tiene sentido leer el resto de campos.\n ev_diff_fields = abap_true.\n EXIT.\n ENDIF.\n ENDLOOP.\n\n \" Si no hay diferencias se busca a la inversa, que haya campos nuevos en el diccionario que no esten en la configuraci\u00F3n\n IF ev_diff_fields = abap_false.\n LOOP AT lt_fields_ddic ASSIGNING FIELD-SYMBOL(<ls_fields_ddic>).\n READ TABLE lt_fields TRANSPORTING NO FIELDS WITH KEY fieldname = <ls_fields_ddic>-fieldname\n field_texttable = <ls_fields_ddic>-field_texttable\n virtual = abap_false.\n IF sy-subrc NE 0.\n \" A la primera diferencia salgo, no tiene sentido leer el resto de campos.\n ev_diff_fields = abap_true.\n EXIT.\n ENDIF.\n ENDLOOP.\n ENDIF.\n\n ELSE.\n ev_diff_fields = abap_true.\n ENDIF.\n\n ENDMETHOD.\n\n\n METHOD check_exit_class.\n DATA ld_not_active TYPE sap_bool.\n DATA ls_impl TYPE seorelkey.\n DATA ld_deleted TYPE sap_bool.\n CLEAR rs_return.\n\n* Primero se mira que la clase exista\n CALL FUNCTION 'SEO_CLASS_EXISTENCE_CHECK'\n EXPORTING\n clskey = iv_exit_class\n IMPORTING\n not_active = ld_not_active\n EXCEPTIONS\n not_specified = 1\n not_existing = 2\n is_interface = 3\n no_text = 4\n inconsistent = 5\n OTHERS = 6.\n\n IF sy-subrc NE 0 OR ld_not_active = abap_true.\n rs_return = zcl_al30_util=>fill_return( iv_type = 'E' iv_number = '030' iv_message_v1 = iv_exit_class ).\n ELSE.\n\n* Segundo se mira si tiene la interface exit\n ls_impl-clsname = iv_exit_class.\n ls_impl-refclsname = zif_al30_data=>cv_intf_exit.\n CALL FUNCTION 'SEO_IMPLEMENTG_EXISTENCE_CHECK'\n EXPORTING\n impkey = ls_impl\n IMPORTING\n deleted = ld_deleted\n EXCEPTIONS\n class_not_existing = 1\n not_specified = 2\n not_existing = 3\n is_inheritance = 4\n is_comprising = 5\n inconsistent = 6\n OTHERS = 7.\n\n IF ld_deleted = abap_true OR sy-subrc NE 0.\n rs_return = zcl_al30_util=>fill_return( iv_type = 'E' iv_number = '031' iv_message_v1 = zif_al30_data=>cv_intf_exit ).\n ENDIF.\n\n ENDIF.\n\n ENDMETHOD.\n\n\n METHOD check_view_ddic.\n DATA ld_mainflag TYPE dd02v-mainflag.\n DATA ls_dd02v TYPE dd02v.\n DATA lt_dd03p TYPE TABLE OF dd03p.\n FIELD-SYMBOLS <ls_dd03p> TYPE dd03p.\n\n\n CLEAR: e_return, e_text_view.\n\n* Verificacion similar que se hace cuando se crea un di\u00C3\u00A1logo de actualizacion. Que esta\n* en el include: MSVIMF35 form: get_ddic_info_tabl.\n TRY.\n CALL METHOD read_single_view_ddic\n EXPORTING\n iv_name_view = iv_name_view\n IMPORTING\n es_dd02v = ls_dd02v\n et_dd03p = lt_dd03p.\n CATCH zcx_al30 .\n e_return = zcl_al30_util=>fill_return( iv_type = 'E' iv_number = '013' iv_message_v1 = iv_name_view ).\n EXIT.\n ENDTRY.\n\n e_text_view = ls_dd02v-ddtext. \" Texto del objeto\n\n** Verifico que en la tabla no tenga campos de tipo string\n* READ TABLE lt_dd03p TRANSPORTING NO FIELDS WITH KEY datatype = 'STRG'.\n* IF sy-subrc = 0.\n* e_return = zcl_al30_util=>fill_return( iv_type = 'E' iv_number = '002' iv_message_v1 = iv_name_view ).\n*\n* ELSE.\n\n* Verifico que la tabla tenga el flag de actualizaci\u00C3\u00B3n permitida\n IF ls_dd02v-mainflag = 'N'. \" No permitido.\n e_return = zcl_al30_util=>fill_return( iv_type = 'E' iv_number = '003' iv_message_v1 = iv_name_view ).\n ENDIF.\n\n* ENDIF.\n\n\n ENDMETHOD.\n\n\n METHOD check_view_insert.\n DATA ls_view TYPE zal30_t_view.\n\n* Primero chequeo que la vista no exista ya\n SELECT SINGLE * INTO ls_view FROM zal30_t_view WHERE tabname = iv_name_view.\n IF sy-subrc NE 0.\n\n* Despu\u00C3\u00A9s lanzo los chequeos de la vista/tabla del diccionario\n CALL METHOD check_view_ddic\n EXPORTING\n iv_name_view = iv_name_view\n IMPORTING\n e_return = es_return\n e_text_view = ev_text_view.\n\n ELSE.\n es_return = zcl_al30_util=>fill_return( iv_type = 'E' iv_number = '009' iv_message_v1 = iv_name_view ).\n ENDIF.\n\n ENDMETHOD.\n\n\n METHOD check_view_read.\n DATA ls_view TYPE zal30_t_view.\n\n* Primero chequeo que la vista no exista ya\n SELECT SINGLE * INTO ls_view FROM zal30_t_view WHERE tabname = iv_name_view.\n IF sy-subrc = 0.\n\n* Despu\u00C3\u00A9s lanzo los chequeos de la vista/tabla del diccionario\n CALL METHOD check_view_ddic\n EXPORTING\n iv_name_view = iv_name_view\n IMPORTING\n e_return = es_return\n e_text_view = ev_text_view.\n\n ELSE.\n es_return = zcl_al30_util=>fill_return( iv_type = 'E' iv_number = '001' iv_message_v1 = iv_name_view ).\n ENDIF.\n\n ENDMETHOD.\n\n\n METHOD delete_view.\n CLEAR rs_return.\n\n* Borro los datos principales de la vista\n DELETE FROM zal30_t_view WHERE tabname = iv_name_view.\n IF sy-subrc = 0.\n DELETE FROM zal30_t_fields WHERE tabname = iv_name_view.\n IF sy-subrc = 0.\n \" Los textos no se controla si va bien o va mal porque puede que no tenga datos, si todos los campos tienen el campo de origen\n \" del texto con el valor diccionario.\n DELETE FROM zal30_t_fieldst WHERE tabname = iv_name_view.\n\n COMMIT WORK AND WAIT.\n rs_return = zcl_al30_util=>fill_return( iv_type = 'S' iv_number = '008' iv_message_v1 = iv_name_view ).\n\n ELSE.\n ROLLBACK WORK.\n rs_return = zcl_al30_util=>fill_return( iv_type = 'E' iv_number = '007' iv_message_v1 = iv_name_view ).\n ENDIF.\n ELSE.\n rs_return = zcl_al30_util=>fill_return( iv_type = 'E' iv_number = '006' iv_message_v1 = iv_name_view ).\n ENDIF.\n\n ENDMETHOD.\n\n\n METHOD fill_default_values_fields.\n cs_fields-source_text = zif_al30_data=>cs_source_text-dictionary.\n\n IF cs_fields-tech = abap_false. \" Los campos t\u00E9cnicos no se mostrar\u00E1n en la pantalla selecci\u00F3n\n cs_fields-sel_screen = abap_true.\n ENDIF.\n ENDMETHOD.\n\n\n METHOD fill_default_values_view.\n\n \" Si el par\u00E1metro de valores por defecto esta informado los usar\u00E9 para informar la estructura de la vista\n IF iv_use_default_values = abap_true.\n cs_view = CORRESPONDING #( is_default_values ).\n ELSE.\n cs_view-auth_user = abap_false. \" El acceso a la tabla se validar\u00E1 por usuario\n cs_view-change_log = abap_true. \" Se guardar\u00E1 log de cambios en las modificaciones\n ENDIF.\n ENDMETHOD.\n\n\n METHOD get_fields_view_ddic.\n DATA ls_fields LIKE LINE OF et_fields.\n DATA ls_fields_text LIKE LINE OF et_fields_text.\n\n FIELD-SYMBOLS <ls_dd03p> TYPE dd03p.\n\n CLEAR: es_dd02v, et_fields, et_fields_text, et_fields_ddic.\n\n* Leo la informacion de los campos\n\n IF iv_all_language = abap_true.\n CALL METHOD read_view_ddic_all_lang\n EXPORTING\n iv_name_view = iv_name_view\n iv_langu = iv_langu\n IMPORTING\n es_dd02v = es_dd02v\n et_dd03p = et_fields_ddic\n et_dd05m = et_foreign_key_ddic.\n ELSE.\n CALL METHOD read_single_view_ddic\n EXPORTING\n iv_name_view = iv_name_view\n iv_langu = iv_langu\n IMPORTING\n es_dd02v = es_dd02v\n et_dd03p = et_fields_ddic\n et_dd05m = et_foreign_key_ddic.\n ENDIF.\n\n IF et_fields_ddic IS INITIAL.\n RAISE EXCEPTION TYPE zcx_al30\n EXPORTING\n textid = zcx_al30=>view_dont_exist.\n ENDIF.\n\n* Y los adapto al formato de las tablas de la aplicaicon.\n\n* Leo los campos y los voy pasando a una tabla interna que despu\u00C3\u00A9s se\n* pasar\u00C3\u00A1 a la tabla de diccionario\n LOOP AT et_fields_ddic ASSIGNING <ls_dd03p>.\n\n \" Sin lenguaje no se a\u00F1ade a la tabla de textos. Eso ocurre cuando hay idiomas configurados en el sistema pero\n \" no se ha cargado su libreria de textos. Sin ese idioma luego se producen errores al grabar.\n IF <ls_dd03p>-ddlanguage IS NOT INITIAL.\n MOVE-CORRESPONDING <ls_dd03p> TO ls_fields_text.\n ls_fields_text-spras = <ls_dd03p>-ddlanguage.\n ls_fields_text-pos_ddic = <ls_dd03p>-position.\n APPEND ls_fields_text TO et_fields_text.\n CLEAR ls_fields_text.\n ENDIF.\n\n \" En la tabla de campos solo aparecer\u00E1 una vez\n READ TABLE et_fields TRANSPORTING NO FIELDS WITH KEY fieldname = <ls_dd03p>-fieldname.\n IF sy-subrc NE 0.\n MOVE-CORRESPONDING <ls_dd03p> TO ls_fields.\n* El campo de posici\u00C3\u00B3n es importante para saber el orden posterior de los campos. Ya que sin este\n* campo la lectura de los campos se hace de manera desordenada y la lectura de datos no son correctas\n ls_fields-pos_ddic = <ls_dd03p>-position.\n\n* Me guardo si el campo es clave, ya que lo usar\u00C3\u00A9 para evitar que los campos sean editables.\n ls_fields-key_ddic = <ls_dd03p>-keyflag.\n\n\n* El campo mandante lo pongo por defecto como campo \"t\u00C3\u00A9cnico\"\n IF <ls_dd03p>-rollname = 'MANDT'.\n ls_fields-tech = abap_true.\n ENDIF.\n\n\n \" Si se esta procesando un campo que es un char de una posici\u00F3n y adem\u00E1s tiene dominio, miro si ese campo\n \" es sensible a ser un checkbox\n IF <ls_dd03p>-datatype = 'CHAR' AND <ls_dd03p>-leng = 1 AND <ls_dd03p>-rollname IS NOT INITIAL.\n ls_fields-checkbox = is_field_checkbox( <ls_dd03p>-rollname ).\n ENDIF.\n\n APPEND ls_fields TO et_fields.\n CLEAR ls_fields.\n\n ENDIF.\n\n ENDLOOP.\n\n \" Se buscar\u00E1 y se incluir\u00E1n los campos de la tabla de texto asociada a la tabla obtenida\n IF iv_add_texttable = abap_true.\n get_texttable_view(\n EXPORTING\n iv_name_view = iv_name_view\n iv_langu = iv_langu\n iv_all_language = iv_all_language\n IMPORTING\n ev_texttable = ev_texttable\n et_fields = DATA(lt_textttable_fields)\n et_fields_text = DATA(lt_texttable_fields_text)\n et_fields_ddic = DATA(lt_texttable_ddic) ).\n\n \" Se devuelven todos los campos del diccionario de la tabla de textos\n INSERT LINES OF lt_texttable_ddic INTO TABLE et_fields_ddic.\n\n \" Numero de campos que hay en la tabla principal. Porque el campo de los textos comenzar\u00E1 en la posici\u00F3n + 1.\n DESCRIBE TABLE et_fields LINES DATA(lv_num_fields).\n lv_num_fields = lv_num_fields + 1.\n\n LOOP AT lt_textttable_fields ASSIGNING FIELD-SYMBOL(<ls_fields>).\n DATA(lv_add_field) = abap_true.\n\n \" Los campos clave de la tabla de textos no se pueden a\u00F1adir para evitar duplicados, salvo el del idioma que es necesario para\n \" validaciones y orden de transporte\n IF <ls_fields>-key_ddic = abap_true.\n\n READ TABLE lt_texttable_ddic TRANSPORTING NO FIELDS\n WITH KEY fieldname = <ls_fields>-fieldname\n datatype = 'LANG'.\n IF sy-subrc = 0.\n <ls_fields>-lang_texttable = abap_true. \" Se marca que es el campo de idioma\n ELSE.\n lv_add_field = abap_false. \" El campo no se a\u00F1ade\n \" Se borra el campo de la tabla de textos porque no se tiene que procesar.\n DELETE lt_texttable_fields_text WHERE fieldname = <ls_fields>-fieldname.\n ENDIF.\n ENDIF.\n\n IF lv_add_field = abap_true.\n\n <ls_fields>-tabname = iv_name_view. \" La tabla ser\u00E1 la principal\n <ls_fields>-pos_ddic = lv_num_fields. \" Posici\u00F3n nueva\n <ls_fields>-field_texttable = abap_true. \" Campo de la tabla de texto\n INSERT <ls_fields> INTO TABLE et_fields.\n lv_num_fields = lv_num_fields + 1.\n\n \" Se a\u00F1aden los textos\n LOOP AT lt_texttable_fields_text ASSIGNING FIELD-SYMBOL(<ls_fields_text>) WHERE fieldname = <ls_fields>-fieldname.\n <ls_fields_text>-tabname = iv_name_view.\n <ls_fields_text>-pos_ddic = <ls_fields>-pos_ddic.\n INSERT <ls_fields_text> INTO TABLE et_fields_text.\n ENDLOOP.\n\n ENDIF.\n\n\n ENDLOOP.\n\n\n ENDIF.\n\n \" Se orden los campos por su posici\u00F3n\n SORT et_fields_text BY pos_ddic.\n SORT et_fields BY pos_ddic.\n\n ENDMETHOD.\n\n\n METHOD get_logon_languages.\n\n CLEAR et_lang.\n\n IF mt_logon_lang IS INITIAL.\n\n SELECT t002t~sprsl t002t~sptxt\n INTO TABLE mt_logon_lang\n FROM t002t JOIN t002c ON\n t002t~sprsl = t002c~spras\n WHERE t002t~spras = iv_langu\n AND t002c~lainst = abap_true\n ORDER BY t002t~sptxt.\n\n ENDIF.\n\n et_lang = mt_logon_lang.\n\n et_r_lang = VALUE #( FOR <ls_logon_lang> IN mt_logon_lang ( sign = 'I' option = 'EQ' low = <ls_logon_lang>-lang ) ).\n\n ENDMETHOD.\n\n\n METHOD get_texttable_view.\n DATA lv_tabname TYPE tabname.\n DATA lv_texttable TYPE tabname.\n\n CLEAR: ev_texttable, et_fields, et_fields_text.\n\n lv_tabname = iv_name_view.\n\n CALL FUNCTION 'DDUT_TEXTTABLE_GET'\n EXPORTING\n tabname = lv_tabname\n IMPORTING\n texttable = lv_texttable.\n\n ev_texttable = lv_texttable.\n\n IF ev_texttable IS NOT INITIAL.\n\n TRY.\n get_fields_view_ddic(\n EXPORTING\n iv_name_view = ev_texttable\n iv_langu = iv_langu\n iv_all_language = iv_all_language\n IMPORTING\n et_fields = et_fields\n et_fields_text = et_fields_text\n et_fields_ddic = et_fields_ddic ).\n\n\n CATCH zcx_al30.\n ENDTRY.\n\n ENDIF.\n\n ENDMETHOD.\n\n\n METHOD insert_view.\n\n\n CLEAR: et_fields, es_return, et_fields_ddic, et_fields_text.\n\n* En la creaci\u00F3n solo se recuperar\u00E1n los campos, los textos no se recuper\u00E1n porque por defecto se tomar\u00E1n\n* del diccionario de datos\n TRY.\n CALL METHOD get_fields_view_ddic\n EXPORTING\n iv_name_view = iv_name_view\n iv_add_texttable = abap_true\n iv_all_language = abap_true\n IMPORTING\n et_fields = et_fields\n et_fields_text = et_fields_text\n et_fields_ddic = et_fields_ddic\n ev_texttable = es_view-texttable.\n\n CATCH zcx_al30 .\n es_return = zcl_al30_util=>fill_return( iv_type = 'E' iv_number = '013' iv_message_v1 = iv_name_view ).\n EXIT.\n ENDTRY.\n\n \" Nota IRB: Es importante que primero se rellen los posibles valores por defecto. El motivo es que\n \" la estructura de valores por defecto es la misma que la tabla y el nombre del campo de la vista estar\u00E1 en blanco\n \" y se perder\u00E1 en el camino.\n* Valores por defecto en la cabecera\n fill_default_values_view( EXPORTING is_default_values = is_default_values\n iv_use_default_values = iv_use_default_values\n CHANGING cs_view = es_view ).\n\n\n* Pongo el nombre de la vista a la estructura principal de la vista\n es_view-tabname = iv_name_view.\n\n\n\n* Por defecto los campos de la vista su texto se tomar\u00E1 del diccionario\n LOOP AT et_fields ASSIGNING FIELD-SYMBOL(<ls_fields>).\n fill_default_values_fields( CHANGING cs_fields = <ls_fields> ).\n ENDLOOP.\n\n* Finalmente grabo la vista.\n es_return = save_view( EXPORTING is_view = es_view\n it_fields = et_fields\n it_fields_text = et_fields_text ).\n\n ENDMETHOD.\n\n\n METHOD is_field_checkbox.\n\n rv_result = abap_false.\n \" Se recupera los valores del dominio asociado al alemento de datos\n DATA(lt_values) = CAST cl_abap_elemdescr( cl_abap_typedescr=>describe_by_name( iv_rollname ) )->get_ddic_fixed_values( ).\n\n IF lines( lt_values ) = 2. \" Tiene que tener dos valores para el ' ' y 'X'.\n \" Para el false o el no tanto el campo low como el high ha de estar en blanco. Nota, como los campos tienen nombre esopecial para SAP\n \" hay que ponerlos de esa manera para que funcione.\n READ TABLE lt_values TRANSPORTING NO FIELDS WITH KEY ('LOW') = space\n ('HIGH') = space.\n IF sy-subrc = 0.\n \" El true o si tiene que tener el campo low una X y el high en blanco.\n READ TABLE lt_values TRANSPORTING NO FIELDS WITH KEY ('LOW') = 'X'\n ('HIGH') = space.\n IF sy-subrc = 0.\n rv_result = abap_true.\n ENDIF.\n ENDIF.\n\n ENDIF.\n\n ENDMETHOD.\n\n\n METHOD read_data_element_all_lang.\n\n CLEAR et_info.\n\n get_logon_languages( IMPORTING et_lang = DATA(lt_lang) ).\n\n LOOP AT lt_lang ASSIGNING FIELD-SYMBOL(<ls_lang>).\n\n TRY.\n read_single_data_element( EXPORTING iv_rollname = iv_rollname\n iv_langu = <ls_lang>-lang\n IMPORTING es_info = DATA(ls_info) ).\n\n INSERT ls_info INTO TABLE et_info.\n\n CATCH zcx_al30.\n ENDTRY.\n\n ENDLOOP.\n\n \" Si al final de la b\u00FAsqueda no existen datos en ningun idioma se lanza la excepci\u00F3n que el\n \" elemento de datos no existe\n IF et_info IS INITIAL.\n RAISE EXCEPTION TYPE zcx_al30\n EXPORTING\n textid = zcx_al30=>data_element_not_exist.\n ENDIF.\n\n ENDMETHOD.\n\n\n METHOD read_single_data_element.\n\n CLEAR: es_info.\n\n\n CALL METHOD cl_abap_typedescr=>describe_by_name(\n EXPORTING\n p_name = iv_rollname\n RECEIVING\n p_descr_ref = DATA(lo_ref)\n EXCEPTIONS\n type_not_found = 1\n OTHERS = 2 ).\n IF sy-subrc <> 0.\n RAISE EXCEPTION TYPE zcx_al30\n EXPORTING\n textid = zcx_al30=>data_element_not_exist.\n ELSE.\n DATA(lo_rollname) = CAST cl_abap_elemdescr( lo_ref ).\n\n es_info = lo_rollname->get_ddic_field( p_langu = iv_langu ).\n es_info-langu = iv_langu.\n\n ENDIF.\n\n ENDMETHOD.\n\n\n METHOD read_single_view_ddic.\n DATA lv_name TYPE ddobjname .\n\n CLEAR: es_dd02v, et_dd03p, et_dd05m.\n\n lv_name = iv_name_view.\n\n* Leo los campos de la tabla\n CALL FUNCTION 'DDIF_TABL_GET'\n EXPORTING\n name = lv_name\n state = 'A' \" Active version\n langu = iv_langu\n IMPORTING\n dd02v_wa = es_dd02v\n TABLES\n dd03p_tab = et_dd03p[]\n dd05m_tab = et_dd05m[]\n EXCEPTIONS\n illegal_input = 1\n OTHERS = 2.\n\n IF sy-subrc NE 0 OR et_dd03p IS INITIAL.\n\n RAISE EXCEPTION TYPE zcx_al30\n EXPORTING\n textid = zcx_al30=>view_dont_exist.\n\n ELSE.\n \" Pongo el campo idioma siempre porque si no esta traducido no se informa. Y es necesario para el resto de procesos.\n LOOP AT et_dd03p ASSIGNING FIELD-SYMBOL(<ls_dd03p>).\n <ls_dd03p>-ddlanguage = iv_langu.\n ENDLOOP.\n\n* Funcion para leer vistas: DD_VIEW_GET\n \" Si es una vista la descripci\u00F3n que se recupera no es correcta.\n IF es_dd02v-tabclass = 'VIEW'.\n SELECT SINGLE ddtext INTO es_dd02v-ddtext\n FROM dd25t\n WHERE viewname = lv_name\n AND ddlanguage = iv_langu.\n ENDIF.\n ENDIF.\n\n ENDMETHOD.\n\n\n METHOD read_text_view.\n\n CLEAR et_fields_text.\n\n \"\n IF iv_all_language = abap_true. \" Se obtienen todos los idiomas de logon\n get_logon_languages( IMPORTING et_r_lang = DATA(lt_r_lang) ).\n ELSE.\n INSERT VALUE #( sign = 'I' option = 'EQ' low = iv_langu ) INTO TABLE lt_r_lang.\n ENDIF.\n\n SELECT * INTO CORRESPONDING FIELDS OF TABLE et_fields_text FROM zal30_t_fieldst WHERE spras IN lt_r_lang\n AND tabname = iv_name_view.\n\n ENDMETHOD.\n\n\n METHOD read_view.\n DATA ls_return TYPE bapiret2.\n\n CLEAR: es_return, es_view, et_fields, et_fields_text, et_fields_ddic.\n CLEAR: mt_fields, ms_view, mt_fields_text, mt_fields_ddic.\n\n* Primero busco si existe la apliacion\n SELECT SINGLE * INTO ms_view\n FROM zal30_t_view\n WHERE tabname = iv_name_view.\n IF sy-subrc = 0.\n\n\n* Busco la informacion de los campos\n SELECT * INTO CORRESPONDING FIELDS OF TABLE mt_fields\n FROM zal30_t_fields\n WHERE tabname = iv_name_view.\n\n\n \" Lectura de los textos en todos los idioma de logon\n read_text_view( EXPORTING iv_name_view = iv_name_view\n iv_all_language = iv_all_language\n iv_langu = iv_langu\n IMPORTING et_fields_text = mt_fields_text ).\n\n \" Lectura de los campos del diccionario.\n IF iv_read_ddic = abap_true.\n\n TRY.\n get_fields_view_ddic(\n EXPORTING\n iv_name_view = iv_name_view\n iv_langu = iv_langu\n iv_add_texttable = abap_true\n iv_all_language = iv_all_language\n IMPORTING\n es_dd02v = DATA(ls_dd02v)\n et_fields_ddic = mt_fields_ddic\n et_foreign_key_ddic = mt_foreign_key_ddic ).\n\n\n CATCH zcx_al30.\n ENDTRY.\n ENDIF.\n\n ev_text_view = ls_dd02v-ddtext. \" Texto de la tabla\n\n \" Se completan los textos en base a los datos del diccionario\n adjust_fields_view( EXPORTING it_fields_ddic = mt_fields_ddic\n CHANGING ct_fields = mt_fields\n ct_fields_text = mt_fields_text ).\n\n\n \" Se orden los campos por su posici\u00F3n\n SORT mt_fields_text BY pos_ddic.\n SORT mt_fields BY pos_ddic.\n\n \" Solo se devuelven los campos solicitados\n IF et_fields IS SUPPLIED.\n et_fields = mt_fields.\n ENDIF.\n IF et_fields_text IS SUPPLIED.\n et_fields_text = mt_fields_text.\n ENDIF.\n IF es_view IS SUPPLIED.\n es_view = ms_view.\n ENDIF.\n IF et_fields_ddic IS SUPPLIED.\n et_fields_ddic = mt_fields_ddic.\n ENDIF.\n IF et_foreign_key_ddic IS SUPPLIED.\n et_foreign_key_ddic = mt_foreign_key_ddic.\n ENDIF.\n\n\n ELSE.\n es_return = zcl_al30_util=>fill_return( iv_type = 'E' iv_number = '001' iv_message_v1 = iv_name_view ).\n ENDIF.\n ENDMETHOD.\n\n\n METHOD read_view_ddic_all_lang.\n\n CLEAR: es_dd02v, et_dd03p, et_dd05m.\n\n* Se obtiene todos los idioma de logon\n get_logon_languages( IMPORTING et_lang = DATA(lt_lang) ).\n\n LOOP AT lt_lang ASSIGNING FIELD-SYMBOL(<ls_lang>).\n\n TRY.\n read_single_view_ddic(\n EXPORTING\n iv_name_view = iv_name_view\n iv_langu = <ls_lang>-lang\n IMPORTING\n es_dd02v = DATA(ls_dd02v)\n et_dd03p = DATA(lt_dd03p)\n et_dd05m = DATA(lt_dd05m) ).\n\n \" Los datos de cabecera pongo el idioma de logon. De esta manera el nombre de la tabla saldr\u00E1 en el idioma de conexion.\n \" Hago lo mismo para las claves externas de la tabla.\n IF <ls_lang>-lang = iv_langu.\n es_dd02v = ls_dd02v.\n et_dd05m = lt_dd05m.\n ENDIF.\n\n INSERT LINES OF lt_dd03p INTO TABLE et_dd03p.\n\n CATCH zcx_al30.\n ENDTRY.\n ENDLOOP.\n\n ENDMETHOD.\n\n\n METHOD save_view.\n DATA lt_fields_text TYPE zif_al30_data=>tt_fields_text_view.\n\n\n* Solo se guardar\u00E1n los textos de aquellos campos que cuyo origen del texto no sea diccionario\n LOOP AT it_fields ASSIGNING FIELD-SYMBOL(<ls_fields>) WHERE source_text = zif_al30_data=>cs_source_text-manual.\n LOOP AT it_fields_text ASSIGNING FIELD-SYMBOL(<ls_fields_text>) WHERE fieldname = <ls_fields>-fieldname.\n INSERT <ls_fields_text> INTO TABLE lt_fields_text.\n ENDLOOP.\n ENDLOOP..\n\n* Grabo los datos de la vista\n TRY.\n save_view_ddic( is_view = is_view\n it_fields = it_fields\n it_fields_text = lt_fields_text ).\n\n rs_return = zcl_al30_util=>fill_return( iv_type = 'S' iv_number = '005' iv_message_v1 = is_view-tabname ).\n CATCH zcx_al30 .\n rs_return = zcl_al30_util=>fill_return( iv_type = 'S' iv_number = '037' iv_message_v1 = is_view-tabname ).\n ENDTRY.\n\n ENDMETHOD.\n\n\n METHOD save_view_ddic.\n DATA lt_fields_ddic TYPE STANDARD TABLE OF zal30_t_fields.\n DATA lt_fieldst_ddic TYPE STANDARD TABLE OF zal30_t_fieldst.\n\n* Se borra los campos previos de la tabla ya s\u00E9 puede ser que no sean los mismos, ni en cantidad ni en nombre\n DELETE FROM zal30_t_fields WHERE tabname = is_view-tabname.\n DELETE FROM zal30_t_fieldst WHERE tabname = is_view-tabname.\n\n \" Se convierte las tablas de entrada al formato de tabla de diccionario.\n lt_fields_ddic = CORRESPONDING #( it_fields ).\n lt_fieldst_ddic = CORRESPONDING #( it_fields_text ).\n\n* A\u00C3\u00B1ado los campos\n MODIFY zal30_t_fields FROM TABLE lt_fields_ddic.\n IF sy-subrc = 0.\n\n* Los textos solo se inform\u00E1n si la tabla esta rellena. Puede no estarlo porque los textos se tom\u00E1n del diccionario\n IF lt_fieldst_ddic IS NOT INITIAL.\n MODIFY zal30_t_fieldst FROM TABLE lt_fieldst_ddic.\n ENDIF.\n IF sy-subrc = 0.\n\n MODIFY zal30_t_view FROM is_view.\n IF sy-subrc = 0.\n COMMIT WORK AND WAIT.\n ELSE.\n ROLLBACK WORK.\n RAISE EXCEPTION TYPE zcx_al30\n EXPORTING\n textid = zcx_al30=>error_save_view.\n ENDIF.\n\n ELSE.\n ROLLBACK WORK.\n RAISE EXCEPTION TYPE zcx_al30\n EXPORTING\n textid = zcx_al30=>error_save_view.\n ENDIF.\n\n ELSE.\n RAISE EXCEPTION TYPE zcx_al30\n EXPORTING\n textid = zcx_al30=>error_save_view.\n ENDIF.\n\n\n ENDMETHOD.\n\n\n METHOD transport_view.\n DATA lt_view TYPE STANDARD TABLE OF zal30_t_view.\n DATA lt_fields_ddic TYPE STANDARD TABLE OF zal30_t_fields.\n DATA lt_fieldst_ddic TYPE STANDARD TABLE OF zal30_t_fieldst.\n\n CLEAR es_return.\n\n \" Datos cabecera\n INSERT is_view INTO TABLE lt_view.\n zcl_al30_util=>values_itab_2_transport_order(\n EXPORTING\n it_values = lt_view\n iv_tabname = 'ZAL30_T_VIEW'\n IMPORTING\n es_return = es_return\n CHANGING cv_order = cv_order ).\n\n IF es_return IS INITIAL OR es_return-type NE zif_al30_data=>cs_msg_type-error.\n \" Se convierte las tablas de entrada al formato de tabla de diccionario.\n lt_fields_ddic = CORRESPONDING #( it_fields_view ).\n\n \" Solo se guardan los textos de los campos que se quiere el texto manual\n IF it_fields_text_view IS NOT INITIAL.\n LOOP AT lt_fields_ddic ASSIGNING FIELD-SYMBOL(<ls_fields_ddic>) WHERE source_text = zif_al30_data=>cs_source_text-manual.\n LOOP AT it_fields_text_view ASSIGNING FIELD-SYMBOL(<ls_fields_text_view>) WHERE fieldname = <ls_fields_ddic>-fieldname.\n DATA(ls_fieldst_ddic) = CORRESPONDING zal30_t_fieldst( <ls_fields_text_view> ).\n INSERT ls_fieldst_ddic INTO TABLE lt_fieldst_ddic.\n ENDLOOP.\n ENDLOOP.\n ENDIF.\n\n* Campos de la vista\n zcl_al30_util=>values_itab_2_transport_order(\n EXPORTING\n it_values = lt_fields_ddic\n iv_tabname = 'ZAL30_T_FIELDS'\n IMPORTING\n es_return = es_return\n CHANGING cv_order = cv_order ).\n\n IF es_return IS INITIAL OR es_return-type NE zif_al30_data=>cs_msg_type-error.\n IF lt_fieldst_ddic IS NOT INITIAL.\n zcl_al30_util=>values_itab_2_transport_order(\n EXPORTING\n it_values = lt_fieldst_ddic\n iv_tabname = 'ZAL30_T_FIELDST'\n IMPORTING\n es_return = es_return\n CHANGING cv_order = cv_order ).\n ENDIF.\n\n ENDIF.\n\n ENDIF.\n ENDMETHOD.\nENDCLASS."; //# sourceMappingURL=clas_zcl