define root view entity ZI_TimeReportingObject
as select from I_LogisticsOrder as TRO
composition [0..*] of ZP_TimeReportingObjectEntries as _TimeEntries
association [0..*] to I_WBSElement as _WBSElement
on $projection.WBSElementID = _WBSElement.WBSElementInternalID
association [0..*] to I_CostCenter as _CostCenter
on $projection.ControllingArea = _CostCenter.ControllingArea
and $projection.ResponsibleCostCenter = _CostCenter.CostCenter
{
key TRO.OrderID,
TRO.OrderCategory,
TRO.OrderType,
TRO.OrderDescription,
@UI.hidden
TRO.IsMarkedForDeletion,
// Admin
@Semantics.systemDate.createdAt: true
TRO.CreationDate,
// ETC.....
// Assignments
TRO.ObjectInternalID as ObjectNumber,
@Consumption.valueHelpDefinition: [ { entity: {
name: 'I_WBSElementBasicDataStdVH', element: 'WBSElementInternalID'
} } ]
@ObjectModel.foreignKey.association: '_WBSElement'
TRO.WBSElementInternalID_2 as WBSElementID,
cast(
case
when TRO.OrderCategory = '20' then 'X'
else ''
end as boole_d
) as IsNetwork,
// Responsible
@Consumption.valueHelpDefinition: [ { entity: { name: 'I_CostCenterStdVH', element: 'CostCenter' } } ]
@ObjectModel.foreignKey.association: '_CostCenter'
TRO.ResponsibleCostCenter,
_WBSElement.ResponsiblePerson as WBSResponsiblePerson,
// Check status of order/network to see if it's allowed to report times
@ObjectModel.virtualElement: true
@ObjectModel.virtualElementCalculatedBy: 'ZCL_HCM_VIRT_ELEM'
@EndUserText.label: 'Time Reporting Allowed'
cast('' as zallowed_e ) as IsAllowedForReporting,
// Total hours reported
@ObjectModel.virtualElement: true
@ObjectModel.virtualElementCalculatedBy: 'ZCL_HCM_VIRT_ELEM'
@EndUserText.label: 'Total Reported Hours'
cast(0 as abap.dec(6,2) ) as TotalReportHours,
// FI/CO
@ObjectModel.foreignKey.association: '_ControllingArea'
TRO.ControllingArea,
// Associations
_TimeEntries,
_WBSElement,
_ControllingArea
}
where
(
TRO.OrderType = 'SM01'
or TRO.OrderType = 'SM02'
or TRO.OrderType = 'PS02'
)
and TRO.IsMarkedForDeletion = '';
define view entity ZP_TimeReportingObjectEntries
as select from catsdb
association to parent ZI_TimeReportingObject as _TRObject
on $projection.TRObjectID = _TRObject.OrderID
{
key counter,
raufnr as ReceiverOrderID,
rnplnr as NetworkID,
case
when raufnr = '' then rnplnr
else raufnr
end as TRObjectID,
// reporting info
skostl as CostCenter,
workdate as WorkDate,
lstar as ActivityType,
awart as AttAbsType,
ltxa1 as ShortDesciption,
// status
status as Status,
// time
@DefaultAggregation: #SUM
@Semantics.quantity.unitOfMeasure: 'ReportUnit'
catshours as ReportHours,
meinh as ReportUnit,
// Associations
_TRObject
}
define root view entity ZC_TimeReportingObject
provider contract transactional_query
as projection on ZI_TimeReportingObject
{
key OrderID,
OrderCategory,
OrderType,
// all other fields...
/* Associations */
_TimeEntries : redirected to composition child ZC_TimeReportingObEntries,
_ControllingArea,
_WBSElement,
}
define view entity ZC_TimeReportingObEntries
as projection on ZP_TimeReportingObjectEntries
{
key counter,
ReceiverOrderID,
NetworkID,
TRObjectID,
// all fields...
/* Associations */
_TRObject : redirected to parent ZC_TimeReportingObject
}
unmanaged implementation in class zbp_i_timereportingobject unique;
strict ( 2 );
define behavior for ZI_TimeReportingObject alias TRObject
etag master LastChangeDate
{
create;
update;
field(mandatory) OrderID, OrderCategory, OrderType, OrderDescription;
field(readonly) IsAllowedForReporting, TotalReportHours;
association _TimeEntries { }
}
define behavior for ZP_TimeReportingObjectEntries alias TREntry
//implementation in class zbp_c_timereportingobjectentries unique
{
field ( readonly ) TRObjectID, counter;
association _TRObject { }
}
class zbp_i_timereportingobject definition public abstract final
for behavior of zi_timereportingobject.
endclass.
class zbp_i_timereportingobject implementation.
endclass.
class lhc_TRObject definition inheriting from cl_abap_behavior_handler.
private section.
methods create for modify
importing entities for create TRObject.
methods update for modify
importing entities for update TRObject.
methods read for read
importing keys for read TRObject result result.
methods rba_TimeEntries for read
importing keys_rba for read TRObject\_TimeEntries full result_requested result result link association_links.
endclass.
class lhc_TRObject implementation.
method create.
data ls_msg type symsg.
loop at entities assigning field-symbol(<ls_trobject>).
clear ls_msg.
call function 'Z_LEGACY_FUNCTION'
exporting
is_data_in = <ls_trobject>
importing
es_return = ls_msg.
if ls_msg is initial.
mapped-TRObject = value #( base mapped-TRObject
( %cid = <ls_trobject>-%cid
OrderID = <ls_trobject>-OrderID
) ).
else.
append value #( %cid = <ls_trobject>-%cid
OrderID = <ls_trobject>-OrderID )
to failed-TRObject.
append value #( %msg = new_message( id = ls_msg-msgid
number = ls_msg-msgno
v1 = ls_msg-msgv1
v2 = ls_msg-msgv2
v3 = ls_msg-msgv3
v4 = ls_msg-msgv4
severity = if_abap_behv_message=>severity-error )
%key-OrderID = <ls_trobject>-OrderID
%cid = <ls_trobject>-%cid
%create = 'X'
OrderID = <ls_trobject>-OrderID )
to reported-TRObject.
endif.
endloop.
endmethod.
method update.
data ls_msg type symsg.
loop at entities assigning field-symbol(<ls_trobject>).
clear ls_msg.
call function 'Z_LEGACY_FUNCTION'
exporting
is_data_in = <ls_trobject>
importing
es_return = ls_msg.
if ls_msg is not initial.
append value #( %cid = <ls_trobject>-%cid_ref
OrderID = <ls_trobject>-OrderID )
to failed-TRObject.
append value #( %msg = new_message( id = ls_msg-msgid
number = ls_msg-msgno
v1 = ls_msg-msgv1
v2 = ls_msg-msgv2
v3 = ls_msg-msgv3
v4 = ls_msg-msgv4
severity = if_abap_behv_message=>severity-error )
%key-OrderID = <ls_trobject>-OrderID
%cid = <ls_trobject>-%cid_ref
%update = 'X'
OrderID = <ls_trobject>-OrderID )
to reported-TRObject.
endif.
endloop.
endmethod.
method read.
select * from ZC_TimeReportingObject
for all entries in @keys
where OrderID = @keys-OrderID
into corresponding fields of table @result.
endmethod.
method rba_TimeEntries.
data: lt_time_entries type table of ZP_TimeReportingObjectEntries,
ls_result like line of result.
loop at keys_rba assigning field-symbol(<ls_key>).
" get time entries
select * from ZP_TimeReportingObjectEntries
into table @lt_time_entries
where TRObjectID = @<ls_key>-OrderID.
if sy-subrc = 0.
loop at lt_time_entries assigning field-symbol(<time_entry>).
insert
value #(
source-%tky = <ls_key>-%tky
target-%tky = value #(
counter = <time_entry>-counter
) )
into table association_links.
if result_requested = abap_true.
"ls_time_entry = CORRESPONDING #( <time_entry> MAPPING TO ENTITY ).
move-corresponding <time_entry> to ls_result.
insert ls_result into table result.
endif.
endloop.
endif.
sort association_links by source ascending.
delete adjacent duplicates from association_links comparing all fields.
sort result by %tky ascending.
delete adjacent duplicates from result comparing all fields.
endloop.
endmethod.
endclass.
class lsc_ZC_TIMEREPORTINGOBJECT definition
inheriting from cl_abap_behavior_saver.
protected section.
methods finalize redefinition.
methods check_before_save redefinition.
methods save redefinition.
methods cleanup redefinition.
methods cleanup_finalize redefinition.
endclass.
class lhc_TREntry definition inheriting from cl_abap_behavior_handler.
private section.
methods read for read
importing keys for read TREntry result result.
methods rba_TRObject for read
importing keys_rba for read TREntry\_TRObject full result_requested result result link association_links.
endclass.
projection;
strict ( 2 );
define behavior for ZC_TimeReportingObject alias TRObject
{
use create;
use update;
use association _TimeEntries { }
}
define behavior for ZC_TimeReportingObEntries alias TREntry
{
use association _TRObject { }
}
define service ZUI_TimeReportingObject {
expose ZC_TimeReportingObject;
expose ZC_TimeReportingObEntries;
}
/zui_v4_timereportingobject/srvd/sap/zui_timereportingobject/0001/
ZC_TimeReportingObjec/4000500?$expand=_TimeEntries
{
"@odata.context" : "$metadata#ZC_TimeReportingObject(_TimeEntries())/$entity",
"@odata.metadataEtag" : "W/\"20230302113047\"",
"OrderID" : "4000500",
"OrderCategory" : "30",
"OrderType" : "SM01",
"OrderDescription" : "Regular service order test",
"IsMarkedForDeletion" : false,
"ProjectID" : "0",
"WBSElementID" : "0",
"IsNetwork" : false,
"ResponsibleCostCenter" : "17101321",
"WBSResponsiblePerson" : "0",
"ResponsibleUser" : "FSM_TECH1",
"IsAllowedForReporting" : true,
"TotalReportHours" : 8.00,
"ControllingArea" : "A000",
"__EntityControl" : {
"Updatable" : true
},
"SAP__Messages" : [
],
"_TimeEntries" : [
{
"counter" : "000000000642",
"ReceiverOrderID" : "4000500",
"NetworkID" : "",
"TRObjectID" : "000004000500",
"CostCenter" : "17101902",
"PersonnelID" : "59",
"WorkDate" : "2023-02-21",
"ActivityType" : "T002",
"AttAbsType" : "0800",
"ShortDesciption" : "",
"Status" : "20",
"ReportHours" : 8.00,
"ReportUnit" : "H"
}
]
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
6 | |
6 | |
5 | |
5 | |
4 | |
4 | |
4 | |
4 | |
4 | |
4 |