on 2024 Aug 09 2:35 PM
Hello community! First of all, thank you very much for reading me. I'm having a problem that is surely very simple but I can't find the reason for what is happening. I have a ComboBox like this:
<ComboBox
items="{path:'/TipoAuditoria'}"
selectedKey="{filters>TiposDeAuditoria}"
selectionChange="onSubmitFilter"
enabled="{= !${viewModel>/hasUIChanges}}"
>
<items>
<core:Item key="{ID}" text="{DESCRIPCION}" />
</items>
</ComboBox>
In the controller my filtering logic is as follows:
onSubmitFilter: function (oEvent) {
const sValue = oEvent.getSource().getValue(); // Input value
const sKey = oEvent.getSource().getSelectedKey(); // ComboBox value
let oView = this.getView();
let oModel = oView.getModel("filters");
oModel.setProperty("/AuditoriaDescripcion", sValue);
oModel.setProperty("/TiposDeAuditoria", sKey);
// Filter logic
let sAuditoria = oModel.getProperty("/AuditoriaDescripcion");
let sTiposDeAuditoria = oModel.getProperty("/TiposDeAuditoria");
let aFilters = [];
if (sAuditoria) {
aFilters.push(new Filter("DESCRIPCION", FilterOperator.Contains, sAuditoria));
}
if (sTiposDeAuditoria) {
aFilters.push(new Filter("TIPOAUDITORIA_ID", FilterOperator.EQ, sTiposDeAuditoria));
}
this._oAuditoriaTable.getBinding("items").filter(aFilters);
}
Filtering doesn't work, the "getSelectedKey()" method doesn't seem to bring me any value. I don't know what mistake I'm making. I'm sharing the "filters" model just in case:
_loadFilters: function () {
const oViewModelFilters = new JSONModel({
AuditoriaDescripcion: "",
TiposDeAuditoria: ""
});
this.getView().setModel(oViewModelFilters, "filters");
}
I appreciate the help, I need this to finish my view. Thanks!
selectedKey="{filters>/TiposDeAuditoria}"
1.you are missing the / in the binding
2. get the selected key from model after you correct the binding, no need to get selectkey from ui control.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi junwu! Thanks for your help, you were right. The code looks like this:
onSubmitFilter: function (oEvent) {
const sValue = oEvent.getSource().getValue();
const sKey = oEvent.getSource().getSelectedKey();
console.log('sKey:' + sKey);
let oView = this.getView();
let oModel = oView.getModel("filters");
oModel.setProperty("/AuditoriaDescripcion", sValue);
oModel.setProperty("/TiposDeAuditoria", sKey);
// Lógica de filtrado
let sAuditoria = oModel.getProperty("/AuditoriaDescripcion");
let sTiposDeAuditoria = oModel.getProperty("/TiposDeAuditoria");
let aFilters = [];
console.log('sTiposDeAuditoria:' + sTiposDeAuditoria);
if (sAuditoria) {
aFilters.push(new Filter("DESCRIPCION", FilterOperator.Contains, sAuditoria));
}
if (sTiposDeAuditoria) {
aFilters.push(new Filter("TIPOAUDITORIA_ID", FilterOperator.EQ, sTiposDeAuditoria));
}
this._oAuditoriaTable.getBinding("items").filter(aFilters);
}
The "console.log" on line #5 correctly prints the value.
The "console.log" on line #17 only prints the value if I set the value on line #10, otherwise the filters model does not have the value. Do you realize why this happens to me?
Also, even though I have managed to set the value and used the "sTiposDeAuditoria" variable, the filtering on line #24 does not work for me, the table is shown like this:
I don't understand what's happening
User | Count |
---|---|
68 | |
9 | |
8 | |
7 | |
7 | |
6 | |
6 | |
6 | |
5 | |
5 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.