How To Detect Copied Projects (aka "Project Genealogy") | Community
Skip to main content
Doug_Den_Hoed_AtAppStore
Community Advisor
Community Advisor
March 5, 2025

How To Detect Copied Projects (aka "Project Genealogy")

  • March 5, 2025
  • 6 replies
  • 1212 views

 

Hi folks,

 

NEW (and improved) as of March 5, 2025 3pm Mountain

 

With thanks to @sven-ix for this thought inspiring post, I am pleased to share this solution to the years-old "detect copy" challenge using a derivative work of my Targeted Auditing technique:

 

  • create a custom form (e.g. Project Genealogy, as below) that you will attach it to all Projects of interest; or if you prefer, skip this step and instead repeat the remainders on your existing common Project Custom Form(s) of interest
  • add two calculated parameters ("Project Genealogy" and "Project Original Or Copy", respectively; both Text format) to the custom form
  • save the form (so Workfront "knows" that those parameters now exist)
  • set the NEW Project Genealogy formula as follows (and as below):

 

 

IF(ISBLANK({DE:Project Genealogy}) ,CONCAT("Created on ",{entryDate}," (",{referenceNumber},") as '",{name},"' by ",{enteredBy}.{name}) ,IF(CONTAINS(CONCAT(" (",{referenceNumber},") "),{DE:Project Genealogy}) ,{DE:Project Genealogy} ,CONCAT("Copied on ",{entryDate}," (",{referenceNumber},") as '",{name},"' by ",{enteredBy}.{name}," | ",{DE:Project Genealogy}) ) )

 

 

  • set the Project Original Or Copy formula as follows (and as below):

 

 

IF(LEFT({DE:Project Genealogy},6)="Copied","Copy","Original")

 

 

  • save the form
  • create a view and do some tests similar to mine (as below)

With the "cheater" caveat aside for today, I invite those of you wanting to detect (and prevent) Copied Projects to try this in your environments, and am interested in hearing how you make out.

 

Regards,

Doug

 

 

 

 

NEW

 

 

 

 

6 replies

KierstenKollins
Community Advisor
Community Advisor
March 5, 2025

Genius @doug_den_hoed__atappstore and so simple to set up!

Level 2
March 5, 2025

This is very cool, points to Doug!!  Thanks!

Sven-iX
Community Advisor
Community Advisor
March 5, 2025

Very cool @doug_den_hoed__atappstore  Really dig the project genealogy! That's really slick. I offer the below so we don't have to rely on the project:name starting with "Copy of "

 

Here I use a 30 sec gap after creating the project. (I didn't replicate the genealogy)

Same caveat applies as above: If the data is cleared, we don't have anything to compare to. If anyone has ideas outside of Fusion, I'd love to hear them.

 

 

How it works:

 

2 custom fields 

DE:projID

IF( $$OBJCODE="PROJ",IF(SUB($$NOW,{entryDate})/1000>=30,{ID},{DE:projID}))

and DE:project origin

IF(SUB($$NOW,{entryDate})/1000<30,IF(ISBLANK({DE:projID}), "Created","Copied"),IF(ISBLANK({DE:project origin}), "Unknown",{DE:project origin}) )

 

DE:projID waits for 30 seconds before replacing its value

During that window, DE:project origin does the checking and sets its value. The window is 30sec because the project copy will depend on # docs, tasks etc and could run long.

The logic is

  • if projID is blank we assume the project was not created as a copy (we're not able to account for the user intentionally clearing custom data)
  • if projID is NOT blank, that means it was copied over from the source project
  • if we're outside the 30s window and the DE:project origin is still blank we set it to Unknown

 

Doug_Den_Hoed_AtAppStore
Community Advisor
Community Advisor
March 5, 2025

 

Oooh! Very nice, @sven-ix

 

Your "30 second window" technique is indeed an Excellent Refinement: duly noted for future consideration!

 

Regards,

Doug

Doug_Den_Hoed_AtAppStore
Community Advisor
Community Advisor
March 5, 2025

 

Hi again folks,

 

After one colleague spotted a bug in my original version, and another colleague suggested some excellent improvements, I invite you to switch to the NEW (and improved) as of March 5, 2025 3pm Mountain version that I just updated on the main post, above, which fixes the bug and includes the Ref Num parenthetically and the name of the project in the Project Genealogy.

 

To switch to this NEW version (asap, I'd suggest, and noting that this is a "going forward" situation):

 

  • edit the Project Genealogy custom form (or its equivalent, in your environment)
  • CLEAR the Project Genealogy formula, check off the Apply to Existing Calculations option, and click the Apply button (effectively resetting all of the data)
  • paste the new formula above, again (superstitiously) check off the Apply to Existing Calculations option, then Save and Close the form
  • test to confirm all is well (e.g. similar to the ones I showed in my updated screenshot)

 

I am certain there are other Excellent Refinements that could be made to this technique -- including expanding the concept to any other object with a RefNum and custom data, as one of my colleagues pointed out -- so go nuts, have fun, and thanks for tuning in!

 

Regards,

Doug

 

CC: @kierstenkollins@adamcnote@amyreilly, @sven-ix, and anyone who used my original version

-JC
Level 6
September 2, 2025

Hi @doug_den_hoed__atappstore , I tried to get this to work today but am running into a strange issue that I can't seem to figure out on my own. Any insight would be appreciated.

When I attempt to create a new project from a template that has a custom form with these fields on it, the fields are already populated with information in the project creation window - all relating to the project template being used to create the project. I'm assuming because of this, when I do actually create the project, the field then updates to incorrectly populate as being a copied project since the field wasn't blank upon project creation. Any thoughts about what I need to change?

 

 

 

Doug_Den_Hoed_AtAppStore
Community Advisor
Community Advisor
September 8, 2025

Hi @-jc,

 

I'm not quite sure I am following. The Project Genealogy form is a separate concept intended to reveal whether a project was created as an "Original" or a "Copy", but I didn't see that form in your screenshot.

 

Once you've added it, tried it, and observed the results, if you are then not seeing what you expected (e.g. it's incorrectly reporting a "Copy" as an "Original", or vice versa) and could provide some additional screenshots, I'd be happy to try to help resolve it.

 

Regards,

Doug

Laramie_Newborn
Level 2
April 8, 2026

@Doug_Den_Hoed_AtAppStore - I was hoping to use this as a tool to identify projects that were created via copying another vs projects that were created fresh from a template but am struggling to get this to return any expected results. 

  • If I copy a project without the Project Genealogy form, carryover all of the custom data, then add the Project Genealogy form afterwards, it says it’s an original.
  • If I add the Project Genealogy form to a template that already has pre-filled fields in a custom form, then create a new project using that template, it says it’s a copy
    • We do this pre-filling with a lot of our templates - if the template is for a print project, we have “print” automatically selected as the project type in a custom field)
  • I asked one of our users to send me some projects that were created via copying (multiple projects that are part of the same campaign so, the only thing that changed was the name of the project - custom data and documents were carried over) - I added the Project Genealogy form to them and all of them returned as original. 

Can you help me understand why this isn’t working for me or maybe explain the ideal use case for this custom form? It seems as though the only real way for me to use this with my use case would be to add the form to all of our active projects and then add it to every new project as they get created versus adding to templates by default?

Doug_Den_Hoed_AtAppStore
Community Advisor
Community Advisor
April 9, 2026

Hmm. Very interesting usecase, @Laramie_Newborn.

 

I’d not considered this technique from the (perfectly reasonable) Templates angle, but do understand the shortfalls you’re describing, and do appreciate why you seek to overcome them.

After some thought and some R&D, I am pleased to confirm that I have a new version that DOES now work with Templates, so will update it in the original posting above at my earliest opportunity.

 

Thanks for an excellent challenge, and for tagging me: until the search in the current version of AEL returns to its old functionality, I don’t expect to spend much time in it AEL since I now find it of very limited use...but do respond to direct tags.

 

Regards,

Doug

Doug_Den_Hoed_AtAppStore
Community Advisor
Community Advisor
April 9, 2026

Ehm...after spending a fair bit of time updating the original post above with my new Template version, ​@Laramie_Newborn, this new AEL user interface then failed to save, and I lost all my edits. Harrumph.

 

I will instead write them up locally, and would be happy to send you a copy if you’d email me at doug.denhoed@atappstore.com


Regards,

Doug