28  setFlags( 
flags() | QgsFieldFormatter::CanProvideAvailableValues );
 
 
   33  return QStringLiteral( 
"RelationReference" );
 
 
   38  if ( cache.isValid() )
 
   40    return cache.value<QMap<QVariant, QString>>().value( value );
 
   43  const QString fieldName = fieldIndex < layer->
fields().
size() ? layer->
fields().
at( fieldIndex ).
name() : QObject::tr( 
"<unknown>" );
 
   46  if ( !config.contains( QStringLiteral( 
"Relation" ) ) )
 
   49    return value.toString();
 
   52  const QString relationName = config[QStringLiteral( 
"Relation" )].toString();
 
   57    return value.toString();
 
   60  if ( layer != referencingLayer )
 
   62    QgsMessageLog::logMessage( QObject::tr( 
"Layer %1, field %2: representValue() with inconsistent layer parameter w.r.t relation referencingLayer" ).arg( layer->
name(), fieldName ) );
 
   63    return value.toString();
 
   66  if ( referencingFieldIdx != fieldIndex )
 
   68    QgsMessageLog::logMessage( QObject::tr( 
"Layer %1, field %2: representValue() with inconsistent fieldIndex parameter w.r.t relation referencingFieldIdx" ).arg( layer->
name(), fieldName ) );
 
   69    return value.toString();
 
   72  if ( !referencedLayer )
 
   75    return value.toString();
 
   81  attrs[ referencingFieldIdx ] = value;
 
   87    return value.toString();
 
   92  QString title = expr.
evaluate( &context ).toString();
 
   96    title = feature.
attribute( referencedFieldIdx ).toString();
 
 
  108  Q_UNUSED( fieldIndex )
 
  109  QMap<QVariant, QString> cache;
 
  111  const QString fieldName = fieldIndex < layer->
fields().
size() ? layer->
fields().
at( fieldIndex ).
name() : QObject::tr( 
"<unknown>" );
 
  114  if ( !config.contains( QStringLiteral( 
"Relation" ) ) )
 
  119  const QString relationName = config[QStringLiteral( 
"Relation" )].toString();
 
  127  if ( layer != referencingLayer )
 
  129    QgsMessageLog::logMessage( QObject::tr( 
"Layer %1, field %2: representValue() with inconsistent layer parameter w.r.t relation referencingLayer" ).arg( layer->
name(), fieldName ) );
 
  133  if ( !referencedLayer )
 
  140  if ( referencedFieldIdx == -1 )
 
  151  requiredAttributes << referencedFieldIdx;
 
  154  auto iterator = referencedLayer->
getFeatures( request );
 
  160  while ( iterator.nextFeature( feature ) )
 
  163    QString title = expr.
evaluate( &context ).toString();
 
  167      title = feature.
attribute( referencedFieldIdx ).toString();
 
  170    cache.insert( feature.
attribute( referencedFieldIdx ), title );
 
  173  return QVariant::fromValue<QMap<QVariant, QString>>( cache );
 
 
  182  if ( config.value( QStringLiteral( 
"ReferencedLayerId" ) ).toString().isEmpty() )
 
  187  const QList<QgsVectorLayerRef> result {{
 
  189        config.value( QStringLiteral( 
"ReferencedLayerId" ) ).toString(),
 
  190        config.value( QStringLiteral( 
"ReferencedLayerName" ) ).toString(),
 
  191        config.value( QStringLiteral( 
"ReferencedLayerDataSource" ) ).toString(),
 
  192        config.value( QStringLiteral( 
"ReferencedLayerProviderKey" ) ).toString() )
 
 
  200  if ( 
auto *lProject = context.
project() )
 
  202    const QgsVectorLayer *referencedLayer = lProject->relationManager()->relation( config[QStringLiteral( 
"Relation" )].toString() ).referencedLayer();
 
  203    if ( referencedLayer )
 
  205      const int fieldIndex =  lProject->relationManager()->relation( config[QStringLiteral( 
"Relation" )].toString() ).referencedFields().first();
 
  206      values = qgis::setToList( referencedLayer->
uniqueValues( fieldIndex, countLimit ) );
 
 
@ NoGeometry
Geometry is not required. It may still be returned if e.g. required for a filter condition.
 
static QList< QgsExpressionContextScope * > globalProjectLayerScopes(const QgsMapLayer *layer)
Creates a list of three scopes: global, layer's project and layer.
 
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
 
void setFeature(const QgsFeature &feature)
Convenience function for setting a feature for the context.
 
Handles parsing and evaluation of expressions (formerly called "search strings").
 
bool prepare(const QgsExpressionContext *context)
Gets the expression ready for evaluation - find out column indexes.
 
bool hasEvalError() const
Returns true if an error occurred when evaluating last input.
 
QVariant evaluate()
Evaluate the feature and return the result.
 
QSet< int > referencedAttributeIndexes(const QgsFields &fields) const
Returns a list of field name indexes obtained from the provided fields.
 
bool nextFeature(QgsFeature &f)
Fetch next feature and stores in f, returns true on success.
 
Wraps a request for features to a vector layer (or directly its vector data provider).
 
QgsFeatureRequest & setFlags(Qgis::FeatureRequestFlags flags)
Sets flags that affect how features will be fetched.
 
QgsFeatureRequest & setSubsetOfAttributes(const QgsAttributeList &attrs)
Set a subset of attributes that will be fetched.
 
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
 
bool isValid() const
Returns the validity of this feature.
 
Q_INVOKABLE QVariant attribute(const QString &name) const
Lookup attribute value by attribute name.
 
A context for field formatter containing information like the project.
 
QgsProject * project() const
Returns the project used in field formatter.
 
int size() const
Returns number of items.
 
QgsField at(int i) const
Returns the field at particular index (must be in range 0..N-1).
 
Q_INVOKABLE int lookupField(const QString &fieldName) const
Looks up field's index from the field name.
 
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::MessageLevel::Warning, bool notifyUser=true, const char *file=__builtin_FILE(), const char *function=__builtin_FUNCTION(), int line=__builtin_LINE())
Adds a message to the log instance (and creates it if necessary).
 
QgsRelationManager * relationManager
 
static QgsProject * instance()
Returns the QgsProject singleton instance.
 
Q_INVOKABLE QgsRelation relation(const QString &id) const
Gets access to a relation by its id.
 
Represents a relationship between two vector layers.
 
QgsFeatureRequest getReferencedFeatureRequest(const QgsAttributes &attributes) const
Creates a request to return the feature on the referenced (parent) layer which is referenced by the p...
 
QgsVectorLayer * referencedLayer
 
QList< QgsRelation::FieldPair > fieldPairs() const
Returns the field pairs which form this relation The first element of each pair are the field names o...
 
QgsVectorLayer * referencingLayer
 
Represents a vector layer which manages a vector based dataset.
 
QgsFeatureIterator getFeatures(const QgsFeatureRequest &request=QgsFeatureRequest()) const FINAL
Queries the layer for features specified in request.
 
QString displayExpression
 
QSet< QVariant > uniqueValues(int fieldIndex, int limit=-1) const FINAL
Calculates a list of unique values contained within an attribute in the layer.
 
QList< int > QgsAttributeList
 
_LayerRef< QgsVectorLayer > QgsVectorLayerRef