Hallo Raphael,
On 2002/02/14 11:22, Raphael Richter <Raphael.Richter@uni-X.com> wrote:
> general.pl sieht so aus:
>
> ---------------
>
> #!/bin/false
> #
>
> use strict;
>
> my $filename = $metainfo->getValues('dateiname');
> my $filesize = (-s $filename);
> ($filesize) || ($filesize = "0");
> $metainfo->setValues ('filesize' => "$filesize");
> $metainfo->setValues('action' => "doit");
>
> my $new = "Filesize: $filesize Filename: $filename";
>
> --------------
>
> Nun, das tut, was es soll. Ich bearbeite das Template, ...
> Jetzt lese ich aber in einem Plugin im weiteren Workflow irgendwann die
> Metainformationen aus.
> Alle möglichen Metas (defimage1,filename,...) bekomme ich dort
> rausgesaugt, nur nicht die in general.pl gesetzten.
Was du hier probierst (und was von Guido in einem anderen Thread
gestern faelschlicherweise vorgeschlagen wurde), ist nicht
zulaessig. Die Metainformationen duerfen innerhalb eines
Perl-Flexmodules oder Codeinclude nicht veraendert werden.
Das hat folgenden technischen Hintergrund:
Wenn du ein Dokument mit dem Edit-Workflow-Plugin bearbeitest,
passiert im Hintergrund folgendes (etwas vereinfacht dargestellt):
- Metainformationen werden von der Festplatte geladen
- der Template-Prozessor macht aus den Metainformationen die
HTML-Seite die du im Browser siehst - mit Eingabefeldern usw.
- dabei wird dein Perlcode aus dem Codeinclude ausgefuehrt, das
Meta::Info-Objekt wird modifiziert
- die HTML-Seite wird zum Browser geschoben
- das Meta::Info-Objekt wird danach allerdings nicht gespeichert
Jetzt ist erstmal der User dran. Er sieht sein HTML-Formular und
bearbeitet die Daten. Er klickt auf "Speichern" - dabei schickt sein
Browser die geaenderten Felder zu Imperia zurueck, inklusive
der Hidden-Felder, die von deinem Codeinclude moeglicherweise
generiert worden sind.
Weiter geht's also im Edit-Plugin:
- Metainformationen werden nochmal von der Festplatte geladen
- alles was der Browser geschickt hat, wird in die Metainformationen
eingearbeitet
- Metainformationen werden gespeichert
Wie du siehst, wird das Template beim Speichern gar nicht mehr geladen
oder ausgefuehrt. Das heisst: auch dein Perlcode im Codeinclude wird
nicht ausgefuehrt. Folglich ist deine Modifikation auch weg.
Das Meta::Info-Objekt darf, waehrend der Template-Prozessor laeuft,
auf keinen Fall veraendert werden. Deine zweite Loesung, also das
generieren von Hidden-Feldern, ist die "richtige" Methode
dafuer. Dabei musst du aber daran denken, die Werte richtig zu
escapen.
Es gibt eine Ausnahme, wo der Exploit mit dem Meta::Info->setValues
zufaellig funktioniert: der Publisher fuehrt erst den
Template-Prozessor aus, und veroeffentlicht dann direkt die
modifizierten Metadaten. Das fuehrt dazu, dass die Aenderungen dennoch
uebernommen und gespeichert werden. Das ist jedoch undokumentiertes
Verhalten und wird sich spaetestens mit Imperia 6.5 aendern. Daher
kann ich davon wirklich nur abraten.
Gruss
--
Max Kellermann
Entwicklung
Imperia AG
Leyboldstr. 10
50354 Huerth
Tel./Fax: 02233 807-228 / -100
E-Mail: max.kellermann@imperia.net
http://www.imperia.net
| Thread (I6: $metainfo->setValues() im Template) |
|
© 2001, 2002 marchive.pl Christian Lackas
[HOME]
[MARCHIVE]
[INDEX]
[IMPERIA]
[IMPRESSUM]
[DELTA]