Konkretes Problem/Projekt - komplexe Erzeugung von Einträgen in MySql-Datenbank

  • Hallo Gemeinde,
    dezeit stellt sich für ein Webprojekt eine Aufgabe, die ich schnellstmöglich lösen muss. Da ich bisher gute Erfahrungen mit Autoit gemacht habe (in ganz anderen Bereichen), wäre das erstmal die erste Wahl, es sei denn, es gibt andere, bessere Möglichkeiten...
    Allerdings glaube ich, hier dann auch eindeutilg an meine Grenzen zu stossen, zumindest was den zeitlichen Rahmen angeht. Hätte ich vier wochen Zeit und Urlaub... :(

    Ich Beschreibe das ganze mal, so gut es sich zum jetzigen Zeitpunkt darstellen lässt.
    Es sollen PDF-Dokumente in einem Webauftritt zum Download angeboten werden (Dokumente und Webauftritt existent). Diese Downloads werden zusätzlich in Kategorien (13 + Sprachen) eingeteilt.
    Die Sprache ist am PDF durch die Dateinamenserweiterung xxxx-DE.pdf kenntlich. Alle Dateien liegen in einem Verzeichnis. Für unseren Webauftritt wird Typo3 mit einer entspechenden Downloadextension (Modern Downloads) verwendet. Diese Extension führt drei Tabellen in der Datenbank mit spezifischer Struktur.
    In der ersten Tabelle stehen alle Informationen zum Download selbst, die wichtigsten sind Bezeichnung + Tags (jeweils identisch), ein Image (jew. Länderflagge) sowie die verknüpfte Datei. Weiter noch die Berechtigungen, ob die Datei nach Login angezeigt wird oder nicht.

    In der zweiten Tabelle sind die Kategorien erfasst, welche bei Anlage eine entsprechende UID erhalten.
    Hieraus entsteht eine Kombination UID für die Kategorie, PID für den Sysfolder (also immer gleich). In meinem Falle derzeit: UID 15, PID 2043 für Englisch, UID 16, PID 2043 für Deutsch usw.

    Dritte Tabelle: wird jetzt ein Datensatz angelegt und einer Kategorie zugewiesen, dann wird die UID (als uid_local) des Datensatzes in dieser Tabelle mit der UID (als uid_foreign) der Kategorie zugeordnet.

    Damit ist eine eindeutige Klassifizierung des Downloads erreicht.

    Die Berechtigungen werden aus einer anderen Tabelle abgerufen und in die erste Tabelle mit eingetragen.
    In meinem Beispiel wurden alle Berechtigungen als Hauptgruppe angelegt und die Teilnehmer entsprechend zugeordnet. Auch hier ist das Resultat wieder eine eindeutige Zuordnung.
    Weiter wurde für die Berechtigung die Kundennummer benutzt (damit eine bestmögliche Angleichung an Bestandssysteme erfolgen kann). Typo3 arbeitet aber intern mit der UID des Logindatensatzes.
    Diese Datensätze sind ebenfalls in einem Sysfolder angelegt, Gruppen und Einzeluser (= PID identisch), jedoch zwei getrennte Tabellen.
    Jede Händlernummer = Gruppe (title) hat entsprechend ein UID.
    Der Teilnehmer entsprechend UID und PID. In einer Spalte usergroup (enthält UID der Gruppe(n)) ist der Teilnehmer mit seinen Logindaten entsprechend zugeordnet.

    Die Loginberechtigungen funktionieren auch soweit, für die Berechtigungskennzeichnung genügt also die Angabe der Händlernummer bzw. der UID des Händlers.

    Leider sind unsere Bestandssysteme nicht wirklich kompatibel. Das beste was erzeugt werden kann, ist eine Liste (CSV) die die folgende Zuordnung enthält:
    Händlernummer, Artikelnummer (= Dateiname-DE.pdf etc) und Artikelbezeichnung.
    Dadurch das eine Händlernummer einer Produktnummer zugeordnet ist, ergibt sich auch automatisch die entsprechende Berechtigung, die Datei als Download zur Verfügung zu haben.

    Was das Script also können müsste: ?( ?( ?(

    Als erstes diese Liste auslesen, dann die Downloaddatensätze samt Berechtigungen und Kategorisierung anlegen...
    Insgesamt sind derzeit ca. 1500 Händlernummern vorhanden (diese liegen jedoch in einem anderen Sysfolder, kann aber in 5 Minuten umgebaut werden, wegen der PID, 80 davon aktiv. PDFs über alle Sprachen ca. 11.000.
    Wichtig wäre noch, sobald in der Liste eine neue Händlernummer auftaucht, sollte dann auch entsprechend der Gruppendatensatz angelegt werden und die Berechtigung entsprechend gesetzt werden.
    Grundsätzlich gilt auch folgendes: steht der erste Datensatz (also für DE) ist dieser für alle andern Sprachen ebenfalls gültig, d. h. die Berechtigungen zum PDF sind in allen 13 + Sprachen gleich. Jeder der sich also einloggt, bekommt alle Spachversionen der Dokumente angeboten, für die er eine Berechtigung hat.

    Es kann auch vorkommen, das ein Dokument(e) physikalisch bereits auf dem Serververzeichnis zur Verfügung steht, obwohl diesem noch keine Händlernummer zugeordnet ist. Diese Dokument würde dann auch entsprechend in der CSV-Datei nicht auftauchen, daher dürfte das wohl eher kein Problem darstellen. Weiter stellt sich die Frage, ob e Sinn macht, bei ergänzungen lediglich mit einer Differenz-CSV-Datei zu arbeiten (um neue Dokumente zur Verfügung zu stellen) etc.

    Dateinamen: Da die Dateinamen nur die Artikelnummer und Sprachkennung enthalten, dem User aber in der Form Artikelnummer, Artikelname zur Verfügung gestellt werden sollen, muss das auch irgendwie zusammengabaut werden. Die Infos stehen in der CSV-Datei zur Verfügung.

    Hier handlet es sich durchaus um eine wohl komplexe und anspruchsvolle Geschichte. Daher liesse sich auch über einen finanziellen Ausgleich in angemessenem Rahmen reden, was die Scripterstellung angeht. Daher gerne weiteres auch per PN.

    Im Vorfeld werden im Websystem (Server bei uns im Unternehmen) jetzt erstmal kleinere Änderungen vorgenommen.
    Die brachliegenden Händler werden ins allgemeine Verzeichnis verschoben.
    Die fehlenden Sprachkategorien werden angelegt, damit diese UIDs zur Verfügung stehen
    Letzlich als so wenig wie möglich flexible Daten, damit notfalls mit statischen Parametern gearbeitet werden kann.

    Nichts desto trotz gehe ich jetzt für die verschiedenen Aufgabenstellungen mal noch auf die Suche im Forum, denn nein, aufgrund der komplexen anforderungen habe ich jetzt erst die Frage gestellt :)

    Einmal editiert, zuletzt von Pixelwizard (9. Februar 2012 um 11:46)

  • Grins...

    nur mal so als Update..ich habe so die ein oder andere Funktion gefunden, die wohl für sich schon einen Teil der Lösung ausmachen würden.

    Das erste vielversprechende...

    Spoiler anzeigen

    #Include <GuiComboBox.au3>
    #include <GUIConstantsEx.au3>
    #include <array.au3>
    #include <File.au3>

    Const $sCSV = @ScriptDir & "\downloads.CSV"
    Const $sElect = "bitte auswählen"
    Dim $a_sCSV, $aSplit, $scboChr = ""
    _FileReadToArray($sCSV,$a_sCSV)
    Dim $aCSV[$a_sCSV[0]][2]
    for $i = 1 to UBound($a_sCSV) - 1
    ConsoleWrite($i & $a_sCSV[$i] & @CRLF)
    $aSplit = StringSplit($a_sCSV[$i],";")
    if not StringInStr($scboChr,$aSplit[1]) Then $scboChr &= $aSplit[1] & "|"
    $aCSV[$i-1][0] = $aSplit[1]
    $aCSV[$i-1][1] = $aSplit[2]

    Next
    ConsoleWrite($scboChr & @CRLF)

    $hGui = GUICreate("2 Comboboxen aus 1er CSV ", 250, 120, 302, 218)
    $hcboChr = GUICtrlCreateCombo($sElect, 8, 8, 200, 25)
    GUICtrlSetData(-1,$scboChr)
    $hcboChrNr = GUICtrlCreateCombo("",8,35,200,25)
    $hbtnExit = GUICtrlCreateButton("Be&enden", 8, 65)

    GUISetState(@SW_SHOW)

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE, $hbtnExit
    Exit
    Case $hcboChr
    $sVal = GUICtrlRead($hcboChr)
    if $sVal <> $sElect Then
    $aSplit = _ArrayFindAll($aCSV,$sVal,0,0,True,True,0)
    GUICtrlSetData($hcboChrNr,"")
    $scboChr = ""
    for $i = 0 to UBound($aSplit) - 1
    $scboChr &= $aCSV[$aSplit[$i]][1] & "|"
    Next
    ConsoleWrite($scboChr & @CRLF)
    GUICtrlSetData($hcboChrNr,$scboChr)
    _GUICtrlComboBox_SetCurSel($hcboChrNr, 0)
    EndIf
    EndSwitch
    WEnd

    In meiner CSV sind aber "leider" drei Spalten und nicht zwei..und im augenblick hab ich nicht mehr wirklich die Power mich da reinzudenken um es entsprechend zu erweitern. Das Teil würde aber zwei Dinge erledigen: Ich könnte auf jeden Fall die Abhängigkeiten kontrollieren, denn wenn ich auf die Kundennummer (1. Combo), werden alle zugehörigen Artikelnummern (2. Combo) angezeigt. Dritte Combo wäre dann für Artikelnamen.

    Da das ganze dann in einem Array steht, hätte ich folgende Hoffnung :S :
    Die Daten (gerne in eine neue CSV) erstmal so schreiben, das Händlernummer bleibt, in der zweiten Spalte jedoch "Artikelnummer, Artikelname" zusammengeführt wird.
    Theoretisch müsste es doch dann auch gehen, eine Verbindung zur MySql-Datenbanktabelle mit den Benutzergruppen aufzumachen.
    Es müsste dann die Händlernummer mit der Bezeichnung in der Userdatenbank verglichen werden und die Händlernummer durch die UID ersetzt werden.... so mal der Dunst im Hirn...

    Mal sehen welche Steps ich noch zusammenbringe,

    So long

  • Sorry für die späte Antwort...

    Land unter und dann noch ne gute Erkältung...durchgestanden, aber keine Optik für nen Monitor...

    Das Thema hat sich dann auch erledigt, in dem Falle war die beste Lösung dann doch direkt ein PHP-Script.

    Wobei ich letzteres dann noch mal irgendwann noch umbasteln will.

    Btw. ...so RICHTIG weder php noch AutoIt
    Aber ich weiss oft, wo das steht was ich wissen muss ,) und dann wird gelernt. Aber wenns um direkt gleich saubere Lösungen geht, hab ich leider nicht die Möglichkeiten, lange rumzuprobieren.
    In anderen Fällen schon .... so ganz unbedarft bin ich natürlich auch nicht, kann mich eigentlich ganz gut durch die Scripts etc. lesen, d. h., mit etwas Ruhe erschließt sich dann schon weitestgehend alles.
    Letzlich gelingt es mir aber immer, die Aufgabe an sich sauber zu definieren.
    Und in speziellen Fällen erhebe ich gar nicht den Anspruch das gleich selber zu können - da gibts dann wieder Fachleute, die das was ich mir in einer Woche zusammenbastle innerhalb einer Stunde auf dem Server haben... ;)

    Aber so als auch so - für mich ist der Lerneffekt jeweils enorm. Und früher oder später finde ich dann doch die Zeit, das nocmal umzusetzen, anzuschauen zu lernen und manchmal dann so zu erweitern, wie ich das gerne hätte...

    So long!