martes, 29 de noviembre de 2011

Ampliación de WebUI con AET

Desde la versión 7 de SAP Netweaver los componentes de WebUI se pueden ampliar de forma rápida y sencilla.

Para poder ampliar necesitamos modificar los componentes de la pantalla. Esto lo hacemos con el icono de la llave inglesa, . Al presionar este botón las diferentes áreas de la pantalla se marcan y son fácilmente identificables.
Pinchamos en el área que queremos configurar.
Esto nos abre una nueva ventana, en esta ventana pinchamos en el botón "Crear campo nuevo". Ahora seleccionamos el objeto que queremos ampliar.

Para averiguar el objeto en concreto que queremos ampliar os puede ayudar el conocer el componente en el que estáis trabajando. Ahora debemos seleccionar la parte del objeto a ampliar, es decir, la cabecera, las posiciones, las relaciones... Cada objeto es un mundo y para cada objeto necesitaréis ampliar una u otra parte.

Ahora rellenamos los valores del nuevo campo, descripción, tipo de datos, tamaño... Se debe indicar una ayuda de búsqueda para el campo o bien la tabla a la que hace referencia. Si es posible indicad una ayuda de búsqueda y así tendréis el botón de búsqueda disponible. En el caso de que sea un campo que no haga referencia a uno del diccionario con ayuda de búsqueda podéis indicar una lista de valores posibles en el área de lista de selección.

En la parte de traducciones podréis poner el título del campo en los diferentes idiomas que tengáis instalados.

Cuando está todo relleno, presionamos el botón back y veremos nuestro campo. A continuación presionamos al botón de grabar y generar, esto nos solicita una orden de transporte y tenemos la configuración terminada. Para que el campo sea visible es necesario salir del sistema y volver a entrar.

A partir de este momento vuestro campo estará disponible en la configuración web de la pantalla.

sábado, 29 de octubre de 2011

Modelo para el report de actividades

En las actividades CRM podemos añadir un bloque para introducir los productos que han intervenido en la actividad en cuestión. Así si una visita a un cliente ha incluido la entrega de un cierto producto o la realización de un servicio esto puede reflejarse en CRM.

Para hacer esto debemos crear un modelo para el report de actividades y un clase de actividades, conocido en inglés como Activity Journal.

Esta parametrización se realiza toda en el entorno web, así que olvidaros esta vez de transacciones y pantallas SAP. Para poder parametrizar tendremos que entrar en el sistema como Power User, lo que nos permitirá ver opciones para parametrizar que no vemos con un usuario "normal". A continuación debemos ir al menú de opciones básicas y crear una "Clase modelo del report de actividades". Aquí definimos un nombre para la clase, fecha de inicio de validez, fecha de fin de validez, frecuencia de actualización y clase de actividad a la que va a estar asociada.
La fecha de inicio y fecha de fin son importantes ya que puede ocasionar que se solapen reports de actividades lo que produce que en el bloque de report de actividades tengamos las dos clases. O igual es lo que pretendemos conseguir.

Es posible indicar datos de organización con lo que limitaremos el ámbito de la clase a la organización, canal, sector y jerarquía que indiquemos.

En el siguiente bloque, categorías, indicaremos la categoría de la actividad a la que va a estar ligada la clase.

En el bloque de columnas debemos indicar que columnas vamos a visualizar en el report de actividades. Hay que tener en cuenta que, aunque no se indique el ID de producto siempre estará presente en el report de actividades y arrastrará todos los campos que tenga asociados que dejarán de ser modificables.

Una vez indicados todos los campos grabamos los datos. Es imprescindible que después de grabar cambiemos el status de la clase a liberado para modelo para que se pueda utilizar. Una vez echo esto, algunos campos, como la fecha de inicio de validez dejan de ser modificables y la única opción que tenemos es borrar la clase, eso sí, siempre que no tenga modelos asociados.

A continuación es necesario definir un  modelo para report de actividades. El modelo se define también en opciones básicas, crear, "modelo para el report de actividades". Al modelo debemos indicarle un nombre y la clase a la que hace referencia, la fecha de inicio y fin de validez. En las opciones de determinación de producto pondremos "Asignar manualmente manualmente". Todos los demás campos los hereda de la clase asignada. El bloque de columnas del modelo se rellena automáticamente pero podemos definir si los campos son visibles o no en nuestro modelo, así como la obligatoriedad  y si es editable.

El resto de campos limitan el ámbito del modelo, en esta ocasión no entraré en esos detalles.

Con esto ya tenemos nuestro modelo listo para ser utilizado, solo tenemos que mostrar el bloque en la actividad que hemos seleccionado y trabakar con él.

martes, 13 de septiembre de 2011

Qué es SAP CRM

A partir de una petición voy a daros mi visión de lo que es CRM. No voy a dar una charla de lo que ofrece SAP y lo bonito que es, para eso ya existen los sitios oficiales, como este sino que os voy a reflejar mis experiencias personales.

CRM es, desde mi punto de vista, un sistema de control y gestión, tanto interno como externo. Me explico. El objetivo oficial de CRM es, como indica el nombre, la gestión de los clientes. A todos los niveles, gestiona datos de venta y potencial, permite gestionar agendas y mejorar las visitas, controlar a todos los niveles los contactos con los clientes, desde llamadas telefónicas hasta grandes reuniones. A partir de toda esta información permite agrupar los clientes, calibrar el potencial que tienen, el gasto que realiza la empresa en la gestión de ese cliente, tanto a nivel de materiales que se le entregan como de fuerza comercial que se está "gastando" en ese cliente. Y todo esto lo puede utilizar el departamento de marketing para presupuestar sus gastos, segmentar los clientes y hacer que la inversión sea más rentable y esté mejor orientada.

Pero aqui no acaba la cosa, CRM también sirve para controlar a los propios empleados. Permite ver cuantas acciones comerciales se realizan, que resultado se obtiene de esas acciones. Quien realiza más, pero también quien lo realiza mejor. Quien obtiene más resultado de las visitas, cuales acaban en venta, quien consigue mejores clientes o maximiza la inversión. Y por supuesto a los superiores les sirve para orientar esa acción comercial, reconducir las acciones que consideran que no se están gestionando bien.

Y todo en un sistema que ofrece la información a todos los niveles inmediatamente, que se comunica con el resto de herramientas SAP de forma transparente para el usuario y que permite una gestión de autorizaciones a multiples niveles.

Eso sí, cualquier parecido con R/3 es pura coincidencia, tiene una parametrización, para los que venimos de R/3, confusa, un sistema de tablas y claves primarias (GUID y ID) farragoso, parametrizaciones que se realizan sólo en el entorno web, otras que se realizan sólo en entorno GUI y otras que pueden hacerse en los dos entornos. Todo un reto, vamos.

En resumen, un entorno con muchas posibilidades, pero complejo de parametrizar y mantener.

Dad vuestras opiniones del sistema en los comentarios. 

jueves, 11 de agosto de 2011

Añadir campo en vistas del maestro de materiales

Me he encontrado con la necesidad de permitir stocks negativos. Para permitir stocks negativos por centro y almacén se debe utilizar la transacción OMJ1. Es una transacción sencilla que debemos rellenar en sus tres niveles, a nivel de centro, a nivel de stock especial (esto es opcional) y a nivel de almacén.

Pero aquí no acaba la cosa, para que un material tenga stocks negativos es necesario indicar en el maestro de materiales (MM02) que el material en concreto puede tener un stock negativo. Como veis los stocks negativos están muy restringidos. Con este último punto es con el que me he encontrado problemas, ya que los materiales que quería controlar no tenían visible ese campo.
Por lo tanto voy a explicar como hacer visible un campo en el maestro de materiales, centrándome en el flag de stocks negativos.

El campo que nos interesa se encuentra en la pestaña Datos generales/almacenamiento2. Esto realmente no es importante, no afecta al resto de configuración. Debemos localizar el grupo de selección de campos donde se encuentra el mismo. Los grupos de selección de campos se encuentran en la transacción OMSR. En esta transacción podemos utilizar la búsqueda para localizar por la descripción el campo que buscamos. Podéis probar buscando "negativos" o directamente el nombre técnico que es MARC-XMCNG. Cuando localicéis el campo os dirá en que grupo se encuentra. En mi caso está en el grupo 211. Desde aquí podéis navegar hasta la actualización de grupos, mediante el botón con la marca verde, o bien utilizando la transacción OMS9.

Vemos los detalles del grupo que nos interesa y veréis que aparece una tabla con referencias y unos radiobutton para marcarlos como suprimir, visualizar, obligatorio y opcional. Aquí tenemos dos opciones, la buena y la mala... La mala es poner todos los campos en el valor que nos interese, en este caso opcional. Con esto perdemos todo el control que la transacción nos puede dar. La buena es activar solo para las referencias que nos afecten la visualización (o modificación).

Para poder activar el campo solo en los materiales que nos interesen podemos limitar por Ramo de material, por centro y por grupo de materiales. Cada ramo puede tener una referencia de campo distinta, estas referencias las vemos en la transacción OMS3, cada centro puede tener una referencia de campo distinta, estas referencias las vemos en la transacción OMSA. Con todas estas referencias localizadas podemos marcarlas con la opción que nos interese. Además debemos marcar las que nos afecten al tipo de material que queremos controlar. Esto podemos verlo en la actualización de grupos mediante el botón de referencia de utilización.

Y aquí no acaba todo ya que es necesario marcar la opción requerida en las transacciones de visualización, modificación y creación de materiales, de nuevo revisando la referencia de utilización de las referencias de campo, y además hay que activarlo para los campos de SAP que afectan a todos los materiales.

Y con esto tenemos el campo que nos interesa visible y solo para los materiales que nos interesan.

Si conocéis algún detalle o truco para estas transacciones compartidlo en los comentarios.

miércoles, 1 de junio de 2011

Convertir caracteres extraños en ABAP

La entrada de hoy no tiene nada que ver con CRM. Se trata de reemplazar caracteres extraños. En ocasiones al importar o exportar archivos o incluso en la comunicación entre módulos o sistemas (para quien no hay lo sepa el módulo de CO-PA es un poco "especial") se transportan caracteres que no son representables.
Realmente es muy frustrante ver como un caracter extraño puede deshacer todo un desarrollo. Estos caracteres no se puede atacar mediante un REPLACE ya que no pueden ser entrados por teclado y el cambio a hexadecimal no suele dar muy buenos resultados.
En el ejemplo que os pongo cambiremos esos caracteres por el caracter '/' con lo que ya lo podeis tratar como un texto normal. Yo lo que haré despues es sutiruirlo por espacio y condensar:

 Definimos un integer con el valor hexadecimal de la barra:

DATA lv_int TYPE i VALUE 47.

Llamo a la función:

CALL FUNCTION 'SCP_REPLACE_STRANGE_CHARS'
  EXPORTING
    intext      = "Texto_a_tratar"
    replacement = lv_int
   IMPORTING
    outtext     ="texto_salida"
      .

REPLACE ALL OCCURRENCES OF '/' IN "texto_salida" WITH space.
CONDENSE "texto_salida" NO-GAPS.

viernes, 6 de mayo de 2011

Campo por defecto en componente

Siguiendo el post anterior de ampliación de un componente del WebUI voy a contar como poner un campo por defecto en una página de CRM.
Obviamente debemos conocer el componente y la vista que queremos ampliar. Una vez que lo conozcamos ampliamos el componente y la vista y se redefine el método DO_VALIDATE_INPUT. Con este método vamos a poner un filtro por defecto y no va a ser modificable. Utilizando otros métodos es posible poner filtros que sean modificables por los usuarios.
Primero se obtiene el nodo de contexto:
lv_cnode = get_dquery_cnode( ).

El query del nodo:
lr_qs ?= lv_cnode->collection_wrapper->get_first( ).

Y los parámetros del filtro:
lr_col_params = lr_qs->get_selection_params( ).

Recorro los filtros hasta encontrar el que me interesa. Si el filtro tiene valores indicados y no son los que nos interesan los borro. Podríamos borrar directamente, pero así queda como más elegante ;-) :
lv_selection_parameter = lr_col_params->get_first( ).

WHILE lv_selection_parameter IS NOT INITIAL.
  lv_name ?= lv_selection_parameter->get_property( 'ATTR_NAME' ).
  IF lv_name->* = 'NOMBRE_DEL_ATRIBUTO'.
    CALL METHOD lv_selection_parameter->get_properties
      IMPORTING
        ES_ATTRIBUTES = atributes.
    IF control de valores.
      lr_col_params->remove( lv_selection_parameter ).
      lv_selection_parameter = lr_col_params->get_current( ).
      lv_control = 'X'.
    ELSE.
      lv_selection_parameter = lr_col_params->get_next( ).
    ENDIF.
  ELSE.
    lv_selection_parameter = lr_col_params->get_next( ).
  ENDIF.
ENDWHILE.

Ahora ponemos el valor que nos interesa.
IF lv_control = 'X'.
      new_selection_parameter =
          lr_qs->insert_selection_param( iv_attr_name = 'NOMBRE_DEL_ATRIBUTO'
          iv_sign = 'I'
          iv_option = 'EQ'
          iv_low = 'VALOR'
          iv_index = lv_index ).
ENDIF.

Por este método pasa siempre que presionemos al botón buscar por lo que cambie lo que se cambie en el filtro siempre pondrá los datos por defecto.

Por cierto, a partir de estas dos definiciones deberíais tener suficiente para sacar el resto y que el código compile:
DATA lv_cnode TYPE REF TO cl_bsp_wd_context_node_asp.
DATA atributes TYPE genilt_selection_parameter.

Y recordad de llamad al método superior para que todo funcione correctamente.

martes, 26 de abril de 2011

Ampliar componente WebUI

Muchas veces las pantallas estándar no nos ofrecen todo lo que la empresa necesita. La interfaz web de CRM tiene la ventaja de poder ampliarse casi de cualquier manera, sin necesidad de solicitar código de desarrollador a SAP ya que son ampliaciones que no modifican el código estándar. A continuación detallo como identificar y ampliar una página o componente del interfaz web.

El primer paso es conocer el componente y vista que queremos actualizar. Es importante tener en cuenta que una pantalla que puede parecer idéntica puede estar en el mismo componente pero en diferentes vistas. Para conocer el componente y la vista que queremos ampliar nos situamos en la pantalla que queremos ampliar, situamos el foco en cualquier campo y presionamos F2.

El componente a ampliar está en el bloque "Campo:Información técnica - Componente de IU" y la vista en el campo "Vista". Hay casos en los que el botón F2 no funciona. En esos casos no queda otra opción que debugar la vista anterior hasta encontrar la que queremos ampliar.

Con estos datos vamos a la transacción BSP_WD_CMPWB - Workbench del componente BSP WD. Se pone el componente a ampliar y el set de ampliación a utilizar.

Si no existe set de ampliación o se quiere utilizar otro en este punto se puede crear con el botón de creación (La hoja en blanco)

Pinchamos al botón actualizar y llegamos a la pantalla donde nos muestra todo el componente con las páginas y las vistas que tiene.

Aquí pinchamos en el botón "Ampliar el componente" para poder modificarlo. Ponemos nombre a la aplicación y aceptamos los mensajes siguientes. En el pop-up donde nos pide una página mantenemos la página por defecto y añadimos los cambios a una orden de transporte.

Ahora el componente es ampliable. Podemos modificar las vistas las páginas, crear nuevos eventos, campos....

Lo más complicado de este proceso es encontrar en qué punto necesitamos ampliar y que métodos podemos utilizar, habrá que ir haciendo pruebas con break-points. Para ampliar cualquier componente pinchamos con el botón derecho en la vista y seleccionamos "ampliar", incluimos la ampliación en una orden de transporte.

La clase de la vista se ha transformado en una clase Z. En este punto es posible que para que se reflejen los cambios haya que salir de la transacción y volver a entrar. Tenemos que decidir en que punto vamos a ampliar, TODOS son ampliables.

Para ello presionamos el botón derecho sobre el método a ampliar y seleccionamos "Redefinir".

El indicador cambia a verde indicando que el método está ampliado. Con doble click entramos en el método. Es necesario llamar al método de la clase superior quitando el comentario que nos aparece en el código, ponemos el código que necesitemos y tenemos el componente ampliado.

jueves, 21 de abril de 2011

Primer Post

Bueno, mi primer post en este blog... En realidad mi primer post en cualquier blog, me desvirgo con este. Hace tiempo que visito blogs, leo los comentarios, obtengo información de ellos para mi trabajo. Creo que es el momento de aportar mi pequeño granito de arena y publicar contenido en esto de la world wide web. Así que vamos allá, este blog se va a dedicar a mostrar pequeñas guias para SAP CRM pero también en otras áreas de SAP, y es posible que comentarios personales sobre cosas que no tienen nada que ver ni con el mundo SAP ni con la tecnología.
Espero tener en poco tiempo miles de seguidores y poder jubilarme y dedicarme en exclusiva a este blog ;-) Desde luego se aceptan sugerencias sobre temas así como correcciones y cualquier tipo de comentario. Espero que a alguien le sea útil.

Bienvenidos todos a esta nueva experiencia