Q:

How can I assign a shared foreign key to all records inserted using the Data Load Wizard? 

I have an ApEx application which, amongst other purposes, has a requirement to upload billing data provided by telecommunications providers.  The data is being provided as a CSV file. 
We have two tables.  The first table, phone_invoice, contains per-invoice metadata such as billing dates and provider name.  The second table, phone_invoice_detail is based largely on call logs. 
phone_invoice_detail has a foreign key, invoice_id, which keys into phone_invoice(id).  This creates a stock-standard master-detail relationship. 
We have used the ApEx Data Load Wizard to set up the import capability for our users.  But I need to assign the invoice_id to each imported row. 
Currently, I have a Phone Invoice page.  Users click a button, "Import Data for Invoice", which branches to the Data Load Wizard and sets a page item, P1000_INVOICE_ID with the value of that invoice ID -- P999_ID. 
When the user begins the process, the CSV data supplied has all the fields except for an invoice ID.  What I want is for that column in the underlying table -- invoice_id -- to be set to to the value of P1000_INVOICE_ID. 
My current focus is on using the Transformation Rules.  This has been tremendously frustrating because the documentation tells you nothing about them and there are no examples. 
Permutations I have tried:
-- PL/SQL Expression:
:INVOICE_ID := :P1000_INVOICE_ID
:INVOICE_ID := :P999_ID
SELECT :P1000_INVOICE_ID INTO :INVOICE_ID FROM DUAL
SELECT :P999_ID INTO :INVOICE_ID FROM DUAL

-- Replace:
-- Expression 1           Expression 2
:P1001_INVOICE_ID         :INVOICE_ID
:P999_INVOICE_ID          :INVOICE_ID

A:

As you can see, APEX creates 4 pages for import.  And it use apex collection named LOAD_CONTENT to store imported data.  So, you can change this collection before it will be loaded into the table. 
Go to the page named 'Data Validation' (this page have report Data Validation), and add page process, with next parameters:
Type:   PL/SQL anonymous block
Process Point: On Load - Before Header
Source:
declare 
  -- Local variables here
  i integer;
begin
  for i in (
    select t.seq_id
     from apex_collections t
     where t.collection_name = 'LOAD_CONTENT'
  ) loop
    apex_collection.update_member_attribute(
      p_collection_name => 'LOAD_CONTENT',
      p_seq => i.seq_id,
      p_attr_number => 3, -- here number of your column you want update
      p_attr_value => :P1000_INVOICE_ID -- value 
    );      
  end loop;  
end;

But change in this process number of your column. 
I've tried this example in my APEX version 4.1 - it works fine.