You need to sign in to do that
Don't have an account?
Dan Albrecht 5
Impact analysis
Have a very seasoned org and doing impact analysis is sometimes hit or miss. Does anyone know of a tool (or can provide a code example for a .net application using the tooling API) that will analyze where a field is being used or referenced? This would allow us to pinpoint where to look or where other changes need to be made. Thanks in advance.
Is it a standard or a custom field for the impact analysis ?
For a custom field, we can have a quite precise answer (simulating the deletion of the field) but for the standard fields (impossible to delete), it is just often a search by name globablly (all the fields Name in the org) for the existing tools (not precise).
1) Deepfield: tooling api called from Apex
//Get formula fields where field is used
//Get apex classes where field is used
//Get layouts where field is used
https://github.com/regularcoder/deepfield/blob/master/classes/DeepFieldController.cls
String response = getHTTP('/services/data/v37.0/tooling/search/?q=FIND+{' + currentobject + '+AND+' + currentfield + '}+IN+ALL+FIELDS+RETURNING+ApexClass+(Name)');
=> so it is not precise because if a class just constains the words "ACCOUNT" and "NAME", we consider that the field ACOUNT.NAME is used by the class. That is necessary but not sufficient and all the tools are doing the same things
2) Salesforce Toolkit: http://sftoolkit.co/
Welcome to the Salesforce Toolkit! The tools and applications below provide assistance for common consulting processes and tasks - from diagnosing your org, comparing environments to activating and deactivating Salesforce components.
Salesforce Schema Lister: http://schemalister.herokuapp.com/
This tool uses the Salesforce Metadata API to build a list of objects, fields and field attributes from within your Salesforce Org.
None of your organisation information or data is captured or kept from running this tool.
Schema Lister is interesting but not enough accurate for the impact analysis (use the same algorithm as above).
3) Reading the exported metadata (xml files): I wrote many (huge) Xquery requests for my own needs.
4) Parsing all the code with the PDM parser. It is the way where I am going now but it is complicated (in progress as we said).
https://github.com/Up2Go/pmd/tree/master/pmd-apex
https://salesforce.stackexchange.com/questions/1003/grammar-for-creating-an-apex-parser
Robert Sösemann:(Germany, Stuttgart) Certified Platform Developer II, Creator of #PMD for Apex + #ApexMetrics
https://github.com/up2go-rsoesemann
He managed to parse the apex code without having the complete formal grammar (not published) using the included "official" parser of Salesforce from the Eclipse Force IDE (as a "black box").
I have already spent hours to understand how I can use this tool now but it is a very timeconsuming work and fortunately, there is already the Robert Sösemann's result.
Alain
Another interesting tool: sfdcCommander
https://github.com/jwiesel/sfdcCommander
"He" (anonymous project but that could be Jonas Wiesel (Switzerland) https://github.com/wieseljonas ) transforms almost all the xml files of the metadata with XSLT into HTML: https://github.com/jwiesel/sfdcCommander/tree/master/sfdcCommander/config/transformer
I prefer Xquery requests and the impressive BaseX tool (German): http://basex.org/about-us/
Dr. Christian Grün is member of the W3C XML Query Working Group. He contributes to the XQuery Full-Text Recommendation as Invited Expert.
With some "big" Xquery requests (for all the layouts with the translations French/English), I managed to "mix" almost all the main data of all the XML files of the exported metadata in the minute (1~45 seconds for each request) + primeUI widgets + bootstrap for a "nice" result.
https://github.com/forcedotcom/idecore/issues/167
https://github.com/vazexqi
Currently, I got almost "all" the variables and the raw SOQL queries parsing the Apex code (basic parsing with the apex-jorge) but I have abandoned this work.
Officially, we should only use the symbol tables :
Use symbol tables instead of building a parser or compiler.
Symbol tables allow you to do symbol highlighting, code navigation, code completion, symbol searches, and more.
A symbol table can’t be created if the content referenced by the ContentEntityId field doesn’t use a symbol table.
Compiler errors for the last deployment of the MetadataContainer in the MetadataContainerId field also prevent a symbol table from being created.
https://developer.salesforce.com/docs/atlas.en-us.api_tooling.meta/api_tooling/tooling_api_objects_symboltable.htm
But there are "only" the interfaces, the signatures of the methods and constructors and the class variables. I don't think you can get the used SOQL queries and above all their fields with the symbol tables (must be confirmed).