• No se han encontrado resultados

Implementación de aplicaciones Fiori para la gestión de servicios en SAP CRM

N/A
N/A
Protected

Academic year: 2020

Share "Implementación de aplicaciones Fiori para la gestión de servicios en SAP CRM"

Copied!
138
0
0

Texto completo

(1)
(2)
(3)

ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA

GRADUADO EN INGENIERÍA DE COMPUTADORES

Implementación de Aplicaciones Fiori para la Gestión de

Servicios en SAP CRM

Fiori Apps Implementation for SAP CRM Service

Management

Realizado por

David Hormigo Ramírez

Tutorizado por

Carlos Rossi Jiménez

Departamento

Lenguajes y Ciencias de la Computación

UNIVERSIDAD DE MÁLAGA

MÁLAGA,

SEPTIEMBRE DE 2019

(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
(21)
(22)
(23)

(24)

(25)

(26)

(27)
(28)

(29)
(30)
(31)

(32)
(33)

(34)

(35)
(36)
(37)

(38)
(39)

(40)

(41)
(42)
(43)

(44)
(45)
(46)

(47)
(48)

(49)
(50)
(51)

(52)
(53)
(54)
(55)
(56)
(57)
(58)

CALL TRANSFORMATION zcrm_ib_mapquest_body

SOURCE body = ls_address

RESULT XML lr_json_writer.

lv_body = lr_json_writer->get_output( ).

CHECK lv_body IS NOT INITIAL.

CONSTANTS lc_endpoint TYPE string VALUE 'http://open.mapquestapi.c om/geocoding/v1/address?key=kY8H9A3089EO2hzvH005UM4KZUQenUBd'.

CALL METHOD cl_http_client=>create_by_url EXPORTING

url = lc_endpoint

IMPORTING

client = lr_http_client

EXCEPTIONS

argument_not_found = 1

plugin_not_active = 2

internal_error = 3

OTHERS = 4.

IF sy-subrc NE 0.

RETURN.

ENDIF.

lr_http_client->request

->set_method( if_http_request=>co_request_method_post ).

lr_http_client->request->if_http_entity~set_data( lv_body ).

lr_http_client->send(

EXCEPTIONS

http_communication_failure = 1

http_invalid_state = 2

http_processing_failed = 3

http_invalid_timeout = 4

OTHERS = 5 ).

CHECK sy-subrc EQ 0.

lr_http_client->receive(

EXCEPTIONS

http_communication_failure = 1

http_invalid_state = 2

http_processing_failed = 3

OTHERS = 4 ).

(59)

<?sap.transform simple?>

<tt:transform xmlns:tt=

"http://www.sap.com/transformation-templates" xmlns:ddic="http://www.sap.com/abapxml/types/dictionary"

>

<tt:root name="BODY" type="ddic:ZCRMS_IB_MAPQUEST_BODY"/>

<tt:template> <object>

<object name="location" tt:ref=".BODY"> <str name="street" tt:value-ref="STREET"/> <str name="city" tt:value-ref="CITY"/>

<str name="postalCode" tt:value-ref="POST_CODE"/>

<str name="country" tt:value-ref="COUNTRY"/> <str name="state" tt:value-ref="STATE"/> </object>

<object name="options" tt:ref=".BODY">

<bool name="thumbMaps" tt:value="false" tt:option="format(b

oolean)"/>

<num name="maxResults" tt:value-ref="MAX_RESULTS"/>

(60)
(61)
(62)
(63)
(64)
(65)
(66)
(67)
(68)
(69)
(70)
(71)
(72)
(73)
(74)

METHOD /iwbep/if_mgw_appl_srv_runtime~create_entity.

DATA: lr_data_provider_class TYPE REF TO zl_crm_odata_data_rt.

IF iv_source_name IS NOT INITIAL AND it_key_tab IS NOT INITIAL.

lr_data_provider_class = get_data_provider_class( iv_source_nam

e ).

CHECK lr_data_provider_class>zif_crm_odata_rt_handler~check_aut

horization(

iv_source_name = iv_source_name

it_key_tab = it_key_tab

it_navigation_path = it_navigation_path

) = abap_true.

ENDIF.

lr_data_provider_class = get_data_provider_class( iv_entity_name

).

CALL METHOD lr_data_provider_class>/iwbep/if_mgw_appl_srv_runtime

~create_entity

EXPORTING

iv_entity_name = iv_entity_name

iv_entity_set_name = iv_entity_set_name

iv_source_name = iv_source_name

io_data_provider = io_data_provider

it_key_tab = it_key_tab

it_navigation_path = it_navigation_path

io_tech_request_context = io_tech_request_context

IMPORTING

er_entity = er_entity.

(75)
(76)
(77)

METHOD get_query_params.

CLEAR gv_entity_name.

gv_entity_name = iv_entity_name.

SELECT SINGLE query_obj result_obj

object_type

INTO (gv_query_obj,gv_result_obj,gv_object_type)

FROM zcrmc_ent_btq

WHERE entity EQ gv_entity_name.

IF sy-subrc NE 0.

CLEAR: gv_query_obj,gv_result_obj.

RETURN.

ENDIF.

SELECT SINGLE attr_struct INTO gv_query_struct FROM crmc_obj_btil

WHERE obj_il EQ gv_query_obj.

IF sy-subrc NE 0.

CLEAR gv_query_struct.

ENDIF.

SELECT SINGLE attr_struct INTO gv_result_struct FROM crmc_obj_btil

WHERE obj_il EQ gv_result_obj.

IF sy-subrc NE 0.

CLEAR gv_result_struct.

ENDIF.

(78)
(79)

METHOD zif_crm_odata_bt_read~set_sel_options_from_filter.

DATA ls_filter_select_option TYPE /iwbep/s_mgw_select_option.

DATA ls_property_map TYPE /iwbep/i_sbo_pr.

DATA ls_select_option TYPE /iwbep/s_cod_select_option.

DATA ls_genil_selection TYPE genilt_selection_parameter.¡ DATA lt_property_map TYPE TABLE OF /iwbep/i_sbo_pr.

DATA lt_components TYPE cl_abap_structdescr=>component_t

able.

DATA lr_structdesc TYPE REF TO cl_abap_structdescr.

CHECK it_filter_select_options IS NOT INITIAL.

SELECT *

INTO TABLE lt_property_map FROM /iwbep/i_sbo_pr

WHERE project EQ 'ZCRM_SERVICE'

AND parent_uuid EQ gv_node_uuid.

CHECK sy-subrc EQ 0.

lr_structdesc ?= cl_abap_structdescr=>describe_by_name( gv_query_s

truct ).

lt_components = lr_structdesc->get_components( ).

LOOP AT it_filter_select_options INTO ls_filter_select_option.

READ TABLE lt_property_map INTO ls_property_map

WITH KEY name = ls_filter_select_option-property.

CHECK sy-subrc EQ 0.

CASE ls_property_map-abap_field.

WHEN 'GUID'.

LOOP AT ls_filter_select_optionselect_options

INTO ls_select_option.

ls_genil_selection-attr_name = ls_property_map

-abap_field.

MOVE-CORRESPONDING

ls_select_option TO ls_genil_selection.

APPEND ls_genil_selection TO rt_selection_paramete

rs.

ENDLOOP.

WHEN OTHERS.

READ TABLE lt_components TRANSPORTING NO FIELDS

(80)

CALL METHOD lr_1o_search->get_result_guids

EXPORTING

iv_max_hits = lv_max_hits

IMPORTING

et_guid_list = et_order_guid

et_return = lt_return.

IF sy-subrc <> 0.

lr_msg_cont = /iwbep/if_mgw_conv_srv_runtime

~get_message_container( ).

LOOP AT lt_return INTO ls_return.

CALL FUNCTION 'CRM_BSP_OIC_1O_READ_FROM_RF'

EXPORTING

it_object_key = it_order_guid

iv_screen_structure_name = gv_result_struct

IMPORTING

et_screen_structure = <ft_order>.

IF <ft_order> IS INITIAL.

RETURN.

ENDIF.

DATA: lr_badi_calculate TYPE REF TO crm_badi_rf_q1o_calculate.

lv_obj_il = me->gv_query_obj.

TRANSLATE lv_obj_il TO UPPER CASE.

TRY.

GET BADI lr_badi_calculate

FILTERS

obj_il = lv_obj_il.

CATCH cx_badi_not_implemented cx_badi_multiply_implemented.

ENDTRY.

IF lr_badi_calculate IS BOUND.

TRY.

CALL BADI lr_badi_calculate->calculate

EXPORTING

iv_obj_il = lv_obj_il

iv_result_struct = gv_result_struct

IMPORTING

et_return = lt_return

CHANGING

ct_results = <ft_order>.

CATCH cx_sy_dyn_call_illegal_method.

ENDTRY.

ENDIF.

(81)

-METHOD /iwbep/if_mgw_appl_srv_runtime~get_entity.

READ TABLE it_key_tab INTO ls_key

WITH KEY name = 'Guid'.

CHECK sy-subrc EQ 0.

ls_filter-property = 'Guid'.

ls_option-low = ls_key-value.

ls_option-option = 'EQ'.

ls_option-sign = 'I'.

APPEND ls_option TO ls_filter-select_options.

APPEND ls_filter TO lt_filter.

CALL METHOD /iwbep/if_mgw_appl_srv_runtime~get_entityset

EXPORTING

iv_entity_name = iv_entity_name

iv_entity_set_name = iv_entity_set_name

iv_source_name = iv_source_name

it_filter_select_options = lt_filter

IMPORTING

er_entityset = lr_entityset.

ASSIGN lr_entityset->* TO <ft_entity>.

(82)
(83)

METHOD get_instance.

IF gr_self IS NOT BOUND.

CREATE OBJECT gr_self TYPE zl_odata_bt_api_adapter.

gr_self->mo_context ?= ir_context.

ENDIF.

gr_self->mo_context ?= ir_context.

rv_self ?= gr_self .

(84)

CHECK me->gt_input_fields IS NOT INITIAL.

CALL FUNCTION 'CRM_ORDER_MAINTAIN'

EXPORTING

it_activity_h = me->gt_activity_h

it_pricing = me->gt_pricing

it_pricing_i = me->gt_pricing_i

it_product_i = me->gt_product_i

it_text = me->gt_text

it_schedlin_i = me->gt_schedlin_i

it_partner = me->gt_partner

it_refobj = me->gt_refobj

it_status = me->gt_status

CHANGING

ct_orderadm_h = me->gt_orderadm_h

ct_orderadm_i = me->gt_orderadm_i

ct_input_fields = me->gt_input_fields

cv_log_handle = lv_loghandle

ct_doc_flow = me->gt_doc_flow

EXCEPTIONS

error_occurred = 1

document_locked = 2

no_change_allowed = 3

no_authority = 4

OTHERS = 5.

IF sy-subrc EQ 0.

LOOP AT gt_orderadm_h INTO ls_orderadm_h.

CALL FUNCTION 'CRM_MESSAGES_GET_LOG_INFO'

EXPORTING

iv_document_number = ls_orderadm_h-guid

IMPORTING

ev_log_handle = lv_loghandle

EXCEPTIONS

not_found = 1

(85)

METHOD zif_odata_api_adapter~save. …

READ TABLE gt_objects_to_save INTO lv_guid

INDEX 1.

IF sy-subrc NE 0.

RETURN.

ENDIF.

CALL FUNCTION 'CRM_ORDER_CHECK_BEFORE_SAVE_OW'

EXPORTING

iv_order_guid = lv_guid

EXCEPTIONS

save_cancelled = 1

OTHERS = 2.

IF sy-subrc EQ 0.

CALL FUNCTION 'CRM_ORDER_SAVE'

EXPORTING

it_objects_to_save = gt_objects_to_save

IMPORTING

et_saved_objects = lt_saved_objects

et_objects_not_saved = lt_objects_not_saved

EXCEPTIONS

document_not_saved = 1

OTHERS = 2.

IF sy-subrc EQ 0 AND lt_saved_objects IS NOT INITIAL.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

EXPORTING

wait = 'X'.

ELSE.

lr_msg_container = me->zif_odata_api_adapter~mo_context

->get_message_container( ).

lr_msg_container

->add_message_text_only( iv_is_leading_message = 'X'

iv_msg_type = 'E'

iv_msg_text = 'No se han producido cambios en el documento'

iv_add_to_response_header = abap_true ).

RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception

EXPORTING

message_container = lr_msg_container.

ENDIF.

ELSE.

CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception.

ENDIF.

(86)

METHOD /iwbep/if_mgw_appl_srv_runtime~create_entity.

DATA lr_bt_api TYPE REF TO zif_odata_api_adapter.

lr_bt_api ?= zl_odata_bt_api_adapter=>get_instance( mo_context

).

map_to_api( EXPORTING io_data_provider = io_data_provider

CHANGING cr_api = lr_bt_api

cr_entity = er_entity ).

IF zl_odata_bt_api_adapter=>zif_odata_api_adapter~is_batch( ) E

Q abap_false.

lr_bt_api->create_entity( ).

lr_bt_api->save( ).

ENDIF.

(87)

METHOD map_to_api.

DATA ls_refobj TYPE crmt_refobj_com.

DATA ls_orderadm_i TYPE crmt_orderadm_i_com.

DATA ls_pricing_i TYPE crmt_pricing_i_com.

DATA ls_schedlin_i TYPE crmt_schedlin_i_com.

DATA ls_product_i TYPE crmt_product_i_com.

DATA ls_item TYPE zcrmt_bt_odata_item.

DATA lr_api_adapter TYPE REF TO zl_odata_bt_api_adapter.

DATA lt_input_field TYPE crmt_input_field_tab.

io_data_provider

->read_entry_data( IMPORTING es_data = ls_item ).

lr_api_adapter ?= cr_api.

me->create_item( IMPORTING es_orderadm_i = ls_orderadm_i

es_pricing_i = ls_pricing_i

es_product_i = ls_product_i

es_schedlin_i = ls_schedlin_i

et_input_field = lt_input_field

CHANGING cs_item = ls_item ).

CALL METHOD me->/iwbep/if_mgw_conv_srv_runtime~copy_data_to_ref

EXPORTING

is_data = ls_item

CHANGING

cr_data = cr_entity.

.

INSERT ls_orderadm_i INTO TABLE lr_api_adapter->gt_orderadm_i.

INSERT ls_pricing_i INTO TABLE lr_api_adapter->gt_pricing_i.

INSERT ls_product_i INTO TABLE lr_api_adapter->gt_product_i.

INSERT ls_schedlin_i INTO TABLE lr_api_adapter->gt_schedlin_i.

INSERT LINES OF lt_input_field

INTO TABLE lr_api_adapter->gt_input_fields.

(88)

METHOD /iwbep/if_mgw_core_srv_runtime~changeset_begin.

DATA lr_api_adapter TYPE REF TO zl_odata_bt_api_adapter.

zl_odata_bt_api_adapter=>zif_odata_api_adapter~set_mode( abap_tr

ue ).

lr_api_adapter = zl_odata_bt_api_adapter=>get_instance( mo_cont

ext ).

lr_api_adapter->zif_odata_api_adapter~reset_buffer( ).

ENDMETHOD.

METHOD /iwbep/if_mgw_core_srv_runtime~changeset_end.

DATA lr_api_adapter TYPE REF TO zl_odata_bt_api_adapter.

DATA lr_exception TYPE REF TO /iwbep/cx_mgw_busi_exception.

zl_odata_bt_api_adapter=>zif_odata_api_adapter~set_mode( abap_f

alse ).

lr_api_adapter = zl_odata_bt_api_adapter=>get_instance( mo_cont

ext ).

TRY.

lr_api_adapter->zif_odata_api_adapter~create_entity( ).

lr_api_adapter->zif_odata_api_adapter~save( ).

CATCH /iwbep/cx_mgw_busi_exception INTO lr_exception.

DATA lr_msg_cont TYPE REF TO /iwbep/if_message_c

ontainer.

lr_msg_cont = /iwbep/if_mgw_conv_srv_runtime~get_message_co

ntainer( ).

CALL METHOD lr_msg_cont->add_message

EXPORTING

iv_msg_type = sy-msgty

iv_msg_id = sy-msgid

iv_msg_number = sy-msgno

iv_msg_v1 = sy-msgv1

iv_msg_v2 = sy-msgv2

iv_msg_v3 = sy-msgv3

iv_msg_v4 = sy-msgv4

iv_is_leading_message = abap_true.

RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception

EXPORTING

message_container = lr_msg_cont.

ENDTRY.

(89)
(90)
(91)

Implementación

Servicio Web

Publicación

Servicio Web

Crear aplicación

a partir de

(92)
(93)
(94)

(95)

(96)
(97)

-<mvc:View controllerName="com.hormigo.david.service.service_order.ServiceOrde r.controller.Worklist" xmlns="sap.m" xmlns:mvc="sap.ui.core.mvc" xmlns:semantic="sap.f.semantic" xmlns:footerbar="sap.ushell.ui.footerbar"> <semantic:SemanticPage id="idWLPage" headerPinnable="false" toggleHeaderOnTitleClick="false"> <semantic:titleHeading> <Title text="{i18n>worklistTitle}"/> </semantic:titleHeading> <semantic:content> <IconTabBar id="iconTabBar" select="onQuickFilter" expandable="false" headerBackgroundDesign="Transparent"> <items>

<IconTabFilter key="all" showAll="true" count="{worklistView>/count}" text="Peticiones"/> <IconTabSeparator/> <IconTabFilter key="lowPriority" icon="sap-icon://message-success" iconColor="Positive" count="{worklistView>/lowCount}" text="{i18n>worklistFilterLow}"/> <IconTabFilter key="mediumPriority" icon="sap-icon://message-warning" iconColor="Critical" count="{worklistView>/mediumCount}" text="{i18n>worklistFilterMedium}"/> <IconTabFilter key="highPriority" icon="sap-icon://message-error" iconColor="Negative" count="{worklistView>/highCount}" text="{i18n>worklistFilterHigh}"/> </items> <content>

<Table id="table" width="auto"

items="{ path: '/ServiceOrders', sorter: { path: 'Description', descending: false } }"

(98)

<sections>

(99)

-<core:FragmentDefinition xmlns="sap.m" xmlns:core="sap.ui.core"> <Table id="idPartnersTable" inset="false" items="{Partners}">

(100)

-sap.ui.define([ "./BaseController", "sap/ui/model/json/JSONModel", "sap/ui/core/routing/History", "../model/formatter", "sap/ui/model/Filter", "sap/ui/model/FilterOperator"

], function (BaseController, JSONModel, History, formatter, Filter, FilterOperator) { "use strict"; return BaseController.extend("com.hormigo.david.service.ServiceConfirmatio n.controller.Worklist", { formatter: formatter, onInit: function () { var oViewModel,

iOriginalBusyDelay,

(101)

<core:View controllerName="com.hormigo.david.service.service_order.ServiceOrder .controller.Object" xmlns:core="sap.ui.core" xmlns="sap.uxap" xmlns:layout="sap.ui.layout" xmlns:m="sap.m" xmlns:semantic="sap.f.semantic"> <ObjectPageLayout upperCaseAnchorBar="false" useIconTabBar="false" id="idObject" showFooter="{objectView>/editable}" enableLazyLoading="false" subSectionLayout="TitleOnTop" showTitleInHeaderContent="true" showEditHeaderButton="false" busy="{objectView>/busy}" busyIndicatorDelay="{objectView>/delay}"> <headerTitle> <ObjectPageHeader objectTitle="{Description}" objectSubtitle="{ObjectId}" isObjectIconAlwaysVisible="false" isObjectTitleAlwaysVisible="false" isObjectSubtitleAlwaysVisible="false"> <actions> <ObjectPageHeaderActionButton id="idEditBtn" press="onEdit" text="{i18n>btnEditSrvOrder}" type="Emphasized" hideText="false"/> … …

onConfirm: function (oEvent) {

oEvent.getSource().setEnabled(false); var oView = this.getView();

var that = this;

var oModel = oView.getModel();

var oViewContext = oView.getBindingContext();

oModel.setProperty("UserStatusId", "E0002", oViewContext); oModel.submitChanges({

success: this._createConfirmation.bind(that) });

(102)
(103)

{ "_version": "1.9.0", "sap.app": { "id": "com.hormigo.david.service.ServiceOrder", "type": "application", "i18n": "i18n/i18n.properties", "title": "{{appTitle}}", "description": "{{appDescription}}", "applicationVersion": { "version": "1.0.0" }, "resources": "resources.json", "dataSources": { "mainService": { "uri": "/sap/opu/odata/sap/ZCRM_SERVICE_SRV/", "type": "OData", "settings": { "odataVersion": "2.0", "localUri": "localService/metadata.xml" } } }, … sap.ui.define([ "sap/ui/core/UIComponent", "sap/ui/Device", "./model/models", "./controller/ErrorHandler"

], function (UIComponent, Device, models, ErrorHandler) { "use strict"; return UIComponent.extend("com.hormigo.david.service.service_order.Service Order.Component", { metadata: { manifest: "json" },

init: function () {

(104)

<core:FragmentDefinition xmlns="sap.m" xmlns:core="sap.ui.core"> <Label text="Instalación" labelFor="ibaseRefText"/>

<Link id="ibaseRefText" text="{RefIBaseDescription}" press="onIBasePress"/>

(105)

onIBasePress: function (oEvent) {

var oView = this.getView();

var oObject = oView.getBindingContext().getObject(); var sObjectId = oObject.RefIBase;

this.fGetService = sap.ushell && sap.ushell.Container && sap.ushell.Container.getService;

(106)

_onMasterMatched: function () {

var oStartupParameters =

this.getOwnerComponent().getComponentData().startupParameters;

this.getOwnerComponent().oListSelector.oWhenListLoadingIsDo ne.then(

function (mParams) { var sObjectId = "";

if (mParams.list.getMode() === "None") { return;

}

if (oStartupParameters.IBaseId && oStartupParameters.IBaseId[0]) {

sObjectId = oStartupParameters.IBaseId[0]; }

else {

sObjectId = mParams.firstListitem

.getBindingContext().getProperty("Id"); } this.getRouter().navTo("object", { objectId: sObjectId }, true); }.bind(this),

function (mParams) {

(107)

<core:FragmentDefinition xmlns="sap.m" xmlns:f="sap.ui.layout.form" xmlns:core="sap.ui.core" xmlns:vbm="sap.ui.vbm">

<vbm:GeoMap id="IBPositionMap" initialZoom="9" width="100%"

centerPosition="{parts:[{path:'Latitute'},{path:'Longitude'}] ,formatter:'.formatter.latitudeLongitude'}"> <vbm:vos> <vbm:Spots> <vbm:items> <vbm:Spot position="{parts:[{path:'Latitute'},{path:'Longitude'}],formatter:' .formatter.latitudeLongitude'}"/> </vbm:items> </vbm:Spots> </vbm:vos> </vbm:GeoMap> </core:FragmentDefinition>

onInit: function () {

var oViewModel = new JSONModel({ busy: false, delay: 0,

lineItemListTitle:

this.getResourceBundle().getText("detailLineItemTableHeading") });

var oMap = this.getView().byId("IBPositionMap");

var oMapConfig = { "MapProvider": [{

"name": "openStreetMap", "type": "",

"description": "Localización instalación", "tileX": "256",

"tileY": "256", "MinLOD": 3, "MaxLOD": 18,

"copyright": "Copyright Info: Tiles Courtesy of MapQuest © OpenStreetMap under ODbL v1.0",

(108)

_bindView: function (sObjectPath) { …

var sAddressPath = sObjectPath + '/Address';

var addressForm = this.getView().byId("SimpleFormAddress"); var oMap = this.getView().byId("IBPositionMap");

addressForm.bindElement(sAddressPath); oMap.bindElement(sAddressPath);

(109)

onEdit: function (oEvent) {

var oViewModel = this.getModel("objectView"); var bState = oViewModel.getProperty("/editable"); oEvent.getSource().setEnabled(false);

oViewModel.setProperty("/editable", !bState); oViewModel.setProperty("/tableMode", "Delete"); },

(110)

onInit: function () {

var iOriginalBusyDelay,

oViewModel = new JSONModel({ busy: true, delay: 0, editable: false, tableMode: "None" }); this.getRouter().getRoute("object").attachPatternMatched(this ._onObjectMatched,this);

iOriginalBusyDelay = this.getView().getBusyIndicatorDelay(); this.setModel(oViewModel, "objectView");

<core:FragmentDefinition xmlns="sap.m" xmlns:core="sap.ui.core" xmlns:f="sap.ui.layout.form">

<f:SimpleForm id="SimpleFormDisplayHeader"

editable="{viewModel>/editable}" layout="ResponsiveGridLayout" singleContainerFullSize="false"

labelSpanXL="3" labelSpanL="3" labelSpanM="3" labelSpanS="12" adjustLabelSpan="false" emptySpanXL="4" emptySpanL="4" emptySpanM="4"

(111)

<core:View

controllerName="com.hormigo.david.service.service_order.ServiceOrder .controller.Object" xmlns:core="sap.ui.core" xmlns="sap.uxap"

xmlns:layout="sap.ui.layout" xmlns:m="sap.m" xmlns:semantic="sap.f.semantic"> <ObjectPageLayout upperCaseAnchorBar="false" useIconTabBar="false" id="idObject" showFooter="{objectView>/editable}" enableLazyLoading="false" subSectionLayout="TitleOnTop" showTitleInHeaderContent="true" showEditHeaderButton="false" busy="{objectView>/busy}" busyIndicatorDelay="{objectView>/delay}"> <headerTitle> <ObjectPageHeader objectTitle="{Description}" objectSubtitle="{ObjectId}" isObjectIconAlwaysVisible="false" isObjectTitleAlwaysVisible="false" isObjectSubtitleAlwaysVisible="false"> <actions> <ObjectPageHeaderActionButton id="idEditBtn" press="onEdit" text="{i18n>btnEditSrvOrder}" type="Emphasized" hideText="false"/>

onAccept: function (oEvent) {

var oViewModel = this.getModel("objectView"); // @type {sap.ui.model.odata.v2.ODataModel} var oModel = this.getModel();

var that = this;

if (oModel.hasPendingChanges() || this._bDeleteRequest) { oViewModel.setProperty("/busy", true);

oModel.attachEventOnce("batchRequestCompleted", function (event) {

if (that._checkIfBatchRequestSucceeded(event)) { that._onBatchSuccess();

} else {

that._onBatchError(); }

});

(112)
(113)
(114)
(115)
(116)
(117)
(118)
(119)
(120)
(121)

Desarrollo

Backend

Test

unitario/pruebas

en IU tradicional

(122)
(123)
(124)
(125)

(126)
(127)
(128)
(129)
(130)
(131)
(132)
(133)
(134)
(135)
(136)
(137)
(138)

Referencias

Documento similar

El Doble Grado Superior en Desarrollo de Aplicaciones Multiplataforma y Desarrollo de Aplicaciones Web te aportará las competencias necesarias para incorporarte al mercado

SERVICIOS Y APLICACIONES PARA EL CUMPLIMIENTO DE LA LEY 39/2015 INTERFAZ PRESENTACIÓN Servicios APLICACIÓN SECTORIAL REGISTR@-RM Repositorio DOCUMENTAL (CMIS) SANDRA INTERFACES

En este trabajo se ha presentado la tecnología de los Servicios Web como una solu- ción para integrar de forma transparente hardware reconfigurable en aplicaciones software típicas.

El presente documento hace referencia al manual de usuario del proyecto “Desarrollo e Implementación de un sistema informático con tecnología web para la gestión de

Tabla 27: Prueba de normalidad de tiempo invertido en realizar pruebas funcionales- – Post Test

Una de las principales ventajas de los servicios Web Map Service (WMS en adelante) es que debido a que son estándares pueden consultarse en multitud de aplicaciones de

La propuesta de sistema que modelaremos más adelante está constituida por una serie de Servicios Web que ofrecen funcionalidades que permitirán el desarrollo de aplicaciones

El presente trabajo consiste en el desarrollo e implementación de un Sistema Web de Gestión de Servicios Municipales del Departamento de Rentas para el Gobierno