on 09-18-2015 11:35 AM
Hi experts,
I am developing a UI5 web application which consumes oData collections.
One of these oData collection is fetched using get_expanded_entityset method which I implemented in my oData service
The get_expanded_entityset method returns both header and line items in the form of a collection of items [in my case it is called 'toPosition' navigation property]
Now I have a data table which is binded to that oData method but I am not able to get the single line items data displayed into each cell.
This is the data bind code I use
var oModelCarrier = new sap.ui.model.odata.ODataModel('/sap/opu/odata/sap/Z_COLL_PORTAL_SRV',{json:true});
var tableCarrier = sap.ui.getCore().byId("carrierInvoiceSub-carrierSubmission--carrierTable");
tableCarrier.setModel(oModelCarrier);
oModelCarrier.setCountSupported(false);
tableCarrier.bindRows( {path: '/fileRepositorySet',
filters : [ new sap.ui.model.Filter("fileId", sap.ui.model.FilterOperator.EQ, fileid) ],
parameters : {expand: 'toPosition'}
});
and this is the table view part
<table:Table id="carrierTable" enableGrouping="true" enableSorting="true">
<table:title><Textview text="Carrier Shipments [Uploaded]"></Textview></table:title>
<table:columns>
<table:Column>
<Label text="Invoice Num."/>
<table:template>
<layout:VerticalLayout content="{toPosition/results}" xmlns:layout="sap.ui.layout">
<layout:content>
<TextView text = "{invoiceNumber}" />
</layout:content>
</layout:VerticalLayout>
</table:template>
</table:Column>
<table:Column>
<Label text="Container Type"/>
<table:template>
<layout:VerticalLayout content="{toPosition/results}" xmlns:layout="sap.ui.layout">
<layout:content>
<TextView text = "{containerType}" />
</layout:content>
</layout:VerticalLayout>
</table:template>
</table:Column>
</table:columns>
</table:Table>
and most important this is the oData response I get from my service calling get_expanded_entityset
can anyone help me how to get collection data displayed on table cells ?
it seems the response I get is correct containing all the data I need for my application [pls see attachment table_response.png ].
please be patient with me, I am learning oData / UI5 technology so I am not an expert
best regards,
claudia
Hi Claudia,
Check this working sample, where I used your JSON response: JS Bin - Collaborative JavaScript Debugging
Few points -
1. I have added comments in the code, hope you will understand.
2. Since you told me fileId is a user input, so the logic is handled such a way where the fileid is must to filter the item details.
3. In text field control placed down the table, try to provide this fileId value carrierfile20150923174312, then the table data will get updated with respect to that fileId.
Regards,
Sai Vellanki.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Sai,
I've implemented your solution into my web application.
But data into table rows is still not populating with data I get correctly from oData response.
I am now debugging the code part you passed to me.
In particular I think there is something about the oItems object which is different from the one hardcoded in the aData model into your example.
See my result for oItems here
Do you think there is something wrong about this structure I get back from oData ?
Maybe the "0", "1", "2", etc. attributes are not binding the data as expected ?
Many thanks in advance,
Kind regards
claudia
Hi Claudia,
Your items is in the array structure, Set the model and bind it to table rows like below -
sap.ui.getCore().getModel().setProperty("/modelData/itemData", oItems[0]); //Set the Model
this.getView().byId("carieerTable").bindRows({path:"/modelData/itemData"}); //Bind the Model to table rows.
Regards,
Sai Vellanki.
Sai,
Now your solution is working fine into my application case.
Data rows have been populated with items data as expected.
Really many thanks and thank you for your patiente.
I am learning SAPUI5 so I am not an expert as you are,
but at least now I begin to understand a little more reading your suggestion step by step.
Kind regards,
Claudia
Message was edited by: Claudia Bressi
Claudia,
In your response, Can you please remove the URLs in ID (Since those are your internal URLs).
Thanks for providing it. I will look into this and come back to you.
Regards,
Sai Vellanki.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Claudia,
Also, tell me what value are you passing for 'fileid'. Is it a user input value?
tableCarrier.bindRows( {path: '/fileRepositorySet',
filters : [ new sap.ui.model.Filter("fileId", sap.ui.model.FilterOperator.EQ, fileid) ],
parameters : {expand: 'toPosition'}
});
Regards,
Sai Vellanki.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Claudia,
After when you get response in the form of JSON, you have to handle some logic.
Please check this sample - http://embed.plnkr.co/te0BbGhEm7srVYn1UgEb/preview
1. I used some what a similar model structure.
2. First time, when the page is loaded I have hard-coded the file id to 'carriersmall.xml20150917135454' which will fetch me the data for that file and bind to the table.
3. Now, there is file id text field placed below the table, you can try giving any of the below values and hit enter. The table data will get updated with respect to fileID.
carriersmall.xml20160917135455
carriersmall.xml20140917135456
I am using the same master model which has all the data, just I'm filtering on the file id and updating the table model.
Is this what you're expecting (or) is it different?
Regards,
Sai Vellanki.
Claudia,
Check the code here - http://plnkr.co/edit/te0BbGhEm7srVYn1UgEb?p=info
Let me know if you have any doubts.
Regards,
Sai Vellanki.
Hi Sai,
Your solution is well-done but in my case I have an expanded entity set
so I am still not able to get data displayed into table rows.
Anyway, after I analyzed your code I do not understand the following line
sap.ui.getCore().getModel().setProperty("/modelData/masterData",aData.d.results); |
Where does the 'masterData' path is coming from ?
I am not able to see this within the model located into the aData variable.
Regards,
Claudia
Hi Claudia,
I hope you're storing the data response into a JSON model.
Can you alert the response and paste the data model here, I mean to say like this -
var oModel = sap.ui.getCore().getModel().getProperty("/d/results/1");
alert(JSON.stingify(oModel)); //Alerts the Header data
var oPositionModel = sap.ui.getCore().getModel().getProperty("/d/results/1/toPosition/results");
alert(JSON.stringify(oPositionModel)); //Alerts the Item Data
Regards,
Sai Vellanki.
Hi Sai,
Here is the data response I get.
{"d":
{"results":
[
"fileId":"carrierfile20150923174311",
"recipientNumber":"recipient123",
"invoiceNumber":"201510156836",
"invoiceDate":"20150311",
"invoiceCurrency":"EUR",
"invoiceAmount":"256.77",
"invoiceDueDate":"20151211",
"accountNumber":"123123123",
"countryCode":"IT",
"taxId":"45347475756757",
"toPosition":
{"results":
[
"invoiceNumber":"201510156836","leadShipmentNumber":"1ZW19E460443751298","transactionDate":"20150216","trackingNumber":"1ZW19E460443751298","zone":"000","containerType":"PKG","quantity":"1","weight":"0.00 ","unitOfMeasure":"K","descriptionCode":"069","descriptionOfCharges":"Correzione dell'indirizzo WW Express Saver","currencyCode":"EUR","netAmount":"6.60 "},
{
"invoiceNumber":"201510156836","leadShipmentNumber":"1ZW19E460444937710","transactionDate":"20150219","trackingNumber":"1ZW19E460444937710","zone":"000","containerType":"PKG","quantity":"1","weight":"0.00 ","unitOfMeasure":"K","descriptionCode":"9","descriptionOfCharges":"","currencyCode":"EUR","netAmount":"0.00 "},
"invoiceNumber":"201510156836","leadShipmentNumber":"1ZW19E460444937710","transactionDate":"20150219","trackingNumber":"1ZW19E460444937710","zone":"000","containerType":"PKG","quantity":"1","weight":"0.00 ","unitOfMeasure":"K","descriptionCode":"069","descriptionOfCharges":"Correzione dell'indirizzo WW Express Saver","currencyCode":"EUR","netAmount":"6.60 "},
"invoiceNumber":"201510156836","leadShipmentNumber":"1ZW19E460443202747","transactionDate":"20150227","trackingNumber":"1ZW19E460443202747","zone":"000","containerType":"PKG","quantity":"1","weight":"0.00 ","unitOfMeasure":"K","descriptionCode":"9","descriptionOfCharges":"","currencyCode":"EUR","netAmount":"0.00 "},
"invoiceNumber":"201510156836","leadShipmentNumber":"1ZW19E460443202747","transactionDate":"20150227","trackingNumber":"1ZW19E460443202747","zone":"000","containerType":"PKG","quantity":"1","weight":"0.00 ","unitOfMeasure":"K","descriptionCode":"069","descriptionOfCharges":"Correzione dell'indirizzo WW Express Saver","currencyCode":"EUR","netAmount":"6.60 "},
"invoiceNumber":"201510156836","leadShipmentNumber":"1ZW19E460445313454","transactionDate":"20150302","trackingNumber":"1ZW19E460445313454","zone":"000","containerType":"PKG","quantity":"1","weight":"0.00 ","unitOfMeasure":"K","descriptionCode":"9","descriptionOfCharges":"","currencyCode":"EUR","netAmount":"0.00 "},
"invoiceNumber":"201510156836","leadShipmentNumber":"1ZW19E460445313454","transactionDate":"20150302","trackingNumber":"1ZW19E460445313454","zone":"000","containerType":"PKG","quantity":"1","weight":"0.00 ","unitOfMeasure":"K","descriptionCode":"069","descriptionOfCharges":"Correzione dell'indirizzo WW Express Saver","currencyCode":"EUR","netAmount":"6.60 "},
"invoiceNumber":"201510156836","leadShipmentNumber":"1ZW19E460445313454","transactionDate":"20150302","trackingNumber":"1ZW19E460445313454","zone":"000","containerType":"PKG","quantity":"1","weight":"0.00 ","unitOfMeasure":"K","descriptionCode":"9","descriptionOfCharges":"","currencyCode":"EUR","netAmount":"0.00 "}]
}
}
]
}
}
Do you think this specific response would cause error if binded to table rows ?
Hi Claudia,
Data that you wanted to bind to the table rows is present only in /toPosition/results (or) any other value is present in /d/results/0/.... etc? Since I can see Invoice number is also available in '/toPosition/results'.
Regards,
Sai Vellanki.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Sai,
Data needed to bind table rows are not in /d/results/0/...
This is the header for the structure and invoiceNumber is one field available both in header and items structure.
I think the correct path should [but I am not sure] like this /d/results/1/toPosition/results .
My concern is about if the path I pass is correct and how to fix to get rows displayed.
Maybe also the bindRows(..) statement which I coded is not able to get the correct binding with data but I am able to see the response from the service with expected data [...]
hi Claudia,
if no errors in the developer tools console, can you try switching this line:
var oModelCarrier = new sap.ui.model.odata.ODataModel('/sap/opu/odata/sap/Z_COLL_PORTAL_SRV',{json:true});
to
var oModelCarrier = new sap.ui.model.odata.ODataModel('/sap/opu/odata/sap/Z_COLL_PORTAL_SRV', true );
hope this helps
Sergio
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Sergio,
Using your proposed solution
I am getting same response from oData query
but the table is now filled with header data response [please see 1st and 2nd row]
and not with item data as expected
[e.g. with property line Container type, Transaction Date, Tracking Number, etc..]
Kind regards,
claudia
Claudia,
the next thing to verify would be the path to the item data.. since it is a child of the header data, you may need to specify one more level deep in your code. it is just matter of having the correct path in the bindings.
please mark the first question as answered if you got the correct answer. thank you
Sergio,
I am not able to view data even if I changed the items path for the data table.
What do you mean in details with 'since it is a child of the header data, you may need to specify one more level deep in your code' ? Is it about some to add for the binding in the table for example
1. <table:Table id="carrierTable" items="{path:'/d/results/1/toPosition/results'}">
or something into the controller.js side
2. tableCarrier.bindRows( {path: '/fileRepositorySet',
filters : [ new sap.ui.model.Filter("fileId", sap.ui.model.FilterOperator.EQ, fileid) ],
parameters : {expand: 'toPosition'}
});
Do you think in case of point 1. the path would be correct using '/d/results/1/toPosition/results' for the odata received for this scenario ?
Regards,
Claudia
User | Count |
---|---|
86 | |
10 | |
10 | |
9 | |
7 | |
7 | |
6 | |
5 | |
4 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.