La aplicación móvil SAP Service and Asset Manager (SAM) se integra con SAP Field Service Management (FSM) como parte de la persona de Field Service Technician mediante el conector Proaxia. SAM se integra con el tablero de planificación de SAP FSM para establecer el estado actual de la actividad y los datos de ubicación del técnico. Además, actualiza los datos relacionados con el kilometraje y los gastos capturados desde la aplicación móvil SAM en el sistema en la nube de FSM. Como parte de esta integración, SAM también es compatible con FSM Smartforms y permite que la aplicación móvil de SAM descargue, modifique y cargue Smartforms asignados a una actividad/operación.
SAP SAM se integró directamente con SAP FSM utilizando las API de servicio y datos proporcionadas por SAP FSM. Sin embargo, los objetos subyacentes que deben actualizarse (por ejemplo, Órdenes de servicio (Llamadas de servicio en FSM), Operaciones (Actividades en FSM), Empleados (Personas en FSM) son creados por el conector de Proaxia. Por lo tanto, deben cumplirse los siguientes requisitos previos implementarse para que los escenarios de extremo a extremo funcionen.
Para ejecutar los escenarios de integración admitidos entre SAP SAM y SAP FSM, se deben cumplir los siguientes requisitos previos para que la integración funcione correctamente:
Las siguientes secciones explicarán los detalles sobre cómo implementar estos requisitos previos.
Desde el sistema backend de SAP, use la opción de menú de FSM Connector, Customizing –> Objects –> Company –> Company Definition (Código de transacción: /PACG/ECM_COMP).
Al habilitar el indicador de identificación externa, puede activar el envío de la identificación externa desde el conector FSM a FSM.
El marco de integración de aplicaciones móviles (MAIF), que admite funciones de integración de back-end de SAM, proporciona diferentes opciones de BAdi para determinar las referencias cruzadas de campos clave entre FSM Connector y el sistema FSM Cloud. El Badi /MERP/CA_FSM_CROSSREF_BADI se entrega para el sistema ERP y S/4HANA para admitir esta función con los siguientes métodos de interfaz.
Los siguientes ejemplos de código son un ejemplo, es posible que deba realizar ajustes adicionales para su entorno.
Parámetro de importación: iv_cuenta TIPO /paquete/ecm_cloudaccount. Parámetro de retorno: rv_compid TIPO /paquete/ecm_compid.
METHOD get_compid.
DATA: lv_string1 TYPE string,
lv_string2 TYPE string,
lv_account TYPE string,
lv_fsmaccount TYPE /pacg/ecm_cloudaccount,
lv_fsmcompany TYPE /pacg/ecm_cloudid,
lv_compid TYPE /pacg/ecm_compid,
ls_cacc TYPE /pacg/ecm_cacc.
lv_account = iv_account.
SPLIT lv_account AT '&account=" INTO lv_string1 lv_string2.
SPLIT lv_string2 AT "&company=' INTO lv_string1 lv_string2.
lv_fsmaccount = lv_string1.
lv_fsmcompany = lv_string2.
ls_cacc = /pacg/ecm_cl_d_access=>get_cloudcomp_definition(
iv_cloudaccount = lv_fsmaccount
iv_cloudid = lv_fsmcompany ).
rv_compid = ls_cacc-compid.
ENDMETHOD.
Este método es un requisito previo para guardar geolocalizaciones capturadas de SAP SAM hacia FSM de SAP tablero de planificación y programación. El método debe devolver el MEV Identificación(es) interna(s) de empleado (Campo identificación del Gestión de servicios de campo Persona entidad) en función de los números de personal proporcionados. Utilice el parámetro de importación IO_ACI_SERVICE para ejecutar una llamada de servicio a Gestión de servicios de campo para recuperar el identificación basado en el código en el siguiente ejemplo de código.
METHOD /merp/if_ca_fsm_crossref_badi~get_employee_ids.
TYPES: BEGIN OF ty_error,
error TYPE string,
END OF ty_error.
TYPES: BEGIN OF ty_fsmitem,
id TYPE string,
externalid TYPE string,
username TYPE string,
END OF ty_fsmitem.
TYPES: BEGIN OF ty_persondata,
person TYPE ty_fsmitem,
END OF ty_persondata.
DATA:
lv_pernr_query TYPE string,
ls_oblnk TYPE /smfnd/sync_d_oblnk_h_upd_str,
lv_id TYPE /smfnd/sync_object_key_dte,
lv_url TYPE string,
lv_char_code TYPE n LENGTH 3,
lt_persondata TYPE STANDARD TABLE OF ty_persondata,
ls_persondata LIKE LINE OF lt_persondata,
lt_error TYPE STANDARD TABLE OF ty_error,
ls_error LIKE LINE OF lt_error,
lv_status_code TYPE i,
lv_reason TYPE string,
lv_result TYPE string,
lv_raw_data TYPE xstring,
lv_compid TYPE /pacg/ecm_compid,
lv_cloud_uname TYPE /pacg/ecm_cloud_uname,
ls_pernr LIKE LINE OF it_pernr.
TYPES: BEGIN OF ty_personresp,
data LIKE lt_persondata,
END OF ty_personresp.
DATA: ls_personresp TYPE ty_personresp.
IF io_aci_service IS BOUND.
IF it_pernr IS INITIAL.
RETURN.
ENDIF.
lv_compid = get_compid( iv_account ).
LOOP AT it_pernr INTO ls_pernr.
CLEAR lv_pernr_query.
IF ls_pernr-low IS NOT INITIAL.
TRY.
lv_cloud_uname = /pacg/ecm_cl_x_util=>build_cloud_uname( iv_pernr = ls_pernr-low
iv_compid = lv_compid ).
CATCH /pacg/ecm_cx_main.
"No FSM user exists
CONTINUE.
ENDTRY.
CONCATENATE lv_pernr_query 'externalId="' ls_pernr-low '"' INTO lv_pernr_query.
ENDIF.
IF lv_pernr_query IS NOT INITIAL.
CONCATENATE '/api/data/v4/Person?dtos=Person.24' '&query=' lv_pernr_query
'&fields=id,externalId,userName' iv_account INTO lv_url.
CALL METHOD io_aci_service->call_service
EXPORTING
iv_request_uri = lv_url
iv_request_method = 'GET'
it_headers = it_headers
IMPORTING
ev_status_code = lv_status_code
ev_reason = lv_reason
ev_result = lv_result
ev_raw_data = lv_raw_data.
lv_char_code = lv_status_code.
IF lv_char_code CP '4*'.
ls_error-error = lv_result.
APPEND ls_error TO lt_error.
ELSE.
/aci/cl_util_json_handler=>deserialize( EXPORTING json = lv_result
CHANGING data = ls_personresp ).
LOOP AT ls_personresp-data INTO ls_persondata.
lv_id = ls_persondata-person-id.
ls_oblnk-object_type="EMPLOYEE".
ls_oblnk-object_key = ls_pernr-low.
ls_oblnk-ext_object_type="PERSON".
ls_oblnk-ext_object_key = lv_id.
ls_oblnk-sys_comp = 'SAP_FSM'.
ls_oblnk-mobile_app = iv_mapp.
APPEND ls_oblnk TO et_oblnk.
CLEAR ls_oblnk.
ENDLOOP.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDMETHOD.
Este método es un requisito previo para implementar las actualizaciones de estado relevantes de SAP SAM hacia FSM de SAP tablero de planificación y programación. Este método debe devolver el Gestión de servicios de campo ID de actividad interna (la identificación campo de la Gestión de servicios de campo Actividad entidad) en base al número de orden y operación proporcionado.
Usar el parámetro de importación IO_ACI_SERVICE para ejecutar una llamada de servicio a Gestión de servicios de campo para recuperar la identificación basada en el código. Consulte el siguiente ejemplo de código para obtener más detalles.
METHOD /merp/if_ca_fsm_crossref_badi~get_activity_id.
TYPES: BEGIN OF ty_fsmitem,
id TYPE string,
externalid TYPE string,
END OF ty_fsmitem.
TYPES: BEGIN OF ty_error,
error TYPE string,
END OF ty_error.
TYPES: BEGIN OF ty_actdata,
activity TYPE ty_fsmitem,
END OF ty_actdata.
DATA:
lv_act_query TYPE string,
lv_id TYPE /smfnd/sync_object_key_dte,
lv_url TYPE string,
lv_char_code TYPE n LENGTH 3,
lt_actnr TYPE STANDARD TABLE OF /pacg/ecm_actnr,
lv_actnr TYPE /pacg/ecm_actnr,
lv_object_key TYPE /smfnd/sync_object_key_dte,
lt_error TYPE STANDARD TABLE OF ty_error,
ls_error LIKE LINE OF lt_error,
lt_actdata TYPE STANDARD TABLE OF ty_actdata,
ls_actdata LIKE LINE OF lt_actdata,
lv_status_code TYPE i,
lv_reason TYPE string,
lv_result TYPE string,
lv_raw_data TYPE xstring,
lv_aufnr_len TYPE i,
lo_descr TYPE REF TO cl_abap_elemdescr,
ls_aufnr_dfies TYPE dfies.
TYPES: BEGIN OF ty_actresp,
data LIKE lt_actdata,
END OF ty_actresp.
DATA: ls_actresp TYPE ty_actresp.
IF io_aci_service IS BOUND.
IF iv_aufnr IS INITIAL OR iv_vornr IS INITIAL.
RETURN.
ENDIF.
lv_object_key = iv_aufnr.
lo_descr ?= cl_abap_elemdescr=>describe_by_data( iv_aufnr ).
ls_aufnr_dfies = lo_descr->get_ddic_field( ).
lv_aufnr_len = ls_aufnr_dfies-leng.
lv_object_key+lv_aufnr_len = iv_vornr.
"Get all activitties for order operation
SELECT actnr INTO TABLE lt_actnr FROM /pacg/ecm_acti WHERE aufnr = iv_aufnr AND vornr = iv_vornr.
"Get the newest activity
SORT lt_actnr DESCENDING.
READ TABLE lt_actnr INTO lv_actnr INDEX 1.
IF sy-subrc IS NOT INITIAL.
RETURN.
ENDIF.
CONCATENATE lv_act_query 'externalId="' lv_actnr '"' INTO lv_act_query.
IF lv_actnr IS NOT INITIAL.
CONCATENATE '/api/data/v4/Activity?dtos=Activity.39' '&query=' lv_act_query '&fields=id,externalId' iv_account INTO lv_url.
CALL METHOD io_aci_service->call_service
EXPORTING
iv_request_uri = lv_url
iv_request_method = 'GET'
it_headers = it_headers
IMPORTING
ev_status_code = lv_status_code
ev_reason = lv_reason
ev_result = lv_result
ev_raw_data = lv_raw_data.
lv_char_code = lv_status_code.
IF lv_char_code CP '4*'.
ls_error-error = lv_result.
APPEND ls_error TO lt_error.
ELSE.
/aci/cl_util_json_handler=>deserialize( EXPORTING json = lv_result
CHANGING data = ls_actresp ).
LOOP AT ls_actresp-data INTO ls_actdata.
lv_id = ls_actdata-activity-id.
es_oblnk-object_type="OPERATION".
es_oblnk-object_key = lv_object_key.
es_oblnk-ext_object_type="ACTIVITY".
es_oblnk-ext_object_key = lv_id.
es_oblnk-sys_comp = 'SAP_FSM'.
es_oblnk-mobile_app = iv_mapp.
ev_id = ls_actdata-activity-id.
EXIT.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
ENDMETHOD.
Este método es un requisito previo para implementar actualizaciones de estado relevantes de SAP SAM al tablero de planificación y programación de SAP FSM. El método debe devolver el MEV ID de actividad interna (la identificacióncampo de la Gestión de servicios de campo Actividad entrada) en función del número de pedido y operación proporcionado. Utilice el QUERY_FSM_SERVICEASSIGN método de la /MERP/CL_CA_FSM_INTEGRACIÓN class para obtener este valor según el siguiente ejemplo de código.
METHOD /merp/if_ca_fsm_crossref_badi~get_serv_assign_id.
DATA lref_fsm_integration TYPE REF TO /merp/cl_ca_fsm_integration.
TRY.
" Create FSM object
CREATE OBJECT lref_fsm_integration
EXPORTING
iv_mapp = iv_mapp.
CATCH /merp/cx_core_exception_gen INTO DATA(lref_badi_exception).
RETURN.
ENDTRY.
" Fetch Service Assignment from FSM if it exists
lref_fsm_integration->query_fsm_serviceassign(
EXPORTING
iv_aufnr = iv_aufnr
iv_vornr = iv_vornr
iv_activity_id = iv_activity_id
IMPORTING
ev_id = ev_id
ev_activity_id = ev_activity_id
es_oblnk = es_oblnk
).
ENDMETHOD.
Este método es un requisito previo para implementar actualizaciones de estado relevantes de SAP SAM al tablero de planificación y programación de SAP FSM. Utilizar el QUERY_FSM_SERVICEASSIGNSTATUS método de la /MERP/CL_CA_FSM_INTEGRACIÓN class para obtener este valor según el siguiente ejemplo de código.
METHOD /merp/if_ca_fsm_crossref_badi~get_serv_assign_status_id.
DATA lref_fsm_integration TYPE REF TO /merp/cl_ca_fsm_integration.
TRY.
" Create FSM object
CREATE OBJECT lref_fsm_integration
EXPORTING
iv_mapp = iv_mapp.
CATCH /merp/cx_core_exception_gen INTO DATA(lref_badi_exception).
RETURN.
ENDTRY.
lref_fsm_integration->query_fsm_serviceassignstatus(
EXPORTING
iv_aufnr = iv_aufnr
iv_vornr = iv_vornr
iv_activity_id = iv_activity_id
IMPORTING
ev_id = ev_id
es_oblnk = es_oblnk
).
ENDMETHOD.
Con el escenario de integración explicado anteriormente, SAP SAM ahora puede integrarse con SAP FSM. SAP SAM se integra directamente con SAP FSM a través de MAIF desde el backend utilizando las API de servicio y datos proporcionadas por SAP FSM. Sin embargo, los objetos subyacentes que deben actualizarse (p. ej., Órdenes de servicio (Llamadas de servicio en FSM), Operaciones (Actividades en FSM), Empleados (Personas en FSM), etc.) se sincronizan mediante el conector de Proaxia. Para admitir esta integración directa desde SAP SAM a SAP FSM, proporcionamos opciones BAdi dedicadas al mapeo de ID, para determinar las referencias cruzadas de campos clave entre el conector FSM y FSM.
Envíe sus comentarios para mejorar las características del producto. Además, lo invitamos a seguir la publicación Marco de integración de aplicaciones móviles y responder preguntas (https://answers.sap.com/tags/6baf0d27-c212-4154-85a9-71ed13c7b1ab), y lea otras publicaciones sobre el tema para MAIF (https://blogs.sap.com/tags/6baf0d27-c212-4154-85a9-71ed13c7b1ab/) y SAP SAM (https://blogs.sap.com/tags/73555000100800000639/).
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073