Skip navigation

OK, - So you've previously used my 'amazing' guide on Cleaning up Unmapped CDO records, right? (If not, be sure to check it out for a great technique to tidy up your old unmapped CDO records).


Good, - so if you did follow my previous guide you can be assured that your CDO's contain 100% mapped contacts and your Custom Data Objects overall are in great shape.


But Now you're getting GDPR 'right to be forgotten'  requests requiring you to delete contacts, along with all of their associated CDO data. How tricky is that going to be?

After all you have a whole bunch of CDO's, so that's going to take some time and effort to resolve isn't it?


Fortunately, I have the solution you've been looking for.



This guide is going to show you how to use Eloqua's Program canvas to automate this entire process for yourself...


Here's the ingredients you're going to need:


  • One free Contact table field, we'll call this Delete CDO records?
  • A segment which will listen for your above field to have the right 'trigger value'
  • One master Contact Program canvas.
  • One Custom data object Program canvas per Custom Data Object that you have.


and that's it.


so, now we'll put it all together.


The new contact field.


As stated, we're going to call this field:  'Delete CDO records'


For simplicity's sake I'm using a text field, but you could use a checkbox or a picklist if you wanted.

In this instance we'll use a Text field with a default value of N (as in No, don't delete the CDO records).


Here's how I set it up:


This gives us a new field that we can use in our new Segment (which I called the same thing)

This is where we will evaluate if our new field is equal to 'Y' - this will only happen when we choose it to, so initially the count of this segment will clearly be 0



Now to the meat of the programs.


So for the main Contact Program canvas it will have a very simple structure. - each contact is evaluated against to check if they have a record in the CDO. - if so, the associated record is pushed into a CDO program for that CDO, which will delete it.


Here's the flow of my main program:


OK, so let's break it down. - the decision steps basically look at the associated CDO (in this example, CDO1, CDO2, CDO3 etc....)

and it looks for an email address field value in the associated CDO. - If you aren't capturing email address in that record, then any other field which is constant for all records will work fine.


If this is true then we push the associated CDO record into one of the other 'deletion' Custom Object Program canvases that we're about to create.....

This is done by using the Add Linked Record to Program canvas step.


then we rinse & repeat for each CDO, so we have one 'evaluation' and one 'push to program' step for each CDO that we have.


Make your own life easier:
As stated above. you will need one 'deletion' Canvas for each CDO that you have. If you have 120 CDO's then you will need 120 of these programs, so to make your life easier you should first audit your CDO's and delete any that are redundant or no longer required.


Now you should have the framework of your Program a bit like the below, but you cannot configure the Add Linked Record to Program steps until you have actually made those canvases.


The deletion programs.


So the last step we have to do is to create the Custom Object Programs to handle the deletions.


fortunately these are VERY simple and only take a minute or so to build: - this is what they look like.


Very simple. - just create the Program & assign it to the CDO in question ( in my case it was CDO 1 for deletion Test)


Then add a listener, & add one Delete Custom Object Record step. Link the two & you're done. ... Onto the next one.


You can't copy & paste.

If you're thinking of cutting corners here & copying your canvas just to change the associated CDO, think again. - copying the canvas also copies the CDO association!  so you do in fact need to create a new one each time.

Luckily they are very easy to build!

So now you have one of these deletion Custom Object canvases for each of your CDO's so you can go back through your main Contact Program & tie all of the Send Linked Record steps to the correct Custom Object Program.

Don't forget to 'Choose' the right program & the Listener on that Program.


And then that's done.


you can now activate your program.

Now whenever you update the Delete CDO Records field of a contact to Y, it will be captured in the Segment in the next evaluation. thereafter flowing through your program and deleting all CDO records attached to that contact.

Note: Once you configure the segment, it is evaluated on a regular basis based on your configuration. The minimum time between evaluations is 1 day.


So if you have a list of 50 contacts that you are looking to delete from your instance, - you should upload these from an excel sheet with simply two fields - Email address & Delete CDO Record ( the latter will all be the value 'Y').

After the list is uploaded you can sit back & wait for all of the CDO records to be erased. after that ( and only after that), you can delete the contacts themselves. - if you delete them first they won't be able to flow through your contact Program!!



But Does it Work?


In order to test this, I created a simple Proof of concept, then created a Test matrix to highlight that some records in the CDO would be pushed through & some would not. - As you can see from the below image, - it worked exactly as planned.



Good Luck!!



Andy Ball

Eloqua Principal Technical Account Manager,

Oracle Cloud Priority Support.

Filter Blog

By date: By tag: