# Generate a list of overridden resouces

**URL:** <https://forum.inductiveautomation.com/t/generate-a-list-of-overridden-resouces/53891>\
**Category:** Ignition\
**Tags:** perspective\
**Created:** [December 8, 2021, 3:30pm UTC](https://forum.inductiveautomation.com/t/generate-a-list-of-overridden-resouces/53891 "2021-12-08T15:30:11Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![aklein1](https://avatars.discourse-cdn.com/v4/letter/a/f05b48/32.png) [@aklein1](https://forum.inductiveautomation.com/u/aklein1)\
**Post date:** [December 8, 2021, 3:30pm UTC](https://forum.inductiveautomation.com/t/generate-a-list-of-overridden-resouces/53891/1 "2021-12-08T15:30:11Z")

</div>

I would like to generate a list of overridden resources in a child project. Is it possible to access a property of a perspective resource (or script resource) that lets you know it has been overridden from a global project?

---

<div class="post-metadata">

**Author:** ![victordcq](https://avatars.discourse-cdn.com/v4/letter/v/f6c823/32.png) [@victordcq](https://forum.inductiveautomation.com/u/victordcq)\
**Post date:** [December 8, 2021, 3:38pm UTC](https://forum.inductiveautomation.com/t/generate-a-list-of-overridden-resouces/53891/2 "2021-12-08T15:38:50Z")

</div>

i suppose you could compare the resource files  
of the master project and the inhereted one…

why would you want to do this tho?

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [December 8, 2021, 3:47pm UTC](https://forum.inductiveautomation.com/t/generate-a-list-of-overridden-resouces/53891/3 "2021-12-08T15:47:15Z")

</div>

Within the context of the designer this would be possible (with some doing); I’d recommend a custom module, but it’s technically doable from scripting.

In any other scope (a running Perspective session, a Vision client) this isn’t feasible to extract.

[`DesignableProject`](https://files.inductiveautomation.com/sdk/javadoc/ignition81/8.1.12/com/inductiveautomation/ignition/designer/project/DesignableProject.html#isOverridden(com.inductiveautomation.ignition.common.project.resource.ResourcePath)) has a variety of useful helper methods for you.

---

<div class="post-metadata">

**Author:** ![victordcq](https://avatars.discourse-cdn.com/v4/letter/v/f6c823/32.png) [@victordcq](https://forum.inductiveautomation.com/u/victordcq)\
**Post date:** [December 8, 2021, 4:03pm UTC](https://forum.inductiveautomation.com/t/generate-a-list-of-overridden-resouces/53891/4 "2021-12-08T16:03:49Z")

</div>

you can compare the resources of the master with the inhereted project. views not in the inherited project mean they are not altered…  
its not ideal tho.

here is some inspiration of script to check the views

```auto
	from com.inductiveautomation.ignition.gateway import IgnitionGateway			
	context = IgnitionGateway.get()	
	pathToProjectFolder = str(context.systemManager.dataDir.absoluteFile).replace('\\','/') + '/projects'	
	pathToProjectViews = pathToProjectFolder + "/" + system.perspective.getProjectInfo().name + "/com.inductiveautomation.perspective/views/"
	pathToMasterViews = pathToProjectFolder + "/" + "MastersNamehere" + "/com.inductiveautomation.perspective/views/"
	
	import os
	
	def listViewFiles(path):
	    files = []
	    for dirName, subdirList, fileList in os.walk(path):
	        dir = dirName.replace(path, '')
	        for fname in fileList:
	        	if fname == "view.json":
					files.append(os.path.join(dir, fname))
	    return files
	
	ProjectFiles = listViewFiles(pathToProjectViews)
	MasterFiles = listViewFiles(pathToMasterViews)
	return [filename for filename in MasterFiles if filename not in ProjectFiles]

```

last line could be this i gtg xd  
`return [filename for filename in ProjectFilesif filename not in MasterFiles]`

---

<div class="post-metadata">

**Author:** ![lrose](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/lrose/32/62724_2.png) [@lrose](https://forum.inductiveautomation.com/u/lrose)\
**Post date:** [December 8, 2021, 7:03pm UTC](https://forum.inductiveautomation.com/t/generate-a-list-of-overridden-resouces/53891/5 "2021-12-08T19:03:59Z")

</div>

> [@victordcq](#):
>
> return [filename for filename in ProjectFilesif filename not in MasterFiles]

missing a fairly important space.

---

<div class="post-metadata">

**Author:** ![aklein1](https://avatars.discourse-cdn.com/v4/letter/a/f05b48/32.png) [@aklein1](https://forum.inductiveautomation.com/u/aklein1)\
**Post date:** [December 8, 2021, 8:03pm UTC](https://forum.inductiveautomation.com/t/generate-a-list-of-overridden-resouces/53891/6 "2021-12-08T20:03:13Z")

</div>

@victordcq we have a master application being deployed to all of our sites and it handles 90% of what is covered at the sites. However there is a level of uniqueness at each site, so we have a local project inheriting the master project at the site level and we can override a resource for that specific site. What we want to be able to do is identify common overrides at the site level to then pull into the master app. So generating a list of overrides at each sites would give us a jumping off point to make those decisions without having to track down every change in the designer.

Thank you for the script! It follows where my initial thoughts on the matter were going.

@paul-griffith thank you for that, I wasnt aware of designableproject, there is a lot of good stuff in there!

---

<div class="post-metadata">

**Author:** ![victordcq](https://avatars.discourse-cdn.com/v4/letter/v/f6c823/32.png) [@victordcq](https://forum.inductiveautomation.com/u/victordcq)\
**Post date:** [December 9, 2021, 7:27am UTC](https://forum.inductiveautomation.com/t/generate-a-list-of-overridden-resouces/53891/7 "2021-12-09T07:27:52Z")

</div>

ups yea i did not test the script i had no time and nothing set up in my test enviroment to test it on

@aklein1  
interesting^^ Merging stuff is always a good idea
