Hi, I’m trying to clear a nested datasource, but it’s not working as expected.
The datasource is populated based on user selection.
But when I use the standard clear function, the datasource remembers the items that need to be committed.
I did some debuggin and there is a property: itemsToCreate. This does not get cleared with ds.clear().
<datasource id="salesProcInvoiceDs"
class="com.company.entity.Invoice"
view="invoice-edit-view">
<collectionDatasource id="invoiceDetailLinesDs"
property="invoiceDetailLines"/>
public void setDetails(Invoice invoice){// Function gets called after a property change listener.
//1. Clear data source commit list (this is temporary workaround)
((AbstractDatasource) invoiceDetailLinesDs).clearCommitLists();
//2. CLear entity list
if(invoice.getInvoiceDetailLines()!=null)
invoice.getInvoiceDetailLines().clear();
//3. Clear data source
invoiceDetailLinesDs.clear();
if(invoice.getReceipt() != null) {
Receipt receipt = receiptService.getById(invoice.getReceipt().getId().intValue());
// add details from Receipt
List<ReceiptDet> receiptDetails = receipt.getReceiptDetails();
for (ReceiptDet receiptDet :receiptDetails) {
InvoiceDet invoiceDet = metadata.create(InvoiceDet.class);
invoiceDet.setInvoice(invoice);
invoiceDet.setAmount(BigDecimal.ZERO);
invoiceDet.setAmount(BigDecimal.ZERO);
invoiceDet.setQty(receiptDet.getQty());
invoiceDetailLinesDs.addItem(invoiceDet);
}
}
Method 2 + 3 don’t clear the Datasource property itemsToCreate.
If I do invoiceDetailLinesDs.getItems() it does say 0 items, but itemsToCreate just keeps increasing. And when commiting it tries to save all the items.
Is this expected behaviour?
With method 1 I got it working, but is it the right way?
Side Note:In this case the user can only change the parameters as long as the item isn’t saved.
Using platform 6.6.3