I feel creating the invoice items before the invoice itself is cumbersome. For one, if the user creates the invoice items in the database and decides to cancel the invoice before creating, we will have to leave these items loose in the database or we need to create a workflow to delete them only if they click a cancel button. On the other hand, a list custom state that temporarily holds all this data can transfer the data only when a Save invoice button is clicked. There has to be a way out.