Yes, you have to figure out the best set of tables and relationships that will work with your database to list the available products, but once you have that set up, a simple script can add the clicked item to your line items portal.
Your script could be written like this:
Set Variable[$Invoice ; Value: Invoices::InvoiceID]
Set variable[$Item ; Value: ProductListPortalTableOccurrence::ItemID ]
Go To Layout [LineItems (LineItems)]
New Record / Request
Set Field [LineItems::InvoiceID ; $Invoice ]
Set Field [LineItems::ItemID ; $Item ]
Go To Layout [Original Layout]
Your Products available portal could be based on a relationship as simple as:
Invoices::InvoiceID X Products::ItemID (the X operator is a "match all values" operator so all the records in products would appear in your portal.)
Thanks for the reply Phil, I am going to see if I can get it to work. It looks pretty straight forward but I will probably have some thinking to do.