Ampliación de atributos de BO
Si es requerido, es posible ampliar un objecto de negocio (BO - Business Object) para así ampliar sus atributos.
Para esto:
1.- Se accede a la transacción SWO1, se informa el BO que se será ampliado y se hace clic en el botón ‘Subtipo’:
2.- Se abrirá una ventana emergente llamada ‘Crear tipo de objeto’ en la que se podrá informar distintos datos.
3.- Una vez creado el ‘Tipo de objeto’ se procederá a generar un nuevo atributo.
En este ejemplo se trata un BO de pedido de compras. Por tanto, la tabla maestra de datos es la EKKO.
Si por ejemplo se requiere obtener un campo tipo ‘NIF del proveedor’, se creará el atributo siguiendo los siguientes pasos:
1 - Acceder al BO que creado por la SWO1
2 - Posicionarse sobre los atributos del BO y hacer clic en crear.
3 - Se abrirá la ventana emergente llamada ‘Crear con valores de campo propuestos Data Dictionary’.
En esta ventana se deberá indicar la tabla origen desde la cual se obtendrá el atributo y seleccionar el campo específico que almacena el dato.
Para el ‘NIF del poveedor', estos serían:
Tabla: LFA1
Campo: STCD1
4 - Dar doble clic sobre el nuevo atributo generado para visualizar la siguiente ventana:
4.1 - Modificaremos la fuente si es necesario. Hay dos opciones:
Virtual - Se marcará en caso de que el atributo lo obtengamos de una tabla diferente a la fuente del BO (en este caso la tabla fuente del BO BUS2012 es la EKKO).
Campo de BD - Se marcará en el caso de que el atributo se obtenga directamente de la tabla fuente del BO.
En nuestro caso debemos poner virtual ya que accedemos a la LFA1.
5 - En caso de haber creado un atributo virtual, tendremos que definir un código para mapear el valor de ese atributo. Para ello nos posicionamos sobre el atributo dentro de la jerarquía y hacemos clic en el botón superior de "Programa".
El siguiente código es un ejemplo de como mapear el NIF del proveedor:
Programa ZBUS2012
***** Implementation of object type ZBUS2012 *****
INCLUDE <object>.
begin_data object. " Do not change.. DATA is generated
* only private members may be inserted into structure private
DATA:
" begin of private,
" to declare private attributes remove comments and
" insert private attributes here ...
" end of private,
BEGIN OF key,
purchaseorder LIKE ekko-ebeln,
END OF key,
taxnumber1 TYPE lfa1-stcd1,
name TYPE lfa1-name1.
end_data object. " Do not change.. DATA is generated
TABLES lfa1.
DATA gs_lfa1 TYPE lfa1.
FORM update_lfa1.
DATA: lv_order TYPE ekko-ebeln.
lv_order = object-key-purchaseorder.
CLEAR gs_lfa1.
SELECT SINGLE *
FROM ekko AS a
INNER JOIN lfa1 AS b ON a~lifnr EQ b~lifnr
INTO CORRESPONDING FIELDS OF gs_lfa1
WHERE a~ebeln EQ lv_order.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
get_property taxnumber1 changing container.
IF gs_lfa1 IS INITIAL.
PERFORM update_lfa1.
ENDIF.
IF gs_lfa1-stceg IS NOT INITIAL.
object-taxnumber1 = gs_lfa1-stceg.
ELSEIF gs_lfa1-stcd1 IS NOT INITIAL.
object-taxnumber1 = gs_lfa1-stcd1.
ELSEIF gs_lfa1-stcd2 IS NOT INITIAL.
object-taxnumber1 = gs_lfa1-stcd2.
ELSEIF gs_lfa1-stcd3 IS NOT INITIAL.
object-taxnumber1 = gs_lfa1-stcd3.
ELSEIF gs_lfa1-stcd4 IS NOT INITIAL.
object-taxnumber1 = gs_lfa1-stcd4.
ENDIF.
swc_set_element container 'TaxNumber1' object-taxnumber1.
end_property.
6 - Una vez guardado el programa. Volvemos a la pantalla del BO con la jerarquía y hacemos clic en el botón de generar .
7 - Volvemos a la pantalla principal de la SWO1 e informamos el BO estándar del que creamos el subtipo Z y hacemos clic en Opciones/Delegación:
8 - Por último, crearemos una nueva entrada de delegación para el BO BUS2012 indicando que herede de la ZBUS2012 con los nuevos atributos.
Avvale 2024