I have a button in SalesOrder browser screen by which I open DeliveryOrder Editor screen to create delivery order based on selected sales order.
Everything is working except the DeliveryOrderLine data is not showing.
here is by code in sales order browser
public void createDoFromSo() {
SalesOrder salesOrder = salesOrdersTable.getSingleSelected();
if (salesOrder != null) {
DeliveryOrder deliveryOrder = metadata.create(DeliveryOrder.class);
deliveryOrder.setSalesOrder(salesOrder);
deliveryOrder.setCustomerProfile(salesOrder.getCustomerProfile());
deliveryOrder.setCompany(salesOrder.getCompany());
deliveryOrder.setPlant(salesOrder.getPlant());
deliveryOrder.setCurrency(salesOrder.getCurrency());
deliveryOrder.setSalesperson(salesOrder.getSalesperson());
deliveryOrder.setShippingPoint(salesOrder.getShippingPoint());
deliveryOrder.setDocDate(timeSource.currentTimestamp());
int lastNum = 0;
for (SalesOrderLine soLine : salesOrder.getSalesOrderLine()) {
DeliveryOrderLine doLine = metadata.create(DeliveryOrderLine.class);
doLine.setSalesOrderLine(soLine);
doLine.setMaterial(soLine.getMaterial());
doLine.setPlanShipDate(soLine.getPromisedShipDate());
doLine.setTransportMode(soLine.getTransportMode());
doLine.setUnitOfMeasure(soLine.getUnitOfMeasure());
doLine.setBalanceQuantity(soLine.getQuantityBase().subtract(soLine.getDoQuantity()));
doLine.setQuantity(doLine.getBalanceQuantity());
doLine.setDeliveryOrder(deliveryOrder);
doLine.setQuantityUsed(BigDecimal.ZERO); //creating lineNumber
doLine.setLineNumber(lastNum + 1);
doLine.setDeliveryOrder(deliveryOrder);
}
openEditor(deliveryOrder, WindowManager.OpenType.NEW_TAB).addCloseWithCommitListener(() -> salesOrdersDs.refresh());
} else {
showNotification("Please select a row to copy", NotificationType.HUMANIZED);
}
}
I also tried to load order line and used this additional code in above as alternative try
//Load Order lines since the current view doesnt include it
LoadContext<SalesOrderLine> loadContext = new LoadContext<>(SalesOrderLine.class);
loadContext.setView("salesOrderLineH-view");
loadContext.setQueryString("select e from erp$SalesOrderLine e " + " where e.salesOrder.id = :so").setParameter("so", salesOrder.getId());
List<SalesOrderLine> orderLines = dataManager.loadList(loadContext);
and here is by Delivery Order editor
@Override
protected void postInit() {
super.postInit();
salesOrderField.addValueChangeListener(e -> loadSalesOrder());
if (PersistenceHelper.isNew(getItem())) {
salesOrderField.setEditable(true);
customerProfileField.setEditable(true);
}
}
loadSalesOrder() in postInit is used when the user selects the sales order manually to create a Delivery Order. This works ok