After updating the Metadata API to v29.0 from v28.0 I started getting the following SGEN compilation errors:
- Error 25 Unable to generate a temporary class (result=1). D:\...\SGEN
- Error 26 Cannot convert type 'XYZ.SalesforceMetadata.QuickActionLayoutItem[]' to 'XYZ.SalesforceMetadata.QuickActionLayoutItem' D:\...\SGEN
- Error 27 Cannot convert type 'XYZ.SalesforceMetadata.QuickActionLayoutItem[]' to 'XYZ.SalesforceMetadata.QuickActionLayoutItem' D:\...\SGEN
The QuickActionLayoutItem complexType from the v29.0 wsdl:
<xsd:complexType name="QuickActionLayout"> <xsd:sequence> <xsd:element name="layoutSectionStyle" type="tns:LayoutSectionStyle"/> <xsd:element name="quickActionLayoutColumns" minOccurs="0" maxOccurs="unbounded" type="tns:QuickActionLayoutColumn"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="QuickActionLayoutColumn"> <xsd:sequence> <xsd:element name="quickActionLayoutItems" minOccurs="0" maxOccurs="unbounded" type="tns:QuickActionLayoutItem"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="QuickActionLayoutItem"> <xsd:sequence> <xsd:element name="emptySpace" minOccurs="0" type="xsd:boolean"/> <xsd:element name="field" minOccurs="0" type="xsd:string"/> <xsd:element name="uiBehavior" minOccurs="0" type="tns:UiBehavior"/> </xsd:sequence> </xsd:complexType>
The problem appears in the generated Reference.cs with the quickActionLayoutColumns multidimensional array return type.
///[System.Xml.Serialization.XmlArrayItemAttribute("quickActionLayoutItems", typeof(QuickActionLayoutItem), IsNullable=false)] public QuickActionLayoutItem[][] quickActionLayoutColumns { get { return this.quickActionLayoutColumnsField; } set { this.quickActionLayoutColumnsField = value; } }
The XmlArrayItemAttribute typeof(QuickActionLayoutItem)
should be typeof(QuickActionLayoutItem[])
. After changing this manually the web reference compiled again.
///[System.Xml.Serialization.XmlArrayItemAttribute("quickActionLayoutItems", typeof(QuickActionLayoutItem[]), IsNullable=false)] public QuickActionLayoutItem[][] quickActionLayoutColumns { get { return this.quickActionLayoutColumnsField; } set { this.quickActionLayoutColumnsField = value; } }
See also: