Hi,
I am unable to find an example using TransactionalDataManager where I need to save 1 to Many Composition Entities programmatically in a service, for Example:
Sales Order:
Sales Order Line (Many)
Sales Order No. (FK to Sales Order)
Item
Example Code:
SalesOrder salesOrder = transactionalDataManager.create(SalesOrder.class);
SalesOrderLine salesOrderLine = transactionalDataManager.create(SalesOrderLine.class);
List<SalesOrderLine> salesOrderLineList = new ArrayList<>();
salesOrder.setSalesOrderNo("Sales123");
salesOrder.setCustomer("Customer1");
salesOrderLine.setItem("Item1");
salesOrderLine.setSalesOrder(salesOrder);
transactionalDataManager.secure().save(salesOrderLine);
salesOrderLineList.add(salesOrderLine);
salesOrderLine.setItem("Item2");
salesOrderLine.setSalesOrder(salesOrder);
transactionalDataManager.secure().save(salesOrderLine);
salesOrderLineList.add(salesOrderLine);
salesOrder.setSalesOrderLine(salesOrderLineList);
transactionalDataManager.secure().save(salesOrder);
Is this the proper way to save 1 to Many Composition Entities programmatically?
Please provide a proper example.
Thanks
Kind Regards,
John
s.fedorov
(Sergey Fedorov)
August 19, 2020, 8:01am
#3
Hi, @jtempest2424 !
You should save SalesOrder
entity before saving SalesOrderLine
entities that use it or in the same save operation. There is also no need to set list of SalesOrderLine
entities to SalesOrder
entity if it’s the same relationship.
In your example, you use same SalesOrderLine
entity twice, if you want to create two different SalesOrderLine
entities, you should use create
method twice.
For example:
SalesOrder salesOrder = transactionalDataManager.create(SalesOrder.class);
salesOrder.setSalesOrderNo("Sales123");
salesOrder.setCustomer("Customer1");
SalesOrderLine salesOrderLine1 = transactionalDataManager.create(SalesOrderLine.class);
salesOrderLine1.setItem("Item1");
salesOrderLine1.setSalesOrderNo(salesOrder);
SalesOrderLine salesOrderLine2 = transactionalDataManager.create(SalesOrderLine.class);
salesOrderLine2.setItem("Item2");
salesOrderLine2.setSalesOrderNo(salesOrder);
transactionalDataManager.secure().save(salesOrder, salesOrderLine1, salesOrderLine2);
or:
SalesOrder salesOrder = transactionalDataManager.create(SalesOrder.class);
salesOrder.setSalesOrderNo("Sales123");
salesOrder.setCustomer("Customer1");
transactionalDataManager.secure().save(salesOrder);
SalesOrderLine salesOrderLine = transactionalDataManager.create(SalesOrderLine.class);
salesOrderLine.setItem("Item1");
salesOrderLine.setSalesOrderNo(salesOrder);
transactionalDataManager.secure().save(salesOrderLine);
salesOrderLine = transactionalDataManager.create(SalesOrderLine.class);
salesOrderLine.setItem("Item2");
salesOrderLine.setSalesOrderNo(salesOrder);
transactionalDataManager.secure().save(salesOrderLine);
Regards,
Sergey
1 Like
Hi Sergey,
Thanks for the solution.
I’ved tried it and it works.
Kind Regards,
Dony