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: