Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 3af71f2e

Von Sven Schöling vor etwa 15 Jahren hinzugefügt

  • ID 3af71f2e27419024b28a2ff65e8b4d7cf499035d
  • Vorgänger d5f7b8ed
  • Nachfolger 5b2980ad

Transitive RecordLinks mit get_links_via.

get_links_via erwartet den zusätzlichen parameter via via ist ein
hashref mit den jeweils optionalen einträgen table und id, die sich
genauso verhalten wie die from/to_table/id werte der get_links funktion.

Alternativ kann via auch ein Array dieser Hashes sein:

get_links_via(
from_table => 'oe',
from_id => 1,
to_table => 'ar',
via => {
table => 'delivery_orders'
},
)
get_links_via(
from_table => 'oe',
to_id => '14',
via => [ { id => 12 }, { id => 13},
],
)

Die Einträge in einem via-Array werden exakt in dieser Reihenfolge
benutzt und sind nicht optional. Da obige Beispiel würde also die
Verknüpfung:

oe:11 -> ar:12 -> is:13 -> do:14

finden, nicht aber:

oe:11 -> ar:13 -> do:14

Unterschiede anzeigen:

SL/RecordLinks.pm
109 109
  return wantarray ? @{ $links } : $links;
110 110
}
111 111

  
112
sub get_links_via {
113
  $main::lxdebug->enter_sub();
114

  
115
  use SL::MoreCommon;
116
  use Data::Dumper;
117

  
118
  my $self     = shift;
119
  my %params   = @_;
120

  
121
  Common::check_params(\%params, [ qw(from_table from_id to_table to_id) ]);
122
  Common::check_params(\%params, "via");
123

  
124
  my @hops = ref $params{via} eq 'ARRAY'
125
           ? @{ $params{via} }
126
           :    $params{via};
127
  unshift @hops, +{ table => $params{from_table}, id => $params{from_id} };
128
  push    @hops, +{ table => $params{to_table},   id => $params{to_id} };
129

  
130
  my $myconfig   = \%main::myconfig;
131
  my $form       = $main::form;
132

  
133
  my $last_hop = shift @hops;
134
  my @links    = undef;
135
  for my $hop (@hops) {
136

  
137
    my @temp_links = $self->get_links(
138
      from_table => $last_hop->{table},
139
      from_id    => $last_hop->{id},
140
      to_table   => $hop->{table},
141
      to_id      => $hop->{id},
142
    );
143

  
144
    if (@links) {
145
      @links = grep { $_ }
146
               cross {
147
                 if (   $a->{to_table} eq $b->{from_table}
148
                     && $a->{to_id}    eq $b->{from_id} ) {
149
                   +{ $a->{from_table}, $a->{from_id},
150
                      $b->{to_table},   $b->{to_table} }
151
                 }
152
              } @links, @temp_links;
153
    } else {
154
      @links = @temp_links;
155
    }
156

  
157
    $last_hop = $hop;
158
  }
159

  
160
  $main::lxdebug->leave_sub();
161

  
162
  return wantarray ? @links : \@links;
163
}
164

  
112 165
1;

Auch abrufbar als: Unified diff