@@ -97,25 +97,34 @@ QgsAfsProvider::QgsAfsProvider( const QString &uri )
97
97
Q_NOWARN_DEPRECATED_POP
98
98
}
99
99
100
+ QString objectIdFieldName;
101
+
100
102
// Read fields
101
103
foreach ( const QVariant &fieldData, layerData[" fields" ].toList () )
102
104
{
103
105
const QVariantMap fieldDataMap = fieldData.toMap ();
104
106
const QString fieldName = fieldDataMap[QStringLiteral ( " name" )].toString ();
105
- QVariant::Type type = QgsArcGisRestUtils::mapEsriFieldType ( fieldDataMap[QStringLiteral ( " type" )].toString () );
106
- if ( fieldName == QLatin1String ( " geometry" ) || fieldDataMap[QStringLiteral ( " type" )].toString () == QLatin1String ( " esriFieldTypeGeometry" ) )
107
+ const QString fieldTypeString = fieldDataMap[QStringLiteral ( " type" )].toString ();
108
+ QVariant::Type type = QgsArcGisRestUtils::mapEsriFieldType ( fieldTypeString );
109
+ if ( fieldName == QLatin1String ( " geometry" ) || fieldTypeString == QLatin1String ( " esriFieldTypeGeometry" ) )
107
110
{
108
111
// skip geometry field
109
112
continue ;
110
113
}
114
+ if ( fieldTypeString == QLatin1String ( " esriFieldTypeOID" ) )
115
+ {
116
+ objectIdFieldName = fieldName;
117
+ }
111
118
if ( type == QVariant::Invalid )
112
119
{
113
- QgsDebugMsg ( QString ( " Skipping unsupported field %1 of type %2" ).arg ( fieldName, fieldDataMap[ QStringLiteral ( " type " )]. toString () ) );
120
+ QgsDebugMsg ( QString ( " Skipping unsupported field %1 of type %2" ).arg ( fieldName, fieldTypeString ) );
114
121
continue ;
115
122
}
116
123
QgsField field ( fieldName, type, fieldDataMap[QStringLiteral ( " type" )].toString (), fieldDataMap[QStringLiteral ( " length" )].toInt () );
117
124
mSharedData ->mFields .append ( field );
118
125
}
126
+ if ( objectIdFieldName.isEmpty () )
127
+ objectIdFieldName = QStringLiteral ( " objectid" );
119
128
120
129
// Determine geometry type
121
130
bool hasM = layerData[QStringLiteral ( " hasM" )].toBool ();
@@ -131,7 +140,7 @@ QgsAfsProvider::QgsAfsProvider( const QString &uri )
131
140
// Read OBJECTIDs of all features: these may not be a continuous sequence,
132
141
// and we need to store these to iterate through the features. This query
133
142
// also returns the name of the ObjectID field.
134
- QVariantMap objectIdData = QgsArcGisRestUtils::getObjectIds ( mSharedData ->mDataSource .param ( QStringLiteral ( " url" ) ), errorTitle, errorMessage );
143
+ QVariantMap objectIdData = QgsArcGisRestUtils::getObjectIds ( mSharedData ->mDataSource .param ( QStringLiteral ( " url" ) ), objectIdFieldName, errorTitle, errorMessage );
135
144
if ( objectIdData.isEmpty () )
136
145
{
137
146
appendError ( QgsErrorMessage ( tr ( " getObjectIds failed: %1 - %2" ).arg ( errorTitle, errorMessage ), QStringLiteral ( " AFSProvider" ) ) );
@@ -142,7 +151,7 @@ QgsAfsProvider::QgsAfsProvider( const QString &uri )
142
151
appendError ( QgsErrorMessage ( tr ( " Failed to determine objectIdFieldName and/or objectIds" ), QStringLiteral ( " AFSProvider" ) ) );
143
152
return ;
144
153
}
145
- QString objectIdFieldName = objectIdData[QStringLiteral ( " objectIdFieldName" )].toString ();
154
+ objectIdFieldName = objectIdData[QStringLiteral ( " objectIdFieldName" )].toString ();
146
155
for ( int idx = 0 , nIdx = mSharedData ->mFields .count (); idx < nIdx; ++idx )
147
156
{
148
157
if ( mSharedData ->mFields .at ( idx ).name () == objectIdFieldName )
0 commit comments