[part-db] Wie importiert man geschachtelte Kategorien?

#4387059
Lesenswert?

Hallo Uhu,

Leider können in der CSV Datei keine verschachtelten Kategorien 
angegeben werden. Der Import funktioniert sehr primitiv, er sucht 
einfach nach Kategorien die den gleichen Namen wie die im CSV definierte 
Kategorie haben. Gibt es keine Kategorie mit diesem Namen, wird eine 
neue angelegt (mit "Import" als Elternkategorie). Gibt es eine oder 
mehrere Kategiren mit diesem Namen, wird einfach die erste davon 
genommen, deren Elternkategorien werden komplett ignoriert.

Sofern du also nur eine Kategorie mit dem Namen "0805" hast, kannst du 
einfach "0805" im CSV angeben. Wenn aber mehrere Kategorien mit dem 
Namen "0805" vorhanden sind, müsstest du als Workaround (zumindest für 
dem Import) die Kategorien umbenennen, so dass der Name eindeutig ist 
(z.B. "R-0805" und "C-0805").

mfg
Urban
#4390520
Lesenswert?

Naja, jeden Artikel nochmal anfassen musst du eben nicht, der Import 
funktioniert ja einwandfrei wenn die Kategorien eindeutige Namen haben. 
Du musst also höchstens vor dem Import ein paar wenige Kategorien leicht 
umbenennen, danach geht alles vollautomatisch. Ich denke damit kann man 
ganz gut leben, da es ja nur selten Kategorien mit gleichem Namen gibt.

Falls deine gewünschten Kategorien noch nicht existieren und du dir 
erhoffst dass beim Import auch alle Kategorien inklusive Hierarchie 
angelegt werden: Das ist auch nicht soo tragisch, dann wird halt beim 
Import eine Kategorie mit dem Namen "Passiv | Widerstand | smd | 0805" 
(ohne Hierarchie) in der Unterkategorie "Import" angelegt und alle 
entsprechenden Bauteile dieser Kategorie zugeordnet. Dann musst du halt 
nach dem Import noch die Kategorien "Passiv" -> "Widerstand" -> "smd" 
erstellen (inkl. Hierarchie) und die vom Importer angelegte Kategorie in 
"0805" umbenennen und als Elternkategorie "smd" zuweisen. Alle Bauteile 
von "0805" bleiben weiterhin dort drin, du brauchst die Bauteile nicht 
auch noch anzupassen.

Die Daten direkt in die DB importieren geht theoretisch auch, allerdings 
hast du dann keinerlei Überprüfung ob die Daten auch für Part-DB gültig 
sind, das könnte zu weiteren Problemen führen. Und ob das einfacher ist 
als die oben genannte Variante bezweifle ich (musst selbst ein Import 
Script schreiben)...
OP #4393276
Lesenswert?

Jetzt habe ich einen Schwung Teile erfasst und er liest sie auch ein. 
Die Liste mit den Daten sieht gut aus - nur übernimmt er nicht einen 
einzigen Artikel.

Footprints und Kategorien existieren.

Die Spalten Beschreibung, Kommentar, Hersteller, Lieferant und 
Bestellnummer sind leer. Der Preis ist überall 0. Liegt das evtl. daran?
OP #4394790
Lesenswert?

Ich habe Version: 0.3.1 (stable) in einer VM von VirtualBox unter Linux 
Mint 17 laufen.

Es kommt überhaupt keine Meldung beim Übernehmen der Daten, lediglich 
die Liste mit den den Spalten zugeordneten Daten verschwindet. Die 
.csv-Datei wird noch angezeigt.
#4408829
Lesenswert?

Also ich habs mal mit dem Beispiel-CSV ausprobiert, das funktioniert 
einwandfrei: 
https://raw.githubusercontent.com/sandboxgangster/Part-DB/master/development/testfiles/import_parts/csv_correct.csv

Du hast schon gesehen dass man nach dem Übernehmen der Daten noch auf 
einen weiteren Button "Daten importieren!" (siehe Bild) klicken muss, 
oder? :) Oder erscheint dieser Button bei dir gar nicht erst?

Evtl. liegts ja aber auch an deinem CSV. Wenn du willst kannst du mir 
die Datei schicken, dann schaue ich mir das mal an.

Ansonsten bräuchte ich eine genauere Fehlerbeschreibung (welche Buttons 
klickst du in welcher Reihenfolge und wann kommt welcher Output)...
Angehängte Dateien:
#4409680
Lesenswert?

Ok ich konnte das Problem reproduzieren und beheben. Und zwar wird beim 
Import schnell mal das PHP Limit "max_input_vars" überschritten, wodurch 
Part-DB ein unvollständiges array zurückgeliefert bekommt und nicht mehr 
richtig funktioniert.

Die Lösung ist also in der PHP Konfiguration (z.B. 
/etc/php5/apache2/php.ini) den Wert von "max_input_vars" zu erhöhen, 
z.B. auf 10'000 (Standard ist 1'000).

Ich mach auf unserer Github Projektseite grad noch ein Issue auf zu 
diesem Thema...
OP #4409809
Lesenswert?

Ich frage mich, wozu eigentlich alle Felder in Edits angezeigt werden 
müssen. .csv-Daten kann man mit jeder Tabellenkalkulation inspizieren 
und für das xml-Format müsste es doch auch die Möglichkeit geben, die 
Daten außerhalb part-db zu inspizieren und zu konnigieren.

Dann könnte man die Editiererei aus part-db einfach rausschmeißen und 
das Problem ist aus der Welt.
#4409863
Lesenswert?

Das ist natürlich auch eine Möglichkeit. Allerdings ist es halt schon 
angenehm wenn man direkt in Part-DB gewisse Angaben korrigieren kann. 
Insbesondere für XML kenne ich kein eigenständiges Tool um das gescheit 
machen zu können.

Immerhin gibt es ja einen Workaround um trotzdem grössere Dateien 
importieren zu können. Wie das Problem behoben werden soll, kann jetzt 
auf Github diskutiert werden (bitte nicht hier).
OP #4409890
Lesenswert?

Urban B. schrieb:
> Immerhin gibt es ja einen Workaround um trotzdem grössere Dateien
> importieren zu können. Wie das Problem behoben werden soll, kann jetzt
> auf Github diskutiert werden (bitte nicht hier).

Das ist halt eine ewige Fehlerquelle, zumal man überhaupt keine Hinweise 
auf die Ursache bekommt.

Woher kommen denn diese xml-Dateien?
OP #4410397
Lesenswert?

Nochmal zurück zum Ausgangsproblem: geschachtelte Kategorien.

Bei mir gibt es bereits eine nichtleere Kategorie _0805. Nun habe ich 
weitere Teile in eine neue Kategorie R0805 importiert.

Wenn ich diese Kategorie nach _0805 umbenennen will, dann mault er - 
zurecht -, die _0805 gäbe es bereits.

Der Trick mit dem Kategorie umbenennen geht also leider nur, wenn die 
Zielkategorie noch nicht existiert...
Gast #4411063
Lesenswert?

Urban B. schrieb:
> Ach ja, anstatt die globale PHP Konfiguration zu ändern, kann man
> natürlich auch die .htaccess anpassen...
>
> Hier übrigens noch das neue Issue:
> https://github.com/sandboxgangster/Part-DB/issues/47

Das Problem mit den "max_input_vars" könnte man eventuell beheben, wenn 
man das Formular in der Tabelle sinnvoller aufbaut.
So wie ich das interpretiere, erzeugt das eine Unmenge an Input-Feldern 
mit fortlaufend numerierten Namen:

<pre>
<input type="text" style="width:45px" name="instock_{TMPL_VAR 
NAME="row_index"}" value="{TMPL_VAR NAME="instock"}" 
onkeypress="validatePosIntNumber(event)"></td>
</pre>

Das erzeugt halt Input-Felder mit Namen wie "instock_0", "instock_1", 
"instock_2" und so weiter. Man sollte da besser ein Array draus machen, 
das zählt dann nämlich als eine einzige Variable. Die Input-Felder 
müssten dann entweder alle "instock[]" heißen oder numeriert sein, etwa 
"instock[0]", "instock[1]" und so weiter.
#4411089
Lesenswert?

Dein Ansatz hat leider eine andere Falle, nämlich der Datenmenge selbst. 
Besser ist es, den Import vorher in eine temporäre Tabelle zu machen und 
von dort aus die Bauteile in den Bestand zu übernehmen. Hier wird nur 
noch der Index benötigt, was vieles vereinfacht.

Ich werde mich da mal dran machen, kann aber etwas dauern.
Gast #4411102
Lesenswert?

Udo N. schrieb:
> Dein Ansatz hat leider eine andere Falle, nämlich der Datenmenge selbst.
Diese Falle ist aber arbiträr.
Bei phpMyAdmin und wie sie alle heißen, hast du das ja auch.

max_input_vars hat seine Ursache angeblich in den PHP-internen 
Hashtabellen, glaubt man der Doku[1]. Die Datenmenge an sich ist eine 
Frage, was man denn können will. Die Grenze kann man problem- und 
weitgehend risikolos anheben.
Bei max_input_vars hingegen hat man eher ein Designproblem...


[1]: http://php.net/manual/de/info.configuration.php#ini.max-input-vars

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren