Identifying Customized List Forms Using the Lightning Conductor

Learn how to identify customized list forms efficiently using the Lightning Conductor in this guide.


You might need to identify the lists in your environment that have been customized with Lightning Forms. One way to do so is to identify the mFormsStore libraries in the environment, as every site with a list customized with Lightning Forms has a hidden mFormsStore library where the customizations are stored. 

In the customization folder in this library, you will find JSON files with GUIDs corresponding with the GUID of the list that has a customized form. For instance, if one of your sites is called TestSite, you can open the mFormsStoreLibrary by appending the library name to the site URL. For https://demo.sharepoint.com/sites/TestSite, you paste "https://demo.sharepoint.com/sites/TestSite/mFormsStoreLibrary" to open the hidden library.

As long as a site has a hidden mFormsStore library, it most likely has at least one list/library form that has been customized at some point.

This is primarily a manual process, and if you have multiple sites where Lightning Forms has been used to customize list forms, it might take a while to complete this task. Using the Lightning Conductor makes aggregating this list information from across your SharePoint environment much easier. 

With the Object Model Data Source Provider of the Lightning Conductor, you can select “Show Items from Current Tenant”, filter to "List Title = mFormsStoreLibrary"






 


Select the columns.
 



 


And group by the Parent Web Title.
 



 


This configuration will display the customized list GUIDs grouped by their parent web title (the site they are in).



You can go a step further by creating a Lightning Conductor calculated column with the expression below to show the names of the lists with the provided GUIDs. It is worth noting that this expression depends on SharePoint Search to find the list name from the list ID, and it may not give the list name in some instances based on the search index.





 

new Promise(function (resolve, reject) {
   var listId=[FileLeafRef];
   if(listId.endsWith('json')){
       listId=listId.split('_')[0];
   } else {
       resolve('');
       return;
   }

   if (!window["_lt_lcwpRetrievedListTitles"]) {
       window["_lt_lcwpRetrievedListTitles"] = {};
       window["_lt_lcwpRetrievedListTitlesCallbacks"] = {};
   }
   var listKey = [_lt_ParentWebURL] + "^" + listId;
   var result = window["_lt_lcwpRetrievedListTitles"]["" + listKey];
   if (result) {
       resolve(result);
   } else {
       if (result === null) {
           window["_lt_lcwpRetrievedListTitlesCallbacks"]["" + listKey].push(function (error) {
               if (error) {
                   reject(error);
                   return;
               }
               result = window["_lt_lcwpRetrievedListTitles"]["" + listKey];
               resolve(result);
           });
       } else {
           window["_lt_lcwpRetrievedListTitlesCallbacks"]["" + listKey] = [];
           window["_lt_lcwpRetrievedListTitles"]["" + listKey] = null;
           Context.ltRequestExecutor.executeRestRequest([_lt_ParentWebURL] + '/_api/search/query?selectproperties=\'Title\'&querytext=\'contentclass:STS_List AND (NOT contentclass:STS_ListItem) AND ListId:'+listId+'\'', true)
               .then(function (response) {
                   response.json()
                       .then(function (body) {
                           if (body.error) {
                               window["_lt_lcwpRetrievedListTitlesCallbacks"]["" + listKey].forEach(function (callback) { callback(body.error.message); });
                               delete window["_lt_lcwpRetrievedListTitles"]["" + listKey];
                               reject(body.error.message);
                               return;
                           }
                         var title='';
                         try{
                               var row=body.PrimaryQueryResult.RelevantResults.Table.Rows[0];
                               row.Cells.some(function(c){if(c.Key=='Title'){title=c.Value;return true;}return false;});
                           } catch{}
                           result = window["_lt_lcwpRetrievedListTitles"]["" + listKey] = title;
                           window["_lt_lcwpRetrievedListTitlesCallbacks"]["" + listKey].forEach(function (callback) { callback(); });
                           resolve(result);
                       })
                       .catch(function (error) {
                           window["_lt_lcwpRetrievedListTitlesCallbacks"]["" + listKey].forEach(function (callback) { callback(error); });
                           delete window["_lt_lcwpRetrievedListTitles"]["" + listKey];
                           reject(error);
                       })
               })
               .catch(function (error) {
                   window["_lt_lcwpRetrievedListTitlesCallbacks"]["" + listKey].forEach(function (callback) { callback(error); });
                   delete window["_lt_lcwpRetrievedListTitles"]["" + listKey];
                   reject(error);
               });
       }
   }
})

 

 

 

 

 

Was this article helpful?

Can’t find what you’re looking for?

Our world-class Customer Success team is here for you.

Contact Support