Changeset 2516


Ignore:
Timestamp:
03/23/22 18:45:58 (2 years ago)
Author:
nanardon
Message:

QueryFormat?: allow to deref attribute

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Objects.pm

    r2506 r2516  
    308308} 
    309309 
     310 
     311sub _deref_attribute { 
     312    my ( $self, $attribute ) = @_; 
     313 
     314    my ( $derefAttr, $target ) = $attribute =~ /([^.]+)(.*)?/; 
     315 
     316    my $name = $self->get_c_field( $derefAttr ) or return; 
     317 
     318    if ( $target ) { 
     319        my $Attr = $self->attribute( $derefAttr ); 
     320        if ( my $otype = $Attr->reference ) { 
     321            my @values; 
     322            foreach my $n ( ref $name ? @$name : $name ) { 
     323                my $obj = $self->base->get_object( $otype, $n ) or return; 
     324                my $res = $obj->_deref_attribute( $target ); 
     325                push(@values, grep { $_ } (ref $res ? @$res : $res)); 
     326            } 
     327            return scalar(@values) <= 1 ? $values[0] : \@values 
     328        } 
     329    } else { 
     330        return $name; 
     331    } 
     332 
     333} 
    310334 
    311335=head2 queryformat ($fmt) 
     
    333357                $val = $self->base->QFunc($1, $2); 
    334358            } else { 
    335                 $val = $self->get_c_field($2); 
     359                $val = $self->_deref_attribute($2); 
    336360            } 
    337361 
Note: See TracChangeset for help on using the changeset viewer.