jueves, 30 de agosto de 2012

Programación BOL/GenIL. Crear nuevo bloque (6/7)


Continuamos con nuestro bloque en WebGui. A continuación veremos las modificaciones necesarias en la clase de visualización para que nuestros datos sean visibles y modificables. 

Para ello primero es necesario modificar el nodo de contexto. Los métodos a modificar en el nodo de contexto son GET_TABLE_LINE_SAMPLE y  IF_BSP_MODEL~INIT.
  • Método  GET_TABLE_LINE_SAMPLE
    En este método definimos la estructura del nodo. El código a implementar es el siguiente
    TYPESBEGIN OF line.

     
    include type ZEXPO_BOL_ST.

    TYPES: END OF line.

    CREATE DATA rv_sample TYPE line.
  • Método IF_BSP_MODEL~INIT
    Este método
    inicializa la colección en el inicio. El código a implementar es el siguiente:
    TYPES ltype_attr_struct TYPE zexpo_bol_st.

    DATAlrf_data_struct TYPE REF TO ltype_attr_struct,
          lrf_value_node 
    TYPE REF TO cl_bsp_wd_value_node,
          lrf_bol_collection 
    TYPE REF TO if_bol_bo_col.

    super
    ->if_bsp_model~initid id
                              owner 
    owner ).

      
    CREATE DATA lrf_data_struct.

      
    CREATE OBJECT lrf_value_node
        
    EXPORTING
          iv_data_ref 
    lrf_data_struct.

      
    CREATE OBJECT lrf_bol_collection TYPE cl_crm_bol_bo_col.

      lrf_bol_collection
    ->addlrf_value_node ).
      me
    ->set_collectionlrf_bol_collection ).
A continuación se deben modificar los métodos de recuperación de datos. Para recuperar los datos es necesario crear el método ROOT_QUERY en la clase de implementación de nuestro bloque y redefinir el método DO_PREPARE_OUTPUT para que llame al nuevo método.
  • Método ROOT_QUERY
    El método debe ser de instancia y privado.
    No tiene parámetros. El código a implementar es el siguiente:
    DATA
    lrf_advanced_query TYPE REF TO cl_crm_bol_dquery_service,
          lrf_root_result_collection 
    TYPE REF TO if_bol_entity_col,
          lrf_root_result_bol_entity 
    TYPE REF TO cl_crm_bol_entity,
          lrf_current_root 
    TYPE REF TO if_bol_bo_property_access,
          lrf_current_root_col 
    TYPE REF TO if_bol_bo_col,
          lrf_current_btorder 
    TYPE REF TO if_bol_bo_property_access,
          lt_params 
    TYPE crmt_name_value_pair_tab,
          ls_params 
    TYPE crmt_name_value_pair,
          lv_low_value 
    TYPE string,
              ls_root_properties TYPE zexpo_bol_st,
          ls_btorder_properties 
    TYPE crmst_header_admin_btil,
          lv_index 
    TYPE i.

     
    CLEAR lv_index.

      ls_params
    -name 'MAX_HITS'.
      ls_params
    -value '10'"Solo un resultado.
      
    APPEND ls_params TO lt_params.

      lrf_current_btorder ?= me
    ->typed_context->btorder->collection_wrapper->get_current( ).

      
    CHECK lrf_current_btorder IS BOUND.lrf_current_btorder->get_propertiesIMPORTING es_attributes ls_btorder_properties ).

      
    CHECK ls_btorder_properties-header_guid IS NOT INITIAL.
      lv_low_value = ls_btorder_properties-header_guid.
      lrf_advanced_query = cl_crm_bol_dquery_service=>get_instance( 'Search' ).
      lrf_advanced_query->set_query_parameters( it_parameters = lt_params ).
      lrf_advanced_query->add_selection_param( iv_attr_name = 'ACT_GUID'
                                               iv_sign = 'I'
                                               iv_option = 'EQ'
                                               iv_low = low_value
                                               iv_high = '' ).
      lrf_root_result_coll
    ection = lrf_advanced_query->get_query_result( ).
     
      me->typed_context->root->set_collection( lrf_root_result_collection ).
  • Método DO_PREPARE_OUTPUT
    La programación básica para la recuperación de datos es la siguiente:

    DATA
    :  ls_button    TYPE crmt_thtmlb_button.

      
    CALL METHOD super->do_prepare_output
        
    EXPORTING
          iv_first_time 
    iv_first_time.

      me
    ->root_query( ).
Con esto nuestros datos son visibles. 

En el próximo post (y último) crearemos los botones necesarios para dar funcionalidad al bloque. 

Relacionado:
Programación BOL/GenIL (1/7)
Programación BOL/GenIL (2/7)
Programación BOL/GenIL (3/7)
Programación BOL/GenIL (4/7)
Programación BOL/GenIL.(5/7)
Programación BOL/GenIL.(7/7)

2 comentarios:

  1. Hola,

    Creo que me falta algo pero no detecto que es:
    Me marca error en esta línea al ejecutar:
    lrf_advanced_query = cl_crm_bol_dquery_service=>get_instance( 'Search' ).

    ResponderEliminar
    Respuestas
    1. Es cierto, en la tabla de objetos tienes que definir una entrada con los valores:
      Search - G - Estructura key - estructura de atributos.

      Saludos

      Eliminar