Schnittstelle

Alles, was den Programmierer beschäftigt

Moderator: SYNERPY

Antworten
Overlord
Beiträge: 16
Registriert: Mo Aug 07, 2006 10:49 am

Schnittstelle

Beitrag von Overlord »

Hallo,

ich würde gerne wissen, wie man das Realisieren einer Schnittstelle angeht.
Ich habe einen Online-Shop und möchte gerne immer einen Abgleich zwischen diesem und AvERP haben, speziell beim Einstellen von neuen Artikeln, Eingehen von Bestellungen etc.

Im Grunde handelt es sich ja um eine reine Datenbank-Geschichte, aber wie geht man da genau vor?

Soll ich einfach sowohl im Shop, als auch im AvERP immer 2 aufeinander folgende Datenbank-Abfragen absetzen, die im Endeffekt das gleiche tun (abhängig natürlich von der Datenbank-Struktur etc.)?

Oder eine externe "Plattform", wo man die Kategorie zB. Artikel auswählt, dann die Richtung des Abgleichs Shop->WaWi oder andersherum und dann so einen Abgleich ausführt? Im Prinzip wäre das ja nicht geeignet, weil man immer nur nach einem manuellen Abgleich den gleichen Stand hätte (Klar, könnte man den zeitlich automatisch ausführen lassen, aber gut wäre dieses ja wohl auch nicht).

Was wäre eine optimale Lösung? Danke im Voraus :)
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

Die optimale Lösung wäre ein Programm, das mit beiden Datenbanken verbunden ist, und neue bzw. veränderte Datensätze abgleicht.
Es würde aber sicherlich auch reichen, wenn man neue Bestellungen aus dem Shop und neue Artikel aus AvERP alle x Minuten abgleicht. Dazu müssten die neuen Daten exportiert und in das andere System importiert werden.
Overlord
Beiträge: 16
Registriert: Mo Aug 07, 2006 10:49 am

Beitrag von Overlord »

Danke für deine Antwort.

Habe mir auch überlegt, dass ich eigentlich nur Bestellungen mehr oder weniger sofort im AvERP anzeigen lassen möchte.
Reinsetzen von neuen Produkten oder neuen Kunden etc. brauch ja nicht wirklich sofort geschehen, was dann im Gegensatz zu den Bestellungen irgendwann dann manuell angestoßen werden kann.
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

Nun ja, der neue Kunde meldet sich ja im Shop an, und ohne neuen Kunden, keine Bestellung (denn die geht ja an den Kunden). Also müsste vor der Übermittlung der Bestellungen vom Shop immer eine Übermittlung der neuen Kunden erfolgen...
Overlord
Beiträge: 16
Registriert: Mo Aug 07, 2006 10:49 am

Beitrag von Overlord »

Ja, gute Anmerkung.
Da gibt es bestimmt zahlreiche Dinge, die zu beachten sind!
Das kommt auf jeden Fall auf die Check-Liste.
Vielleicht auch dieses automatisieren, damit das wichtigste, was ja die Bestellungen sind, reibungslos abläuft.
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

Manuell würde ich hier so wenig wie möglich machen wollen. Einerseits ist das Arbeit, andererseits eine Fehlerquelle mehr.

Entweder ein Programm, dass beide Datenbanken miteinander synchronisiert, oder einen automatischen Export aus AvERP und dem Shop in ein Verzeichnis, das dann automatisch abgearbeitet wird. Denkbar wäre es, Tabelle in AvERP anzulegen, die identisch zu denen im Shop sind. In AvERP kann man dann die Tabellen automatisch füllen, also wenn ein Shopartikel beispielsweise verändert oder angelegt wird, dann wird er in die Tabellen eingetragen. Die Daten kann man dann einfach als SQL-INSERT- oder -UPDATE-Befehl exportieren, mit einem SQL-Importer dann einfach in den Shop übernehmen. Das gleiche für Bestellungen vom Shop. Diese auch einfach als SQL in eine Datei schreiben. Die Datei dann in neue Tabellen in AvERP einlesen und über die Trigger Aufträge etc anlegen.
Overlord
Beiträge: 16
Registriert: Mo Aug 07, 2006 10:49 am

Beitrag von Overlord »

admin hat geschrieben:Denkbar wäre es, Tabelle in AvERP anzulegen, die identisch zu denen im Shop sind. In AvERP kann man dann die Tabellen automatisch füllen, also wenn ein Shopartikel beispielsweise verändert oder angelegt wird, dann wird er in die Tabellen eingetragen. Die Daten kann man dann einfach als SQL-INSERT- oder -UPDATE-Befehl exportieren, mit einem SQL-Importer dann einfach in den Shop übernehmen. Das gleiche für Bestellungen vom Shop. Diese auch einfach als SQL in eine Datei schreiben. Die Datei dann in neue Tabellen in AvERP einlesen und über die Trigger Aufträge etc anlegen.
Diese Idee gefällt mir sehr gut!
Werde mir das mal von der Umsetzung her durch den Kopf gehen lassen.

Denke mal, dass dieser Thread noch recht groß wird ;)
Overlord
Beiträge: 16
Registriert: Mo Aug 07, 2006 10:49 am

Beitrag von Overlord »

Werde es wohl so machen, wie du es vorgeschlagen hast. Also eigentlich nichts manuell.

Was aber manuell gemacht werden muss und das ist jetzt meine erste Aufgabe ist AvERP auf den Stand des Shops zu bringen.
Denke mal, dass das nur "manuell" zu machen ist.

Hoffe, es ist in Ordnung, wenn ich hier poste, wie ich vorgehe und ne Menge Fragen stelle ;). Vielleicht ist es ja auch für andere hilfreich...

Folgende Hauptbereiche möchte ich gerne an den Shop anpassen:

- Kunden
- Artikel
- Bestellungen

Zu speziellen Bereichen, wie Sonderangebote etc., die im Shop eine eigene Tabelle besitzen möchte ich erst mal aussen vor lassen.

Habe mich jetzt in die Datenbank eingearbeitet. Habe leider keine Doku dazu, so dass ich das alles so zu erfassen versucht habe.
Wäre über mögliche Korrekturen sehr dankbar.

KUNDEN
Um einen funktionellen Kunden in AvERP zu erstellen sind folgende Haupttabellen zu füllen:

- Kundenstamm (FRMV_BKUNDE)
- Adressstamm (FRMV_BADR)

Da in Kundenstamm die ID von Adressstamm erforderlich ist, muss wohl die Tabelle Adressstamm zuerst gefüllt werden.

ARTIKEL
Hier wird es schon ein wenig komplizierter, da sehr viele kleinere Tabellen nötig sind:

- Artikelstamm (hier bin ich mir nicht sicher, da diese in der DEMO leer ist)
- Hauptartikel (siehe oben)

Welches ist denn hier die Haupttabelle?

- Warenkorb Verkauf
- Bilder (nur bmp, im Shop nur jpeg -> Probleme?)
- Sachmerkmale (hier müssten die spezifischen Attribute anzugeben sein)
- Kundenpreise

Habe ich was wichtiges vergessen, um einen Artikel funktionell zu machen?

BESTELLUNGEN

Haupttabelle:
- Angebots- und Auftragsverwaltung (FRMV_BAUF)
-> Auftrags-Nr (Woher kommt diese?)
-> Kundenauftrag - Auftragsart (welche Tabelle? bzw. wo im Menü zu finden)
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

Erst mal ein kleiner Schnellkurs in Sachen AvERP:

Eine Maske baut immer auf einer View auf.
Eine View ist ein Zusammenschluss aus mehreren Tabellen und baut auf einer Tabelle auf.

Den Namen der Maske bekommt man unter Hilfe->Maskenname.

Für den Artikel ist das beispielsweise "FRMV_BSA". Die Maske "FRMV_BSA" baut auf einer View auf, und das ist leicht abzuleiten, die den Namen "V_BSA" trägt, also alles nach dem "FRM". Die View "V_BSA" baut auf der Tabelle "BSA" auf, also alles nach dem "_".

Datentabellen MÜSSEN mit einem "B" anfangen, Views MÜSSEN mit "V_B" anfangen und Datenmasken MÜSSEN mit "FRMV_B" anfangen.
Die Tabellennamen sind sprechend: BSA = "B" muss immer sein, "SA" = "Stammdaten - Artikel"; "BAUF" = "Aufträge", "BAUFPO" = "Auftragspositionen" etc

Jetzt zu dem Problem:
Um einen Kunden anzulegen, braucht man eine Preisliste und eine Adresse. Die Standardpreisliste, die man hier wahrscheinlich immer erst einmal verwenden würde ist aber schon im Firmenstamm definiert.

Um einen Artikel anzulegen, braucht man eigentlich nur die Mengeneinheiten. Einkaufs- und Verkaufswarengruppe sind praktisch in der Maske, da diese die Vorbelegungen für die Merkmale liefern, sind aber nicht zwingend notwendig. Lager zum Artikel etc. legen sich automatisch über die Trigger (also Aktionen, die in der Datenbank ausgeführt werden, wenn in die Tabelle etwas eingefügt oder bearbeitet oder gelöscht wird) der Tabelle an.

Um einen Auftrag anzulegen (Im Menü Verkauf->Angebots- und Auftragsverwaltung), muss die Tabelle "BAUF" gefüllt werden. Die Auftragsnummer vergibt sich automatisch. Liefer- und Rechnungsadressen aufgrund des Kunden. Auftragsart und alles andere kann man für den Fall des Shops sicherlich fest vorbelegen (also Währung, Teillieferung (J/N) etc).
Die Tabelle "BAUFPO" sind die Auftragspositionen. Hier muss man Artikel-ID, Menge und ggf. abweichend Preis eingeben.

Wie schon gesagt, würde ich die Tabellen des Shops 1 zu 1 im AvERP abbilden. Wenn diese Tabellen dann gefüllt werden, werden alle bestehenden AvERP-Tabellen über Trigger gefüllt. Hier bekommt man schon eins auf die Finger, wenn man ein Pflichtfeld vergessen hat. Kann also nichts passieren.

Auftragsnummern vergibt das System selbstständig. In der Maske "Nummernkreise" kann man definieren, wie das ausschauen soll.

Bilder sind auch kein Problem. Diese kann man im AvERP als jpg hinterlegen, aber leider dann nicht anschauen. Datentechnisch aber kein Problem.

Um welchen Shop handelt es sich eigentlich?
Overlord
Beiträge: 16
Registriert: Mo Aug 07, 2006 10:49 am

Beitrag von Overlord »

Super Support, danke!

Ja, mit den Tabellennamen hatte ich mich ein wenig blöd ausgedrückt, mir war schon klar, dass das der Maskenname und nicht der Tabellenname war. Bitte das zu entschuldigen :)

Werde das auch jetzt mit Triggern machen. Habe zwar noch nie mit Triggern gearbeitet, aber da liest man sich ja schnell ein.
Den ersten Abgleich könnte ich ja dann auch direkt mit Triggern machen. Also ein Skript das komplett die Daten aus dem Shop holt und dann die Shop-Tabellen im AvERP füllt (dazu braucht man ja keine Trigger) und im gleichen Verfahren mit Triggern dann in die AvERP-Tabellen schiebt.

Die SQL-Abfragen im Shop aber dann doch doppelt absetzen, also in den Shop und dann in die Shop-AvERP-Tabellen oder kann man da auch Trigger verwenden?

Werde mich jetzt also erst mal mit Triggern beschäftigen und mir die relavanten (denn alle brauche ich ja nicht, oder sicherheitshalber gleich komplett?) Tabellen des Shops in der AvERP-Datenbank nachbauen und mich dann noch mal melden :)
Denn dann wird es ja erst richtig interessant.

P.S.: Es handelt sich um einen xt:Commerce-Shop (MySQL).

Und vielen Dank noch mal!
Overlord
Beiträge: 16
Registriert: Mo Aug 07, 2006 10:49 am

Beitrag von Overlord »

So...

Hatte jetzt eigentlich vor alle Tabellen von xt:Commerce zu exportieren und dann den SQL-Code mit der Script Executive von IBExport zu importieren.

Nach dem CONNECT Befehl zur AvERP-Datenbank kommen jetzt meine CREATE TABLE Anweisungen, die aber leider nicht funktionieren.

Habe wirklich alle SQL-Formate ausprobiert in Bezug auf Hochkommas und Anführungszeichen bzw. deren Weglassen, wie auch bezüglich Schreibweise bekomme aber immer einen Fehler, der sich meist auf meine Klammern bezieht, wenn ich einen Datentypen näher beschreiben möchte.

Also eigentlich immer den Character ( bemängelt.

Code: Alles auswählen

CONNECT '127...';

CREATE TABLE BTEST(
   TESTID INT(11) NOT NULL,
   TESTFELD1 VARCHAR(128) NOT NULL DEFAULT '',
   PRIMARY KEY (TESTID)
);

Wo liegt da der Fehler?

Danke im Voraus
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

"TESTID INT(11)" kennt FireBird nicht. Für Firebird ist das ein INTEGER.

Am besten ist es sicherlich, wenn die Tabellen von Hand im IBExpert angelegt werden. Dabei auch bitte die vorhandenen Domains verwenden. Domains sind vordefinierte Felddefinitionen. Die von AvERP fangen mit "D_" an.

Alternativ dazu: Das Skript der Tabellen einfach mal an uns schicken. Dann können wir die Tabellen anlegen, wenn wir eine ruhige Minute haben.
Overlord
Beiträge: 16
Registriert: Mo Aug 07, 2006 10:49 am

Beitrag von Overlord »

Hi,

INTEGER hatte ich auch ausprobiert, trotzdem meckert er die Klammer an.

Wenn ich statt dem Datentyp eine von euren Domains nehme, klappt es.

Das mit dem Skript schicken wäre auch ne super Lösung, wenn das für euch zeitlich machbar ist.
Sonst mache ich es natürlich gerne selber.

Im Prinzip weiss ich ja jetzt wie:

Statt Datentyp ne Domain, wenn nicht vorhanden, dann leg ich diese nach eurem Schema an und halt alle Tabellennamen groß und mit B beginnend machen.
Werde das dann wohl so machen: BXTCTABELLENNAME
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

Sehr schön wäre
BXTCxxxx

Also so, das alle Tabellen mit "BXTC" anfangen. Dann weiß man was wohin gehört und bekommt keine Probleme mit bestehenden Tabellen.

Am besten und schnellsten wäre es wohl, wenn du die Tabellen machst, uns dann aber das Skript schickst, damit wir nochmal über die DAtentypen rüberschauen können

Noch eins, wenn du die Tabellen machst, bitte immer folgende Felder in jede Tabelle einfügen:

ID D_ID
BENUTZER D_BENUTZER
GESPEICHERT D_GESPEICHERT

Damit ist die Sache dann AvERP-Konform. Sollte XTC auch schon ein ID-Feld haben, dann würde ich das XTC_ID nennen. AvERP braucht UNBEDINGT das Feld "ID" als Primärschlüssel.


Zum Integer-Problemchen:
"INTEGER" nicht "INTEGER(11)".
Overlord
Beiträge: 16
Registriert: Mo Aug 07, 2006 10:49 am

Beitrag von Overlord »

Ok, wird gemacht, Chef.
BXTCxxxx hatte ich ja oben geschrieben.

Habe Dir mal ne PM geschickt zu meiner aktuellen Situation.
Bzw. mache ich jetzt :)
Antworten