Extract field definitions from object.xml
The other department asked: can I have a csv list of fields with Name,Type,length from Salesforce. The only source they have are the object.xml files from a meta data API export
Some counting required
The object.xml file contains size information for text files only. For date and numbers that's not an issue. The sticky part are pick lists and multi select pick lists.
A little XSLT goes a long way. The magic is in the expression max((s:valueSet/s:valueSetDefinition/s:value/s:fullName/string-length()))
For your enjoyment, the full style sheet:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
xmlns:s="http://soap.sforce.com/2006/04/metadata"
exclude-result-prefixes="xs xd"
version="2.0">
<xsl:output method="text" encoding="UTF-8" />
<xsl:template match="/">
name,type,length
<xsl:apply-templates select="/s:CustomObject/s:fields" />
</xsl:template>
<xsl:template match="s:fields">
<xsl:value-of select="s:fullName"/>,<xsl:value-of select="s:type"/>,<xsl:value-of select="s:length"/>
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="s:fields[s:type='MultiselectPicklist']">
<xsl:value-of select="s:fullName"/>,<xsl:value-of select="s:type"/>,<xsl:value-of select="sum((s:valueSet/s:valueSetDefinition/s:value/s:fullName/string-length()))+count(s:valueSet/s:valueSetDefinition/s:value/s:fullName)" />
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="s:fields[s:type='Picklist']">
<xsl:value-of select="s:fullName"/>,<xsl:value-of select="s:type"/>,<xsl:value-of select="max((s:valueSet/s:valueSetDefinition/s:value/s:fullName/string-length()))" />
<xsl:text>
</xsl:text>
</xsl:template>
<!-- stuff without use -->
<xsl:template match="s:fields[s:formula]" />
<xsl:template match="s:fields[not(s:type)]" />
<xsl:template match="s:fields[s:type='Picklist' and not(s:valueSet)]" />
</xsl:stylesheet>
One of the little stumbling blocks: a namespace for http://soap.sforce.com/2006/04/metadata
is required.
As usual: YMMV
Posted by Stephan H Wissel on 29 March 2019 | Comments (0) | categories: Salesforce