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)

lunes, 2 de julio de 2012

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

Continuamos con la creación del bloque. 
Vamos ahora a configurar la parte de webui para que nuestra clase sea visible mediante un bloque.

Conocido el componente a ampliar es necesario crear una nueva vista y asignarla al componente y grupo de pantallas. Hay que redefinir los métodos de la vista y crear nuevos eventos para que el bloque se comporte como deseamos. También hay que relacionar la vista con el GUID del objeto raíz. En este punto vamos a crear la vista mediante el asistente.

Entramos en la transacción BSP_WD_CMPWB en el componente que nos interesa. Para este caso vamos a ampliar las tareas por lo que nuestro componente es el BT125H_TASK. Pinchamos en la opción "Browser de modelo BOL". Si hemos realizado bien la configuración desplegando el objeto raiz deberíamos ver nuestro componente. 

Vamos a crear ahora la vista. 
Para crear la vista utilizamos el asistente y debemos incluir el objeto con el que vamos a relacionar la tabla. Este objeto nos aparece también en los objetos raiz del browser de modelo BOL. Debemos elegir el que nos convenga. En este caso concreto el que nos interesa el el objeto BTOrder.
Vamos al "Browser de estructura de componente" y en las vistas presionamos el botón derecho y crear. Nos muestra un asistente. En el primer paso debemos asignarle un nombre a la vista. Personalmente me gusta empezarlos por Z pero el nombre del completamente es libre. En el paso siguiente de nodos modelos asignamos nuestro nodo Root y el nodo con el que enlaza que hemos decidido que sea BTOrder:




En el paso de nodos de valor no indicamos nada. Pásamos al paso de atributos modelo.
Aqui presionamos el botón + () del asistente. Nos aparece una pantalla con los nodos que hemos introducido en el paso de nodos modelo con todos sus campo.

Seleccionamos los campos que queremos que aparezcan en la vista. Por norma deben ser todos los de la tabla Z y se debe incluir el campo de relación con el objeto estándar. En este paso es posible que algún campo genere conflicto de nombres. En caso de que se nos muestre un conflicto de nombres simplemente cambiamos el nombre del campo, por ejemplo poniendole una Z delante.

Se nos muestra una lista con todos los campos seleccionados. Pasamos al siguiente paso y continuamos sin indicar nada.
Seguimos con el paso de "crear enlaces para controlador custom". En este caso vamos un poco a ciegas. Tenemos que encontrar la relación entre el nodo de contexto BTOrden con los datos de la actividad (o los objetos que nos interese). Con un poco de sentido común y ayuda de MR. Google encontraremos la relación correcta. Siempre tenemos la opción de prueba-error. Una vez decidamos continuamos y debemos seleccionar el tipo de vista. Para nuestro caso nos interesa una vista de tabla, que sea confirgurable y modificable. Estos son los datos:


Presionamos continuar y se nos presenta el resumén de la configuración por si queremos cambiar algo. Presionamos finalizar y tenemos la vista creada.

Ya tenemos nuestra vista creada y relacionada con el componente. Vamos a publicarla. Para ello tenemos que añadir la vista al ViewSet que nos interese. Vamos al "Editor de repository en tiempo de validez" y presionamos el botón de modificar. En este caso vamos a modificar el ViewSet TaskOVViewset. En el viewArea presionamos el botón derecho y añadimos nuestra vista.
A continuación hacemos doble click en el viewSet y vamos a la pestaña de configuración. Añadimos la vista a los bloques que ya son visibles. Este paso lo podemos hacer en el WebGUI.
Volvemos al "Browser de estructura del componenete" y hacemos doble click en la vista. En la pestaña de configuración mostramos los campos que nos interesen.

Con esto nuestra vista está visible en web. En el siguiente post veremos como hacer que se comporte como nos interesa.

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