[SOLVED] Get ArticleID

Hilfe zu Znuny Problemen aller Art
Locked
nd0
Znuny expert
Posts: 232
Joined: 24 Mar 2015, 16:53
Znuny Version: 5.0.14
Location: Colonia

[SOLVED] Get ArticleID

Post by nd0 »

"Früher" ließ sich wohl über

Code: Select all

$Param{Data}->{ArticleID}
die aktuelle ArticleID auslesen.

Hat sich daran was geändert?
Last edited by nd0 on 01 Mar 2016, 15:12, edited 1 time in total.
LIVE: OTRS 5.0.14 || Debian || MySQL/LDAP
TEST: OTRS 5.0.14 || Debian || MySQL/LDAP
RStraub
Znuny guru
Posts: 2210
Joined: 13 Mar 2014, 09:16
Znuny Version: 6.0.14
Real Name: Rolf Straub

Re: Get ArticleID

Post by RStraub »

Kommt komplett darauf an in welchem Modul du gerade bist und was im Param steht.

Du kannst aber mal die komplette Param in den OTRS Log ausgeben:

Code: Select all

    use Data::Dumper;
    my $message = Dumper(\%Param);
    $Kernel::OM->Get('Kernel::System::Log')->Log(
        Priority => 'info',
        Message  => $message,
    );
Currently using: OTRS 6.0.14 -- MariaDB -- Ubuntu 16 LTS
nd0
Znuny expert
Posts: 232
Joined: 24 Mar 2015, 16:53
Znuny Version: 5.0.14
Location: Colonia

Re: Get ArticleID

Post by nd0 »

Wenn ich den von dir geposteten Code in der "ChangeArticleType.pm" unterbringe:

Code: Select all

Mar  1 08:55:21 test OTRS-CGI-01[24971]: [Info][Kernel::Modules::ChangeArticleType::Run] $VAR1 = {#012  'Data' => {}#012};
In der "AgentTicketZoom.pm" untergebracht:

Code: Select all

Mar  1 09:00:20 test OTRS-CGI-01[24971]: [Info][Kernel::Modules::AgentTicketZoom::Run] $VAR1 = {};
Mar  1 09:00:22 test OTRS-CGI-01[24971]: [Info][Kernel::Modules::AgentTicketZoom::Run] $VAR1 = {};
Mar  1 09:00:25 test OTRS-CGI-01[24971]: [Info][Kernel::Modules::AgentTicketZoom::Run] $VAR1 = {};
Wir reden aber schon von der "syslog" oder? (Liegt bei mir übrigens nicht im OTRS-Verzeichnis sondern vom root-Verzeichnis aus unter "/var/log" - ist das korrekt?)

/e: Hintergrund ist letztenendes der, dass ich in der "ChangeArticleType.pm" den Wert der ArticleID des Artikels brauche auf den ich im "AgentTicketZoom.pm" geklickt habe ... bei PHP würde ich diese einfach aus der URL auslesen ... da wird die ArticleID des ausgewählten Artikels ja übergeben ... leider habe ich hierfür wieder keine Möglichkeit gefunden :?

/e2: Ich hab jetzt doch tatsächlich noch die Möglichkeit gefunden die URL auszulesen? Ich hab mir jetzt in der "ChangeArticleType.pm" folgendes ausgeben lassen:

Code: Select all

my $test = $ENV{'HTTP_REFERER'};
$Output .= "TEST: $test"; 
Witzig ist, dass er mir den String "https://test.MEINE.DOMAIN/otrs/index.pl ... cketID=594" ausgibt, obwohl in der Adresszeile des sich öffnenden PopUps "https://test.MEINE.DOMAIN/otrs/index.pl ... cleID=2037" steht :(

/e3: Okay ich komme immer näher ... mit der Umgebungsvariable QUERY_STRING bekomm ich jetzt die ArticleID übergeben:

Code: Select all

my $test = $ENV{'QUERY_STRING'};
   
    $Output .= "<br>";
    $Output .= "TEST: $test";   
    
    my @test2 =split(/=/, $test);
    my $test3 = $test2[3];
    
    $Output .= "<br>";
    $Output .= "--> $test3";
Sorgt für folgende Ausgabe:

Code: Select all

TEST: Action=ChangeArticleType;TicketID=594;ArticleID=2037
--> 2037
Jetzt übergebe ich die Variable $test3 an mein SQL-Query:

Code: Select all

    my $dbh;
    my $sth;
    
    $dbh = DBI->connect('DBI:mysql:otrsdb', 'otrsuser', '***************')
            || die "Could not connect to database: $DBI::errstr";
    
    if ($Article{ArticleType} eq 'note-external') {      # note-external?
      $sth = $dbh->prepare("UPDATE otrsdb.article SET article_type_id=9 WHERE id=?");
    } elsif ($Article{ArticleType} eq 'note-internal') {  # note-internal?
      $sth = $dbh->prepare("UPDATE otrsdb.article SET article_type_id=10 WHERE id=?");    
    } elsif ($Article{ArticleType} eq 'email-external') {  # email-external?
      $sth = $dbh->prepare("UPDATE otrsdb.article SET article_type_id=2 WHERE id=?");  
    } elsif ($Article{ArticleType} eq 'email-internal') {  # email-internal?
      $sth = $dbh->prepare("UPDATE otrsdb.article SET article_type_id=1 WHERE id=?");
    } else {
      $sth = "";
    }
    
    if ($sth eq ""){
      ######            
    } else {
      $sth->execute($test3);
      $Success = 1;
    }
    
    $dbh->disconnect();
... genau an der Stelle wo vorher die $LastArticleID übergeben wurde ... und siehe da:
Die Änderung des ArticleType funktioniert nicht mehr :lol:

/e4: Kommando zurück! Hab das ganze Modul jetzt nochmal von Grund auf neu gebaut mit ordentlicher Benennung der Variablen und siehe da - es funktioniert ... Man man man - PERL und ich werden wohl keine Freunde mehr :-D
LIVE: OTRS 5.0.14 || Debian || MySQL/LDAP
TEST: OTRS 5.0.14 || Debian || MySQL/LDAP
RStraub
Znuny guru
Posts: 2210
Joined: 13 Mar 2014, 09:16
Znuny Version: 6.0.14
Real Name: Rolf Straub

Re: Get ArticleID

Post by RStraub »

Whoa, soviele Edits. Bleibt jetzt noch ein Problem übrig? Also brauchst du in ChangeArticleType immer noch die Article ID ?
Currently using: OTRS 6.0.14 -- MariaDB -- Ubuntu 16 LTS
nd0
Znuny expert
Posts: 232
Joined: 24 Mar 2015, 16:53
Znuny Version: 5.0.14
Location: Colonia

Re: Get ArticleID

Post by nd0 »

Also habs jetzt wie gesagt gelöst - nicht elegant - aber gelöst...

Code: Select all

my $QueryString = $ENV{'QUERY_STRING'};
my @SplittedQueryString = split(/=/, $QueryString);
my $ChosenArticleID = $SplittedQueryString[3];
Liefert mir die ArticleID zurück. Geht bestimmt auch schöner?!

Param via Log auslesen hat ja leider nicht geklappt.
LIVE: OTRS 5.0.14 || Debian || MySQL/LDAP
TEST: OTRS 5.0.14 || Debian || MySQL/LDAP
RStraub
Znuny guru
Posts: 2210
Joined: 13 Mar 2014, 09:16
Znuny Version: 6.0.14
Real Name: Rolf Straub

Re: Get ArticleID

Post by RStraub »

Probier's mal mit:

Code: Select all

my $ArticleID = $Kernel::OM->Get('Kernel::System::Web::Request')->GetParam(Param => 'ArticleID');
Currently using: OTRS 6.0.14 -- MariaDB -- Ubuntu 16 LTS
nd0
Znuny expert
Posts: 232
Joined: 24 Mar 2015, 16:53
Znuny Version: 5.0.14
Location: Colonia

Re: Get ArticleID

Post by nd0 »

Treffer! Werd ich mal abändern bei mir im Code...

Hab deine Lösung jetzt grad mal rückwärts durch Google gejagt und nach wie vor keine Quelle gefunden - bin ich ja beruhigt. :lol:

Danke mal wieder - SOLVED!
LIVE: OTRS 5.0.14 || Debian || MySQL/LDAP
TEST: OTRS 5.0.14 || Debian || MySQL/LDAP
RStraub
Znuny guru
Posts: 2210
Joined: 13 Mar 2014, 09:16
Znuny Version: 6.0.14
Real Name: Rolf Straub

Re: [SOLVED] Get ArticleID

Post by RStraub »

Topp. Nur zur Erkläung:

$Kernel::OM->Get('Kernel::System::Web::Request') - steht für das $ParamObject,
daraus kannst du u.a. URL-Parameter auslesen.

Action & Subaction werden meist direkt in $Self geschrieben, den Rest muss man dann eben abfragen.
Currently using: OTRS 6.0.14 -- MariaDB -- Ubuntu 16 LTS
Locked