Revision 5a925d70
Von Jan Büren vor fast 13 Jahren hinzugefügt
doc/dokumentation.xml | ||
---|---|---|
4216 | 4216 |
|
4217 | 4217 |
<para><productname>SQL-Ledger</productname> hat fast alles im globalen |
4218 | 4218 |
namespace abgelegt, und erwartet, dass es da auch wiederzufinden ist. |
4219 |
Unter <productname>FCGI</productname> müssen diese Sachen auch wieder
|
|
4219 |
Unter <productname>FCGI</productname> müssen diese Sachen aber wieder
|
|
4220 | 4220 |
aufgeräumt werden, damit sie nicht in den nächsten Request kommen. |
4221 | 4221 |
Einige Sachen wiederum sollen nicht gelöscht werden, wie zum Beispiel |
4222 |
Datenbankverbindungen, weil die ne Ewigkeit zum initialisieren
|
|
4222 |
Datenbankverbindungen, weil die sehr lange zum Initialisieren
|
|
4223 | 4223 |
brauchen.</para> |
4224 | 4224 |
|
4225 | 4225 |
<para>Das zweite Problem ist <function>strict</function>. Unter |
4226 | 4226 |
<function>strict</function> werden alle Variablen die nicht explizit |
4227 | 4227 |
mit <function>Package</function>, <function>my</function> oder |
4228 | 4228 |
<function>our</function> angegeben werden als Tippfehler angemarkert, |
4229 |
was einen vor so mancher Stunde suchen nach einem Bug erspart. Da
|
|
4230 |
globale Variablen aber implizit mit Package angegeben werden, werden |
|
4231 |
die nicht geprüft, und ein Tippfehler da fällt niemandem auf.</para>
|
|
4229 |
dies hat, seit der Einführung, u.a. schon so manche langwierige Bug-Suche verkürzt.
|
|
4230 |
Da globale Variablen aber implizit mit Package angegeben werden, werden
|
|
4231 |
die nicht geprüft, und somit kann sich schnell ein Tippfehler einschleichen.</para>
|
|
4232 | 4232 |
</sect2> |
4233 | 4233 |
|
4234 | 4234 |
<sect2> |
4235 | 4235 |
<title>Kanonische globale Variablen</title> |
4236 | 4236 |
|
4237 | 4237 |
<para>Um dieses Problem im Griff zu halten gibt es einige wenige |
4238 |
globale Variablen, die kanonisch sind, und alles andere sollte
|
|
4239 |
anderweitig umhergereicht werden.</para> |
|
4238 |
globale Variablen, die kanonisch sind, d.h. sie haben bestimmte vorgegebenen Eigenschaften,
|
|
4239 |
und alles andere sollte anderweitig umhergereicht werden.</para>
|
|
4240 | 4240 |
|
4241 | 4241 |
<para>Diese Variablen sind im Moment die folgenden neun:</para> |
4242 | 4242 |
|
... | ... | |
4278 | 4278 |
</listitem> |
4279 | 4279 |
</itemizedlist> |
4280 | 4280 |
|
4281 |
<para>Damit diese nicht als Müllhalde misbrauch werden, im Folgenden
|
|
4282 |
eine kurze Erläuterung was man von denn erwarten kann.</para>
|
|
4281 |
<para>Damit diese nicht erneut als Müllhalde missbraucht werden, im Folgenden
|
|
4282 |
eine kurze Erläuterung der bestimmten vorgegebenen Eigenschaften (Konventionen):</para>
|
|
4283 | 4283 |
|
4284 | 4284 |
<sect3> |
4285 | 4285 |
<title>$::form</title> |
... | ... | |
4313 | 4313 |
<para><varname>$::form</varname> wurde unter <productname>SQL |
4314 | 4314 |
Ledger</productname> als Gottobjekt für alles misbraucht. Sämtliche |
4315 | 4315 |
alten Funktionen unter SL/ mutieren <varname>$::form</varname>, das |
4316 |
heißt, alles was einem lieb ist, sollte man vor einem Aufruf von zum |
|
4316 |
heißt, alles was einem lieb ist (alle Variablen die einem ans Herz |
|
4317 |
gewachsen sind), sollte man vor einem Aufruf (!) von zum |
|
4317 | 4318 |
Beispiel <function>IS->retrieve_customer()</function> in |
4318 |
Sicherheit bringen.</para> |
|
4319 |
|
|
4319 |
Sicherheit bringen. </para> |
|
4320 |
Z.B. das vom Benutzer eingestellte Zahlenformat, bevor man Berechnung in einem |
|
4321 |
bestimmten Format durchführt (SL/Form.pm Zeile 3552, Stand version 2.7beta), um |
|
4322 |
dies hinterher wieder auf den richtigen Wert zu setzen: |
|
4323 |
<programlisting> |
|
4324 |
my $saved_numberformat = $::myconfig{numberformat}; |
|
4325 |
$::myconfig{numberformat} = $numberformat; |
|
4326 |
# (...) div Berechnungen |
|
4327 |
$::myconfig{numberformat} = $saved_numberformat; |
|
4328 |
</programlisting> |
|
4320 | 4329 |
<para>Das Objekt der Klasse Form hat leider im Moment noch viele |
4321 |
zentrale Funktionen Gdie vom internen Zustand abhängen, deshalb |
|
4322 |
bitte nie einfach zerstören oder überschreiben. Es geht ziemlich |
|
4323 |
sicher etwas kaputt.</para> |
|
4330 |
zentrale Funktionen die vom internen Zustand abhängen, deshalb |
|
4331 |
bitte nie einfach zerstören oder überschreiben (zumindestens nicht kurz |
|
4332 |
vor einem Release oder in Absprache über bspw. die devel-Liste ;-). |
|
4333 |
Es geht ziemlich sicher etwas kaputt.</para> |
|
4324 | 4334 |
|
4325 | 4335 |
<para><varname>$::form</varname> ist gleichzeitig der Standard Scope |
4326 | 4336 |
in den <productname>Template::Toolkit</productname> Templates |
... | ... | |
4330 | 4340 |
Zugriff <function>[% FORM.var %]</function>. In Druckvorlagen sind |
4331 | 4341 |
normale Variablen ebenfall im <varname>$::form</varname> Scope, d.h. |
4332 | 4342 |
<function><%var%></function> zeigt auf |
4333 |
<varname>$::form->{var}</varname>. Innerhalb von Schleifen wird |
|
4343 |
<varname>$::form->{var}</varname>. |
|
4344 |
Nochmal von der anderen Seite erläutert, innerhalb von (Web-)Templates sieht |
|
4345 |
man häufiger solche Konstrukte: |
|
4346 |
<programlisting> |
|
4347 |
[%- IF business %] |
|
4348 |
# (... Zeig die Auswahlliste Kunden-/Lieferantentyp an |
|
4349 |
[%- END %] |
|
4350 |
</programlisting> |
|
4351 |
Entweder wird hier dann $::form->{business} ausgewertet oder aber der Funktion |
|
4352 |
<function>$form->parse_html_template</function> wird explizit noch ein zusätzlicher Hash |
|
4353 |
übergeben, der dann auch in den (Web-)Templates zu Verfügung steht, bspw. so: |
|
4354 |
<function>$form->parse_html_template("is/form_header", \%TMPL_VAR);</function> |
|
4355 |
|
|
4356 |
Innerhalb von Schleifen wird |
|
4334 | 4357 |
<varname>$::form->{TEMPLATE_ARRAYS}{var}[$index]</varname> |
4335 | 4358 |
bevorzugt, wenn vorhanden.</para> |
4336 |
</sect3> |
|
4359 |
Zum Beispiel in SL/DO.pm welche über alle Positionen eines Lieferscheins |
|
4360 |
in Schleife läuft: |
|
4361 |
<programlisting> |
|
4362 |
for $i (1 .. $form->{rowcount}) { |
|
4363 |
(...) |
|
4364 |
push @{ $form->{TEMPLATE_ARRAYS}{runningnumber} }, $position; |
|
4365 |
push @{ $form->{TEMPLATE_ARRAYS}{number} }, $form->{"partnumber_$i"}; |
|
4366 |
push @{ $form->{TEMPLATE_ARRAYS}{description} }, $form->{"description_$i"}; |
|
4367 |
</programlisting> |
|
4368 |
</sect3> |
|
4337 | 4369 |
|
4338 | 4370 |
<sect3> |
4339 | 4371 |
<title>%::myconfig</title> |
... | ... | |
4359 | 4391 |
<listitem> |
4360 | 4392 |
<para>Sollte nicht ohne Filterung irgendwo gedumpt werden oder |
4361 | 4393 |
extern serialisiert werden, weil da auch der Datenbankzugriff |
4362 |
für diesenuser drinsteht.</para> |
|
4394 |
für diesen user drinsteht.</para>
|
|
4363 | 4395 |
</listitem> |
4364 | 4396 |
|
4365 | 4397 |
<listitem> |
... | ... | |
4375 | 4407 |
<para><varname>%::myconfig</varname> ist im Moment der Ersatz für |
4376 | 4408 |
ein Userobjekt. Die meisten Funktionen, die etwas anhand des |
4377 | 4409 |
aktuellen Users entscheiden müssen, befragen |
4378 |
<varname>%::myconfig</varname>.</para> |
|
4410 |
<varname>%::myconfig</varname>. |
|
4411 |
Innerhalb der Anwendungen sind dies überwiegend die Daten, die sich |
|
4412 |
unter Programm->Einstellungen befinden, bzw. die Informationen über den |
|
4413 |
Benutzer die über die Administrator-Schnittstelle (admin.pl) eingegeben wurden. |
|
4414 |
</para> |
|
4379 | 4415 |
</sect3> |
4380 | 4416 |
|
4381 | 4417 |
<sect3> |
... | ... | |
4429 | 4465 |
brauchbares Tracing gebaut ist, "<function>log_time</function>", mit |
4430 | 4466 |
der man die Wallclockzeit seit Requeststart loggen kann, sowie |
4431 | 4467 |
"<function>message</function>" und "<function>dump</function>" mit |
4432 |
denen man flott Informationen ins Log packen kann.</para> |
|
4468 |
denen man flott Informationen ins Log (tmp/lx-office-debug.log) packen kann.</para> |
|
4469 |
Beispielsweise so: |
|
4470 |
<programlisting> |
|
4471 |
$main::lxdebug->message(0, 'Meine Konfig:' . Dumper (%::myconfig)); |
|
4472 |
$main::lxdebug->message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form->{vc}); |
|
4473 |
|
|
4474 |
</programlisting> |
|
4433 | 4475 |
</sect3> |
4434 | 4476 |
|
4435 | 4477 |
<sect3> |
... | ... | |
4479 | 4521 |
</listitem> |
4480 | 4522 |
</itemizedlist> |
4481 | 4523 |
|
4482 |
<para>Globale Konfiguration. Configdateien werden zum Start gelesen,
|
|
4483 |
und nicht mehr angefasst. Es ist derzeit nicht geplant, dass das |
|
4524 |
<para>Globale Konfiguration. Configdateien werden zum Start gelesen |
|
4525 |
und danach nicht mehr angefasst. Es ist derzeit nicht geplant, dass das
|
|
4484 | 4526 |
Programm die Konfiguration ändern kann oder sollte.</para> |
4485 | 4527 |
|
4486 |
<para>Für die folgende Konfigurationsdatei:</para> |
|
4528 |
<para>Beispielsweise ist über den Konfigurationseintrag [debug] |
|
4529 |
die Debug- und Trace-Log-Datei wie folgt konfiguriert und verfügbar:</para> |
|
4487 | 4530 |
|
4488 | 4531 |
<programlisting>[debug] |
4489 |
file = /tmp/lxoffice_debug_log.txt</programlisting>
|
|
4532 |
file = /tmp/lx-office-debug.log</programlisting>
|
|
4490 | 4533 |
|
4491 | 4534 |
<para>ist der Key <varname>file</varname> im Programm als |
4492 | 4535 |
<varname>$::lx_office_conf->{debug}{file}</varname> |
... | ... | |
4514 | 4557 |
|
4515 | 4558 |
<para>Funktioniert wie <varname>$::lx_office_conf</varname>, |
4516 | 4559 |
speichert aber Daten die von der Instanz abhängig sind. Eine Instanz |
4517 |
ist hier eine Mandantendatenbank. Prominentestes Datum ist "eur", |
|
4518 |
die Information ob Bilanz oder Einnahmenüberschussrechnung gemacht |
|
4519 |
wird.</para> |
|
4560 |
ist hier eine Mandantendatenbank. |
|
4561 |
Beispielsweise überprüft |
|
4562 |
<programlisting>$::instance_conf->get_inventory_system eq 'perpetual'</programlisting> |
|
4563 |
ob die berüchtigte Bestandsmethode zur Anwendung kommt.</para> |
|
4520 | 4564 |
</sect3> |
4521 | 4565 |
|
4522 | 4566 |
<sect3> |
... | ... | |
4887 | 4931 |
</para> |
4888 | 4932 |
</listitem> |
4889 | 4933 |
</varlistentry> |
4934 |
<varlistentry> |
|
4935 |
<term><varname>ignore</varname></term> |
|
4936 |
<listitem> |
|
4937 |
<para> |
|
4938 |
Optional. Falls der Wert auf 1 (true) steht, wird das Skript bei der Anmeldung ignoriert und entsprechend nicht ausgeführt. |
|
4939 |
</para> |
|
4940 |
</listitem> |
|
4941 |
</varlistentry> |
|
4890 | 4942 |
</variablelist> |
4891 | 4943 |
</sect2> |
4892 | 4944 |
|
... | ... | |
5360 | 5412 |
|
5361 | 5413 |
<listitem> |
5362 | 5414 |
<para> |
5363 |
Die maximale Zeilenlänge ist nicht bescränkt. Zeilenlängen unterhalb von 79 Zeichen helfen unter bestimmten Bedingungen, aber |
|
5415 |
Die maximale Zeilenlänge ist nicht beschränkt. Zeilenlängen unterhalb von 79 Zeichen helfen unter bestimmten Bedingungen, aber
|
|
5364 | 5416 |
wenn die Lesbarkeit unter kurzen Zeilen leidet (wie zum Biespiel in grossen Tabellen), dann ist Lesbarkeit vorzuziehen. |
5365 | 5417 |
</para> |
5366 | 5418 |
|
Auch abrufbar als: Unified diff
Dokumentation.xml ergänzt / geändert | doc/Makefile entfernt
Ein paar Rechtschreibfehler korrigiert und insbesondere Svens Ausführungen
über die globale und nicht globale Datenstrukturen in LxO durch Beispiele
erweitert oder 'leicht' geändert (@sven: Schau mal, ob du das so akzeptieren kannst ...).
Den Parameter ignore für Pg-Upgrade2-Skripte ferner aufgenommen.
Hoffentlich doc/Makefile gelöscht, da dieser nicht mehr benötigt wird.
Ggf., wäre ein kurzes README, wie bei sql/Pg-Upgrade2/README sinnvoll (auch
wenn die Zusammnenhänge dann sowieso in der dokument.pdf stehen)