lunes, 23 de junio de 2014

Imágenes o logos dinámicos en un SapScript

Programación:
  TYPESBEGIN OF ty_logo,
*        tdobject TYPE tdobject,
        tdname TYPE  tdobname, "tdname,
*        tdid TYPE tdid,
        tdbtype TYPE tdbtype,
        tdresolut TYPE tdresolut,
  END OF ty_logo.

PERFORM zlogo_get '0300'.

  FORM zlogo_get USING p_bukrs TYPE bukrs.
*
    CASE p_bukrs.
      WHEN '0300'.
        gl_logo-tdname 'LOGO_0300'.
        gl_logo-tdbtype 'BCOL'.
        gl_logo-tdresolut 300.
      WHEN '0200'.
        gl_logo-tdname 'LG_0200'.
        gl_logo-tdbtype 'BCOL'.
        gl_logo-tdresolut 200.
      WHEN '0400'.
        gl_logo-tdname 'LOG4EX'.
        gl_logo-tdbtype 'BCOL'.
        gl_logo-tdresolut 200.
      WHEN '0500'.
        gl_logo-tdname 'LOGONEW'.
        gl_logo-tdbtype 'BCOL'.
        gl_logo-tdresolut 200.
      WHEN OTHERS.
    ENDCASE.
*
    CALL FUNCTION 'WRITE_FORM'
      EXPORTING
        window 'LOGO_SOC'.
*
  ENDFORM.  

En la ventana LOGO_SOC comando /:
BITMAP &GL_LOGO-TDNAME& OBJECT GRAPHICS ID BMAP TYPE &GL_LOGO-TDBTYPE& DPI &GL_LOGO-TDRESOLUT&

viernes, 6 de junio de 2014

Depurar (debugging) un smartform.

Este es un truco personal que también le parece útil a Dani, no sé si otra gente lo hacer o si hay alternativas. Como no deja poner break-points no explícitos en el código de los smartforms.

Lo que hago es en la parte alta de la edición del smartform, voy Entorno->Nombre del módulo de funciones. Copio el nombre del módulo de funciones, que además en este caso también es el nombre del grupo de funciones. Voy  a la SE80 y lo copia allí en grupos de funciones. Busco un trozo de código en todo el programa que corresponda al sitio donde quieres debuggar.


A veces no encuentras tu trozo de código... la solución es ponerse encima del grupo de funciones botón derecho, Otras funciones-> Reestructurar lista de objetos.

miércoles, 4 de junio de 2014

miércoles, 28 de mayo de 2014

Guardar campos en tablas Z con el Generador de actualización de tablas. Evento 01.

Situación:
Tengo una tabla ZTABLA a la que le he creado una vista de actualización para la SM30. Y quiero controlar quien y cuando hace cambios en los campos ERDAT, ERZET, ERNAM, AEDAT, AEZET, AENAM. 

El código de help.sap no acaba de funcionar tal cual.

Solución: Primero bloqueo en la dynpro de la actualización estas columnas para que sólo sean de salida y añado el evento 01 (Antes de grabar los datos en la base de datos) con la siguiente subrutina:

*&---------------------------------------------------------------------*
*&      FORM ZEVENTO01
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM ZEVENTO01.

  CONSTANTSLC_ACTION TYPE FIELDNAME VALUE 'ACTION'.

  DATABEGIN OF ZTABLA_EXTRACT OCCURS 0010.
          INCLUDE STRUCTURE ZTABLA_COSTES.
          INCLUDE STRUCTURE VIMFLAGTAB.
  DATAEND OF ZTABLA_EXTRACT.

  DATA LS_DATA_TOTAL          LIKE ZTABLA_EXTRACT.
  DATA LS_DATA_EXTRACT        LIKE ZTABLA_EXTRACT.
  DATA LV_ACTION_TOTAL              TYPE COMT_BOOLEAN.
  DATA LS_TABIX               TYPE SY-TABIX.

  FIELD-SYMBOLS<LV_ACTION_TOTAL>    TYPE CHAR1,
                 <LS_DATA_TOTAL>      TYPE ANY,
                 <LS_DATA_EXTRACT>    TYPE ANY.

  LOOP AT TOTAL.
*
    ASSIGN TOTAL TO <LS_DATA_TOTAL> CASTING LIKE ZTABLA.
    LS_DATA_TOTAL <LS_DATA_TOTAL>.
    ASSIGN COMPONENT LC_ACTION OF STRUCTURE TOTAL TO <LV_ACTION_TOTAL>.
*
    IF SY-SUBRC NE 0.
      LV_ACTION_TOTAL <ACTION>.
      ASSIGN LV_ACTION_TOTAL TO <LV_ACTION_TOTAL>.
    ENDIF.
*
    LV_ACTION_TOTAL <LV_ACTION_TOTAL>.
    CHECK LV_ACTION_TOTAL IS NOT INITIAL.
*
    READ TABLE EXTRACT WITH KEY  <VIM_XTOTAL_KEY>.
*
    IF SY-SUBRC EQ 0.
      LS_TABIX SY-TABIX.
    ELSE.
      CLEAR LS_TABIX.
    ENDIF.
*
    IF LS_DATA_TOTAL-PEINH IS INITIAL.
      LS_DATA_TOTAL-PEINH 1.
    ENDIF.
*
    IF LV_ACTION_TOTAL EQ 'N'." New Entry.
      LS_DATA_TOTAL-ERDAT SY-DATUM.
      LS_DATA_TOTAL-ERZET SY-UZEIT.
      LS_DATA_TOTAL-ERNAM  SY-UNAME.
    ENDIF.
*
    IF LV_ACTION_TOTAL EQ 'U'."Update
      LS_DATA_TOTAL-AEDAT SY-DATUM.
      LS_DATA_TOTAL-AEZET SY-UZEIT.
      LS_DATA_TOTAL-AENAM SY-UNAME.
    ENDIF.
    <LS_DATA_TOTAL> LS_DATA_TOTAL.
*
    MODIFY TOTAL.
    CHECK LS_TABIX GT 0.
    EXTRACT TOTAL.
    MODIFY EXTRACT INDEX LS_TABIX.
*
  ENDLOOP.
*
  SY-SUBRC 0.
ENDFORM.                    "FORM ZEVENTO01

Nota: podemos buscar otras vistas de actualización con eventos en TVIMF para ver como lo hace.
Otras referencias:
http://scn.sap.com/docs/DOC-10318
http://help.sap.com/saphelp_nw04s/helpdata/en/a7/5133ac407a11d1893b0000e8323c4f/frameset.htm

martes, 20 de mayo de 2014

BW: Infopaquete en peticiones vacías.

Al planificar una cadena tengo el problema de que si la fuente de datos no tiene registros y viene vacío se que me queda parado el infopaquete con un aviso (warning) y no continua cuando ya puede ser estemos sin registros. 

Solución que me dio en su momento Laura, vamos al infopaquete, y en el menú superior, vamos a Planificador -> Tratamiento de avertencias y ponemos que sea ok. O en este caso casi mejor Planificador-> Color de semáforo en peticiones vacías e indicamos que semáforo verde.




Lo he hecho directamente en producción. Y para que poder continuar ejecutando la cadena, desde el log la cadena he llegado al monitor del infopaquete y le he cambiado el estado de la cabecera a correcto, esto ya no tendré que hacerlo en este caso por que cambio hecho desde el Planificador.

lunes, 31 de marzo de 2014

Nota sobre transporte en Business Warehouse de desarrollo a productivo.

Me anoto lo que me explico Laura, una vez más, a la hora de transporta de BW-DES a BW-PRO el orden recomendado para hacerlo sería:

Primero hay que mapear en BW-PRO entre los sistemas fuentes con la transacción RSLGMP, si no al transportar los sistemas fuentes nos dará la STMS un error del tipo "El sistema fuente <E3-DES-100> no existe".

  1. Orden con objetos (sólo estructuras como infocubos y características).
  2. Fuentes de datos.
  3. Transformaciones.
  4. DTP/Infopaquetes.
  5. Informes (Querys).



lunes, 24 de marzo de 2014

De char a numc. From char to numc.

FORM convert_char_to_numc USING p_char
                          CHANGING p_numc.
  DATAl_aux_i TYPE i.
  l_aux_i p_char.
  p_numc l_aux_i.
ENDFORM.