Dynamically fill field when adding a new node
I don't know a clever way to link, so I would probably use the NID from campaign as a reference. 

I'd create a integer field in order which would store the NID from the campaign on creation. i.e. The custom form would create a node of type order and automatically fill the value. 

Then both objects have the same number which will function as a connection. You can use EntityFieldQuery to find the related objects whenever you have the campaign nid.

This is pretty crude though, hopefully there is a smarter way.

Here is some sample code (untested, probably will need a little debugging, paths are from memory).

function my_create_a_node_form() {
  //form stuff goes here.

}

function my_create_a_node_form_submit() {
  //menu_get_object retrieves the current objects that loaded. We're storing it
  // we're storing it in a variable.

  $currentcampaign = menu_get_object();

  //we collect the nid from the campaign.
  $currentnid = $currentcampaign-&gt;nid['value'];
  global $user;

  $values = array(
    'type' =&gt; 'order',
    'uid' =&gt; $user-&gt;uid,
    'status' =&gt; 1,
    'comment' =&gt; 1,
    'promote' =&gt; 0,
  );
  $entity = entity_create('node', $values);

  $ewrapper = entity_metadata_wrapper('node', $entity);
  $ewrapper-&gt;title-&gt;set('YOUR TITLE');

  //here we store the nid in our pre set-up order field.
  $ewrapper-&gt;field_my_order_ref-&gt;set('$currentnid');

  //the rest of this is just standard create a node stuff.
  $my_body_content = 'A bunch of text about things that interest me';
  $ewrapper-&gt;body-&gt;set(array('value' =&gt; $my_body_content));
  $ewrapper-&gt;body-&gt;summary-&gt;set('Things that interest me');

  $my_date = new DateTime('January 1, 2013');
  $entity-&gt;field_my_date[LANGUAGE_NONE][0] = array(
     'value' =&gt; date_format($my_date, 'Y-m-d'),
     'timezone' =&gt; 'UTC',
     'timezone_db' =&gt; 'UTC',
   );

  $ewrapper-&gt;save(true);
  entity_save('node', $entity); 

}