H:datatable..select multiple rows
Hi all, i'm trying to select multiple rows but couldn't do it.. can you please help me to solve this trouble?
Here the code..
kbankMainView.jsp
function doCount() {
button = document.getElementById('formProcedurelist:buttonCount');
button.click();
<h:commandButton id="buttonCount" style="visibility:hidden" action="#{MainViewBean.getSelectedItems}"></h:commandButton>
<h:dataTable id="tableProcedurelist" value="#{MainViewBean.procedureList}" rendered="#{!empty MainViewBean.procedureList}" var="procedure" border="1" headerClass="heading" columnClasses="col0,col1,col2,col3,col4,col5">
<h:column>
<f:facet name="header">
<f:verbatim>Sel.</f:verbatim>
</f:facet>
<h:selectBooleanCheckbox value="#{MainViewBean.selectedIds[procedure.idProcedura]}" style="cursor:pointer" onclick="javascript:doCount()"/>
</h:column>Here my bean..
MainViewBean
private List<TKbankProcedure> selectedProcedureList;
private Map<Integer, Boolean> selectedIds = new HashMap<Integer, Boolean>();
private ArrayList<TKbankProcedure> procedureList;
public void getSelectedItems() {
// Get selected items.
selectedProcedureList = new ArrayList<TKbankProcedure>();
for (TKbankProcedure procedure : procedureList) {
if (selectedIds.get(procedure.getIdProcedura()).booleanValue()) {
selectedProcedureList.add(procedure);
selectedIds.remove(procedure.getIdProcedura()); // Reset
System.out.println("number sel. items = " + selectedProcedureList.size());
}and here my faces-config.xml:
<managed-property>
<property-name>selectedIds</property-name>
<property-class>java.util.Map</property-class>
<map-entries>
<key-class>java.lang.Integer</key-class>
<value-class>java.lang.Boolean</value-class>
</map-entries>
</managed-property>
<managed-property>
<property-name>selectedProcedureList</property-name>
<property-class>java.util.List</property-class>
<list-entries>
<value-class>databaseKbank.TKbankProcedure</value-class>
</list-entries>
</managed-property>
<managed-property>
<property-name>procedureList</property-name>
<property-class>java.util.ArrayList</property-class>
<list-entries>
<value-class>databaseKbank.TKbankProcedure</value-class>
</list-entries>
</managed-property>I can't understand why returns me 0 elements selected..i really hope in your help!
However, thanks BalusC for the help you gave me in the other post!!
Edited by: emergencyDeveloper on Dec 22, 2008 7:52 AM
BalusC, i've removed entries and seemed to work..but still doesn't!
Returns me these Exceptions:
ERROR [InvokeApplicationPhase] #{MainViewBean.getSelectedItems}: javax.faces.el.EvaluationException: java.lang.NullPointerException
javax.faces.FacesException: #{MainViewBean.getSelectedItems}: javax.faces.el.EvaluationException: java.lang.NullPointerException
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:78)
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException
at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:130)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:72)
... 26 more
Caused by: java.lang.NullPointerException
at m2u_kbank.MainViewBean.getSelectedItems(MainViewBean.java:251)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:126)
... 27 more
11:32:37,698 ERROR [[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception
javax.faces.FacesException: #{MainViewBean.getSelectedItems}: javax.faces.el.EvaluationException: java.lang.NullPointerException
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:78)
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException
at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:130)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:72)
... 26 more
Caused by: java.lang.NullPointerException
at m2u_kbank.MainViewBean.getSelectedItems(MainViewBean.java:251)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:126)
... 27 moreCan't found data in procedureList ArrayList, i think error is there..
Bean:
public void getSelectedItems() {
// Get selected items.
selectedProcedureList = new ArrayList<TKbankProcedure>();
Iterator it = procedureList.iterator();
while (it.hasNext()) {
TKbankProcedure procedure = (TKbankProcedure)it.next();
if (selectedIds.get(procedure.getIdProcedura()).booleanValue()) {
selectedProcedureList.add(procedure);
selectedIds.remove(procedure.getIdProcedura()); // Reset
}Hope in your suggest!
Thanks
Similar Messages
-
Selecting multiple rows in datatable
Hi all,
i want to select multiple rows in datatable using checkbox or radiobox.. after selecting more than one row, user will click on "add" button and that list will be maintained by array. but i can't figure out how do i select multiple entries...
means how would i get to know which rows are selected ?
please help me out..
thanx in advance
VenkateshPointer here is : bind datatable to a datatable object in the backing bean, get the state of the checkboxes there and perform the desired operation.
HTH,
Sachin -
How to select multiple rows from List Of Values
Hello,
I use ADF 11g to create my list of values (LOV). I want to select multiple rows from it. but i can't.
so how i can select many rows to set them in my adf table.
Thank in advanceHi,
LOV is map to an attribute in the viewObject so it will return only one value or more values from selected row. You can't select multiple rows from LOV.
But you can do this by using popup which you can select multiple rows and insert the selected rows to another table.
This blog post explain how to achieve this :
http://husaindalal.blogspot.com/2009/11/search-from-popup-and-add-to-new-table.html#comments
Sameh Nassar -
How to select multiple row in ALV report
Hi friends,
1. How to select multiple row in ALV report
( How to set tab in ALV report and want to select multiple line.)
Thanking you.
SubashHi Sahoo,
If you are using the class CL_GUI_ALV_GRID. In methods SET_TABLE_FOR_FIRST_DISPLAY.
in layout structure you will find field SEL_MODE
pass :
LS_LAYOUT-SEL_MODE = 'A'.
In PAI.
CALL METHOD GRID->GET_SELECTED_ROWS
IMPORTING
ET_INDEX_ROWS = T_ROWS
ET_ROW_NO = T_ROWID.
Hope these will solve your problem.
Regards,
Kumar M. -
Select Multiple Rows in a Table without CTRL
Expecting the user to press "Ctrl" when selecting multple rows is very unfriendly and unintuitive. We'd like the row selection to work as in ALV where you just select multiple rows by clicking on them.
We've set the tables rowSelectable to true and selectionMode to 'multi' but we still cannot select multiple rows without the CTRL hotkey.
This issue apparently [arose before|About selection in the table] but wasn't resolved.
System Details
SAP_ABA 701 0006 SAPKA70106
SAP_BASIS 701 0006 SAPKB70106
SAP_AP 700 0019 SAPKNA7019Hello Marc,
you need to call IF_WD_CONTEXT_NODE->set_selected(index = lv_index) sorry for the typo in my previous comment.
by calling IF_WD_CONTEXT_NODE->set_selected method wont remove the lead selection.
to unselect the records, you can call the same method by passing the FLAG value as abap_false.
so for your usecase the logic will be like this in the ON_SELECT event handler
1. get the index of the new_lead_selection
2. check whether this is already seleted in the context node by calling IF_WD_CONTEXT_NODE->IS_selected
3. if already selected then call IF_WD_CONTEXT_NODE->set_selected( flag = abap_false index = lv_index)
if not selected then call IF_WD_CONTEXT_NODE->set_selected( index = lv_index )
Hope this solved your problem.
BR, Saravanan
Edited by: Saraa_n on Jul 6, 2011 11:52 AM -
Selecting multiple rows in a table
Hi All,
I have one problem with selecting multiple rows in a table.I tried with setting table property-selectionMode as Multi, but i dinn't get the solution.
please provide me solution for this.
Thanks & Regards,
Sreelakshmi.HI
Int leadSelection = wdcontext.nodemodelnode.getLeadSelection();
for(int i=0;i<wdcontext.nodeModelNode.size;i++)
if(wdcontext.nodeModelNode.isMultiselected(i) || leadSelection ==i)
String name = wdcontext.nodemodelnode.getnameelementatindex(i).getName();
String address = wdcontext.nodemodelnode.getaddresselementatindex(i).getAddress();
String age = wdcontext.nodemodelnode.getAgeelementatindex(i).getAge();
Create a method for the Table Property onLeadSelect() where you can open a popup window
Create a value node and with attributes same as Table attributes and then set the values of the table
to the value node attributes.
Thanks -
Select multiple rows in a grid
Hi All,
I want to select multiple rows in a grid on click of a button, there is no checkbox there are multiple rows which need to be selected like we do on pressing shift key on the keyboard. Please suggest how can this be done.
thanks in advance.
Regards,
AnjuHi Anju,
You can check this link to solve your problem:
https://wiki.sdn.sap.com/wiki/display/Snippets/ALV%2bGrid%2bDisplay%2bwith%2bcheckbox%2bto%2bprocess%2bselected%2brecords%2bat%2bruntime
Hope it helps you.
Thanks & Regards,
Sarita Singh Rathour -
Select multiple row in a table that are not connected
I want to be able to select multiple rows, but want to be able to select rows that are not next to each other. They maybe have one or two rows between. Is there anyway to do this in a table?
ThanksSo do a lot of other people, but you can’t.
Tell Adobe here: https://www.adobe.com/cfusion/mmform/index.cfm?name=wishform
Bob -
Select multiple rows from dual table
Is it possible to select multiple rows from dual table using a single select statement.
i.e., i want the out put to be
column_name
1
2
3
4
Edited by: vidya.ramachandra on Dec 14, 2009 8:24 AMAside from the fact you're responding to an old thread...
1002424 wrote:
While using CONNECT BY, I see it always leave behind one row.
Suppose I have a condition based on which I have to generate constant rows like
SELECT 1 FROM DUAL WHERE ROWNUM < N;
Here if N = 0, still it gives out single row.... you are obviously doing something wrong in your code elsewhere, because that SQL statement does not always return a single row...
SQL> SELECT 1 FROM DUAL WHERE ROWNUM < 0;
no rows selected
SQL> -
Pressing cntrl+left mouse click doesn't select multiple rows.
Hi,
I've got this problem after i migrated my form from 6i to 10g.
In 6i version, cntrl+left mouse click used to work in order to select multiple rows on the screen. But, it's not working in 10g.
Instead, Shit + left mouse click is working to select multiple rows in 10g.
Please can someone help me out with this. I want cntrl + left mouse click to work.
Any help will be appreciated.
Regards
NavnitHi Pradeep,
Thanks for your reply.
Do you mean fmrweb.res file?
This is the content of my res file
9 : 0 : "Tab" : 1 : "Next Field"
9 : 1 : "Shift+Tab" : 2 : "Previous Field"
116 : 0 : "F5" : 3 : "Clear Field"
38 : 0 : "Up" : 6 : "Up"
40 : 0 : "Down" : 7 : "Down"
33 : 0 : "PageUp" : 12 : "Scroll Up"
34 : 0 : "PageDown" : 13 : "Scroll Down"
69 : 2 : "Ctrl+E" : 22 : "Edit"
10 : 0 : "Return" : 27 : "Return"
76 : 2 : "Ctrl+L" : 29 : "List of Values"
115 : 0 : "F4" : 32 : "Exit"
75 : 2 : "Ctrl+K" : 35 : "Show Keys"
83 : 2 : "Ctrl+S" : 36 : "Commit"
118 : 1 : "Shift+F7" : 61 : "Next Primary Key"
117 : 0 : "F6" : 62 : "Clear Record"
38 : 2 : "Ctrl+Up" : 63 : "Delete Record"
117 : 1 : "Shift+F6" : 64 : "Duplicate Record"
40 : 2 : "Ctrl+Down" : 65 : "Insert Record"
119 : 1 : "Shift+F8" : 66 : "Next Set of Records"
1005 : 0 : "Down" : 67 : "Next Record"
1004 : 0 : "Up" : 68 : "Previous Record"
118 : 0 : "F7" : 69 : "Clear Block"
66 : 2 : "Ctrl+B" : 70 : "Block Menu"
34 : 1 : "Shift+PageDown" : 71 : "Next Block"
33 : 1 : "Shift+PageUp" : 72 : "Previous Block"
116 : 1 : "Shift+F5" : 73 : "Duplicate Field"
119 : 0 : "F8" : 74 : "Clear Form"
122 : 0 : "F11" : 76 : "Enter Query"
122 : 2 : "Ctrl+F11" : 77 : "Execute Query"
69 : 3 : "Shift+Ctrl+E" : 78 : "Display Error"
80 : 2 : "Ctrl+P" : 79 : "Print"
123 : 0 : "F12" : 80 : "Count Query"
85 : 2 : "Ctrl+U" : 81 : "Update Record"
121 : 3 : "Shift+Ctrl+F10" : 82 : "Function 0"
112 : 3 : "Shift+Ctrl+F1" : 83 : "Function 1"
113 : 3 : "Shift+Ctrl+F2" : 84 : "Function 2"
114 : 3 : "Shift+Ctrl+F3" : 85 : "Function 3"
115 : 3 : "Shift+Ctrl+F4" : 86 : "Function 4"
116 : 3 : "Shift+Ctrl+F5" : 87 : "Function 5"
117 : 3 : "Shift+Ctrl+F6" : 88 : "Function 6"
118 : 3 : "Shift+Ctrl+F7" : 89 : "Function 7"
119 : 3 : "Shift+Ctrl+F8" : 90 : "Function 8"
120 : 3 : "Shift+Ctrl+F9" : 91 : "Function 9"
113 : 0 : "F2" : 95 : "List Tab Pages"
72 : 2 : "Ctrl+H" : 30 : "Help"
112 : 0 : "F1" : 30 : "Help"
I don't know what value should i enter for cntrl + left mouse click ?
Even for shift + left mouse click, row is not there but it's working.
Please tell if you know what row should i enter for cntrl + left mouse click in order for it to select mutliple rows?
Regards
Navnit -
How to select multiple row of table using check box?
hi,
i am having table on view having first field as checkbox. what i want, when i click on checkboxes in multiple rows, and i click on any button i need to use those content to next view...
my problem is if i select only one row , i can use onlead select property of table..but when i select multiple rows through check box how should i read contents of table....?
Plz solve it.
Thanks,
Saurin ShahHello Saurin,
You are right using LeadSelection you can select only 1 row at a time. You will have to make use of Selection for achieving this. First you will have to change the selection mode of the table to multiple & also change the selection property for the related context to 0..n . Please find a code extract which might help you. (However this facility is only available from SP 14.) The main part is using the set_selected method of if_wd_context_node.
data: node_zcourse_details type ref to if_wd_context_node,
node_course_assign type ref to if_wd_context_node,
elem_course_assign type ref to if_wd_context_element,
stru_course_assign type if_v_details=>element_course_assign ,
item_popin_selected like stru_course_assign-popin_selected.
" navigate from <CONTEXT> to <ZCOURSE_DETAILS> via lead selection
node_zcourse_details = wd_context->get_child_node( name = if_v_details=>wdctx_zcourse_details ).
" navigate from <ZCOURSE_DETAILS> to <COURSE_ASSIGN> via lead selection
node_course_assign = node_zcourse_details->get_child_node( name = if_v_details=>wdctx_course_assign ).
" @TODO handle not set lead selection
if ( node_course_assign is initial ).
exit.
endif.
data elem_set type wdr_context_element_set.
field-symbols <wa_elem> like line of elem_set.
elem_set = node_course_assign->get_elements( ).
loop at elem_set assigning <wa_elem>.
<wa_elem>->set_selected( TRUE OR FALSE ). " Supply either TRUE/FALSE in here
endloop. -
Selecting multiple rows in a block
In a multi record block, I would like to select multiple rows by double clicking on them. The backgroung color of all the selected rows should change to Blue.
If I change the color using set_item_property, the color of all the rows change. If I set using set_block_property, it changes only for the current row. when I go to the next record, the color is set back to normal. Using set_record_property on the status of the record can be set.
Can someone help me to achieve this?
Thanks in advanceI answered this in your other, duplicate, post.
Regards,
Robin Zimmermann
Forms Product Management -
Selecting multiple rows in a datagrid
How do you make it so that you can select multiple row in a
datagrid, and I don' t just mean like make it so you click a button
and five different rows are suddenly highlighted. I mean like you
manually go through and select each row that you want and it
highlights each one as you select it.yourDatagrid.allowMultipleSelection=true
should do the trick for you
Regards
Craig -
Selecting multiple rows using column header with checkbox in it.
Dear All.,
I am trying to select multiple rows with checkbox in column header but it doesnot works...
Following is my codel
<af:table value="#{bindings.xx.collectionModel}"
var="row"
rows="#{bindings.xx.rangeSize}"
emptyText="#{bindings.xx.viewable ? 'No data to display.' : 'Access Denied.'}"
fetchSize="#{bindings.xx.rangeSize}"
rowBandingInterval="1"
filterModel="#{bindings.xx.queryDescriptor}"
queryListener="#{bindings.xx.processQuery}"
varStatus="vs" partialTriggers="sbcSelectAll sbcChkFlag"
selectedRowKeys="#{bindings.xx.collectionModel.selectedRow}"
selectionListener="#{bindings.xx.collectionModel.makeCurrent}"
rowSelection="none" id="tCdMast" width="400"
columnStretching="column:c4" inlineStyle="height:200px;">
<af:column sortProperty="ChkFlag" filterable="true"
sortable="true"
headerText="#{bindings.xx.hints.ChkFlag.label}"
id="c2" width="55"
inlineStyle="#{row.ChkFlag ? 'background-color:#9CACC9;' : ''}">
<af:selectBooleanCheckbox simple="true" value="#{row.ChkFlag}"
selected="#{row.ChkFlag}" id="sbcChkFlag"
autoSubmit="true" immediate="true"/>
<f:facet name="header">
<af:selectBooleanCheckbox simple="true"
autoSubmit="true"
valueChangeListener="#{xxBean.onTableChkAllCheckChanged}"
id="sbcSelectAll"/>
</f:facet>
</af:column>
</af:table>
Managed Bean
public void onTableChkAllCheckChanged(ValueChangeEvent valueChangeEvent) {
Boolean newValue =
Boolean.valueOf(u.nvlString(valueChangeEvent.getNewValue(),
"false"));
Boolean oldValue =
Boolean.valueOf(u.nvlString(valueChangeEvent.getOldValue(),
"false"));
if (newValue.equals(oldValue))
return;
int rowIndex=0;
ViewObject vo = u.findIterator("xxIterator").getViewObject();
vo.reset();
while(vo.hasNext()){
Row row;
if(rowIndex==0)
row=vo.first();
else
row=vo.next();
row.setAttribute("ChkFlag", newValue.booleanValue());
rowIndex=1;
u.addPartialTargets(tableDocuments);
}Please help!!.
Thanks & Regards,
Santosh.
jdeve 11.1.1.4.0Can you check this sample in the blog post?
http://sameh-nassar.blogspot.com/2009/12/use-checkbox-for-selecting-multiple.html
Thanks,
Navaneeth -
Selecting Multiple Rows from ALV GRID Display
Hi,
I am having a ALV GRID Display. I want to select multiple rows from the Output and move them to an internal table.
Please let me know how do I acheive this.
Thanks in advance,
Ishaq.Hi,
Have a look on the following code. It displays the selected rows which hv been selected in basic list.
TABLES:
spfli.
TYPE-POOLS:
slis.
DATA:
BEGIN OF t_spfli OCCURS 0,
checkbox.
INCLUDE STRUCTURE spfli.
DATA: END OF t_spfli.
DATA:
t_sspfli LIKE STANDARD TABLE OF t_spfli .
DATA:
fs_spfli LIKE LINE OF t_sspfli.
DATA:
fs_layout TYPE slis_layout_alv,
w_program TYPE sy-repid.
SELECT *
FROM spfli
INTO CORRESPONDING FIELDS OF TABLE t_spfli.
*fs_layout-info_fieldname = 'COLOR'.
fs_layout-box_fieldname = 'CHECKBOX'.
w_program = sy-repid.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = w_program
i_callback_pf_status_set = 'FLIGHT'
i_callback_user_command = 'SPFLI_INFO'
i_structure_name = 'SPFLI'
is_layout = fs_layout
TABLES
t_outtab = t_spfli
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*& Form FLIGHT
text
-->RT_EXTAB text
FORM flight USING rt_extab TYPE slis_t_extab..
SET PF-STATUS 'FLIGHT' EXCLUDING rt_extab.
ENDFORM. "FLIGHT
*& Form SPFLI_INFO
text
-->UCOMM text
-->SELFIELD text
FORM spfli_info USING ucomm LIKE sy-ucomm
selfield TYPE slis_selfield.
selfield-refresh = 'X'.
CASE ucomm.
WHEN 'FLIGHT'.
LOOP AT t_spfli.
IF t_spfli-checkbox = 'X'.
t_spfli-checkbox = ' '.
t_spfli-color = 'C51'.
MODIFY t_spfli TRANSPORTING checkbox.
fs_spfli = t_spfli.
APPEND fs_spfli TO t_sspfli.
ENDIF.
ENDLOOP.
WHEN 'EXIT'.
LEAVE PROGRAM.
ENDCASE.
CLEAR fs_spfli.
fs_layout-info_fieldname = 'COLOR'.
fs_layout-confirmation_prompt = 'X'.
fs_layout-key_hotspot = 'X'.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = w_program
i_structure_name = 'SFLIGHT'
is_layout = fs_layout
TABLES
t_outtab = t_sspfli
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
REFRESH t_sspfli.
ENDFORM. "SPFLI_INFO
Regards,
Chandu
Maybe you are looking for
-
Using Apple TV/Airplay for a full screen movie and opening new window on laptop
When I have a full screen movie playing on my TV in AirPlay dual screen mode, and I open a new Safari window or my Mail, the window appears seemingly by default on top of the movie rather than coming up on my laptop monitor. Is there a spot I can re
-
Identifying which tokens/columns matched in a MULTI_COLUMN_DATASTORE Index
Hello there, I have a multi-column datastore text index. I am searching this index with a variant of the following relaxed progressive search: SELECT SCORE(1), TEST_MV.* FROM TEST_MV WHERE country_code = 'AU' AND CONTAINS(vehicle_text,
-
User Exits in entire BW and R/3
Hi all Can anyone please tell me in how many places we can write user exits in entire BW and R/3. I know two places where we can write user exits 1. While enhancing the datasources in R/3 2. For variables while creating reports Apart from these two
-
Hi i am getting this error frequently in my logs. Though there is no impact on the working of cq5 , i just want to know the reason for this. *ERROR* [ObservationManager] com.day.cq.collab.wiki.impl.WikiServiceImpl Error while accessing repository. ja
-
Strategy Management - Not able to login
Hi All, Recently, I have installed strategy management in the environment of CE7.1 with SP6 and the strategy management version as 7.5 SP7. After deploying the SCA file which is downloaded from the market place, I could see the services