Starting TaroWorks 7.5.X, you can use the Object/Field Dependencies in TaroWorks Tab to view how data is mapped and related across Forms, Jobs and TaroWorks Objects.
- Go to App Launcher and search Object/Field Dependencies in TaroWorks.
- Click to view the data dependencies. This displays a table with all TaroWorks Form/Job dependencies, including:
- Question Field Mappings that reference a particular Object in the TaroWorks Forms.
- Form Task Mappings as set in the Drill Down Hierarchy in the TaroWorks Job.
- View Data Mappings as set in the Drill Down Hierarchy in the TaroWorks Job.
- Question Field Mappings that reference a particular Object in the TaroWorks Forms.
Notes:
- A row shows up in the Dependencies Report if:
- It’s used for field mapping in the Forms.
- It’s used in a Drill Down Hierarchy that a Task Mapping references in a TaroWorks Job.
- It’s used in a Job Drill Down Hierarchy that a View Data task references in a TaroWorks Job.
- Fields only visible in the Drill Down Hierarchy do not show up in the Dependencies report.
Troubleshooting:
If there are very many Forms/Jobs dependencies that return more than 50,000 rows, it might cause a crash on the Object/Field Dependencies in TaroWorks View, resulting in a blank view.
The workaround is to execute a script that will send a CSV-formatted report to the email address of the user running the script.
- Go to Setup>Developer Console.
- Click Debug>Open Execute Anonymous.
Copy and paste the following script.
/*/TAROWORKS #DEPENDENCY #SCRIPT ALL JOBS AND FORMS*/ /**** * Helper Functions/Classes ****/ public class DDHItem{ public String objectName; public String objectId; public List<String> listFields; public List<String> detailFields; } public class DDHArray{ public List<List<DDHItem>> DDHItems; } public class TaskMapping { public String objectId; public String field; } public class TaskMappingArray{ public List<TaskMapping> taskMappings; } public class DisplayResult { public String JobName; public String JobStatus; // Add this public String FormName; public String FormStatus; // And this public String ObjectName; public String FieldName; public String Type; } public List<TaskMapping> extractTaskMapping(gfsurveys__TaskTemplate__c taskTemplate) { List<TaskMapping> toReturn = new List<TaskMapping>(); String jsonString = taskTemplate.gfsurveys__Mapping__c; if (jsonString == '[]') return toReturn; //Format the JSON better (is an array instead of an object) jsonString = '{"taskMappings":' + jsonString + '}'; TaskMappingArray taskMappingDeserial = (TaskMappingArray) JSON.deserialize(jsonString, TaskMappingArray.class); for (TaskMapping thisMapping : taskMappingDeserial.taskMappings) { toReturn.add(thisMapping); } return toReturn; } public List<DDHItem> extractObjectFromDDH(gfsurveys__TaskTemplate__c taskTemplate) { List<DDHItem> toReturn = new List<DDHItem>(); String jsonString = taskTemplate.gfsurveys__JobTemplate__r.gfsurveys__Hierarchy__c; if (jsonString == '[]') return toReturn; //Format the JSON better (is an array instead of an object) jsonString = '{"DDHItems":' + jsonString + '}'; //Deserialize the JSON DDHArray ddhDeserial = (DDHArray) JSON.deserialize(jsonString, DDHArray.class); //Iterate through the DDHItems for (List<DDHItem> allItems: ddhDeserial.DDHItems) { for (DDHItem item: allItems) { toReturn.add(item); } } //Set the new list of items return toReturn; } /************************************************************************************************ * Query Data ************************************************************************************************/ List<DisplayResult> allDependencies = new List<DisplayResult>(); //Three parts to query: //1. Question Mappings that reference a particular object (Field Mappings in the Form) List<AggregateResult> questionMappingResults = [ SELECT gfsurveys__SurveyMapping__r.gfsurveys__Survey__r.Name, gfsurveys__SurveyMapping__r.gfsurveys__ObjectApiName__c, gfsurveys__FieldApiName__c FROM gfsurveys__QuestionMapping__c //WHERE gfsurveys__SurveyMapping__r.gfsurveys__Survey__r.gfsurveys__Status__c = 'Published' GROUP BY gfsurveys__SurveyMapping__r.gfsurveys__ObjectApiName__c, gfsurveys__SurveyMapping__r.gfsurveys__Survey__r.Name, gfsurveys__FieldApiName__c]; for(AggregateResult ar : questionMappingResults){ DisplayResult fieldMapping = new DisplayResult(); fieldMapping.JobName = ''; fieldMapping.FormName = (String) ar.get('Name'); fieldMapping.ObjectName = (String) ar.get('gfsurveys__ObjectApiName__c'); fieldMapping.FieldName = (String) ar.get('gfsurveys__FieldApiName__c'); fieldMapping.Type = 'Field Mapping'; fieldMapping.JobStatus = ''; fieldMapping.FormStatus = ''; allDependencies.add(fieldMapping); } //2. Form Task Mappings (set in the DDH/Job Page) List<gfsurveys__TaskTemplate__c> formFieldMappingResults = [ SELECT gfsurveys__JobTemplate__r.Name, gfsurveys__JobTemplate__r.gfsurveys__Status__c, gfsurveys__JobTemplate__r.gfsurveys__Hierarchy__c, gfsurveys__Form__r.gfsurveys__Survey__r.Name, gfsurveys__Form__r.gfsurveys__Survey__r.gfsurveys__Status__c, gfsurveys__Mapping__c, gfsurveys__Object__c, gfsurveys__Type__c FROM gfsurveys__TaskTemplate__c WHERE gfsurveys__Type__c = 'form' //AND gfsurveys__JobTemplate__r.gfsurveys__Status__c = 'Published' ]; for(gfsurveys__TaskTemplate__c taskTemplate : formFieldMappingResults){ List<DDHItem> allDDHObjs = extractObjectFromDDH(taskTemplate); List<TaskMapping> allTaskMappings = extractTaskMapping(taskTemplate); for (TaskMapping thisTaskMapping: allTaskMappings) { for(DDHItem thisDDHItem : allDDHObjs){ if (thisDDHItem.objectId == thisTaskMapping.objectId) { DisplayResult fieldMapping = new DisplayResult(); fieldMapping.JobName = taskTemplate.gfsurveys__JobTemplate__r.Name; fieldMapping.FormName = taskTemplate.gfsurveys__Form__r.gfsurveys__Survey__r.Name; fieldMapping.JobStatus = taskTemplate.gfsurveys__JobTemplate__r.gfsurveys__Status__c; fieldMapping.FormStatus = taskTemplate.gfsurveys__Form__r.gfsurveys__Survey__r.gfsurveys__Status__c; fieldMapping.ObjectName = thisDDHItem.objectName; fieldMapping.FieldName = thisTaskMapping.field; fieldMapping.Type = 'Task Mapping'; allDependencies.add(fieldMapping); } } } } //3. View Data Mappings (set in the DDH/Job Page) List<gfsurveys__TaskTemplate__c> viewDataMappingResults = [ SELECT gfsurveys__JobTemplate__r.Name, gfsurveys__JobTemplate__r.gfsurveys__Status__c, gfsurveys__JobTemplate__r.gfsurveys__Hierarchy__c, gfsurveys__Object__c, gfsurveys__Type__c FROM gfsurveys__TaskTemplate__c WHERE gfsurveys__Type__c = 'data-view' //AND gfsurveys__JobTemplate__r.gfsurveys__Status__c = 'Published' ]; for(gfsurveys__TaskTemplate__c taskTemplate : viewDataMappingResults){ List<DDHItem> allDDHObjs = extractObjectFromDDH(taskTemplate); for(DDHItem thisDDHItem : allDDHObjs){ if (thisDDHItem.objectId == taskTemplate.gfsurveys__Object__c) { Set<String> allFields = new Set<String>(); allFields.addAll(thisDDHItem.listFields); allFields.addAll(thisDDHItem.detailFields); for(String fieldName : allFields) { DisplayResult fieldMapping = new DisplayResult(); fieldMapping.JobName = taskTemplate.gfsurveys__JobTemplate__r.Name; fieldMapping.JobStatus = taskTemplate.gfsurveys__JobTemplate__r.gfsurveys__Status__c; fieldMapping.FormStatus = ''; fieldMapping.FormName = ''; fieldMapping.ObjectName = thisDDHItem.objectName; fieldMapping.FieldName = fieldName; fieldMapping.Type = 'View Data'; allDependencies.add(fieldMapping); } } } } /************************************************************************************************ * Display Results ************************************************************************************************/ public class DisplayResultSorter implements Comparator<DisplayResult> { public Integer compare(DisplayResult a, DisplayResult b) { Integer jobCompare = a.JobName.toLowerCase().compareTo(b.JobName.toLowerCase()); if (jobCompare != 0) return jobCompare; return a.ObjectName.toLowerCase().compareTo(b.ObjectName.toLowerCase()); } } // Display Results allDependencies.sort(new DisplayResultSorter()); String csvContent = 'Type,JobName,JobStatus,FormName,FormStatus,ObjectName,FieldName\n'; for(DisplayResult singleResult : allDependencies){ csvContent += '"' + singleResult.Type + '",' + '"' + singleResult.JobName + '",' + '"' + singleResult.JobStatus + '",' + '"' + singleResult.FormName + '",' + '"' + singleResult.FormStatus + '",' + '"' + singleResult.ObjectName + '",' + '"' + singleResult.FieldName + '"\n'; } // Send CSV by email to tarowoks Blob csvBlob = Blob.valueOf(csvContent); String companyName = [SELECT Name FROM Organization LIMIT 1].Name; String fileName = 'Published Jobs & Forms TaroWorks Dependency Report - ' + companyName + '.csv'; Messaging.EmailFileAttachment attachment = new Messaging.EmailFileAttachment(); attachment.setFileName(fileName); attachment.setBody(Blob.valueOf(csvContent)); attachment.setContentType('text/csv'); Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); mail.setToAddresses(new String[] { UserInfo.getUserEmail()}); // ← Updated recipient mail.setSubject('TaroWorks Dependency Report - ' + companyName); mail.setPlainTextBody('Please find the attached dependency report'); mail.setFileAttachments(new Messaging.EmailFileAttachment[] { attachment }); Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });- Click Execute.
Comments
0 comments
Please sign in to leave a comment.