AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Verschiedene Kundenversionen in einem Programm pflegen??!
Thema durchsuchen
Ansicht
Themen-Optionen

Verschiedene Kundenversionen in einem Programm pflegen??!

Ein Thema von Polarwar · begonnen am 13. Feb 2006 · letzter Beitrag vom 15. Feb 2006
Antwort Antwort
Seite 1 von 3  1 23      
Polarwar

Registriert seit: 14. Dez 2005
39 Beiträge
 
Delphi 2006 Enterprise
 
#1

Verschiedene Kundenversionen in einem Programm pflegen??!

  Alt 13. Feb 2006, 15:45
Hallo zusammen,

ich habe da mal wieder eine Frage, habe auch versucht über die SuchFkt. erfolgreich zu sein, was aber nicht geklappt hat.

Ich habe da ein Projekt was bei verschiedenen Kunden eingesetzt wird. Viele kennen es vielleicht, der eine Kunde möchte noch dieses, der andere noch das.... Wie bekomme ich nun eine vernünftige Verwaltung hin, ohne mit 10 verschiedenen Kundenvarianten arbeiten zu müssen. Denn wenn nun bei einer grundlegenden Fkt. etwas geändert werden muß, muß ich immer in 10 Versionen die gleiche Änderung durchführen!

Mir schwebt da eine Lösung vor, in der ich ein Compilat habe bei dem ich auf einer Supervisorseite, die Einstellungen mache, wie es denn nun bei dem Kunden auszusehen hat und wie das Programm reagiert. Doch hier wird es auch schon wieder tricky und verdammt kompiliziert!??!

Wie macht ihr denn soetwas!??!

Gruß und schon mal Vielen Dank für die Hilfe..
Polarwar
Wir haben den Bezug zur Realität verloren, aber die findet uns schon wieder!
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.640 Beiträge
 
#2

Re: Verschiedene Kundenversionen in einem Programm pflegen??

  Alt 13. Feb 2006, 15:54
hrm.. spontan würde mir einfallen, die Funktionen die pro Kunde unterschiedlich sind, in dll's auszulagern. Somit definierst Du einmalig die schnittstelle, ziehst die orginialimplementierung in eine allgemein DLL und lieferst dies an alle Kunden aus. Der spezial-Kunde mit der Änderung bekommt seine persönliche eigene DLL ausgeliefert.

Bei weiteren Änderungen muss Du dann nur an der dll für den einen Kunden arbeiten, eine grundlegende Änderung in dem Modul wird in die orginal-DLL eingepflegt und an alle Kunden mitverteilt.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

Re: Verschiedene Kundenversionen in einem Programm pflegen??

  Alt 13. Feb 2006, 15:59
Zitat von Phoenix:
hrm.. spontan würde mir einfallen, die Funktionen die pro Kunde unterschiedlich sind, in dll's auszulagern. Somit definierst Du einmalig die schnittstelle, ziehst die orginialimplementierung in eine allgemein DLL und lieferst dies an alle Kunden aus. Der spezial-Kunde mit der Änderung bekommt seine persönliche eigene DLL ausgeliefert.

Bei weiteren Änderungen muss Du dann nur an der dll für den einen Kunden arbeiten, eine grundlegende Änderung in dem Modul wird in die orginal-DLL eingepflegt und an alle Kunden mitverteilt.
Ganau so haben wir das auch.
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Polarwar

Registriert seit: 14. Dez 2005
39 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: Verschiedene Kundenversionen in einem Programm pflegen??

  Alt 13. Feb 2006, 16:30
Gedacht habe ich auch schon daran, nur konnte ich mich mit dem Gedanken nicht anfreunden.

Es geht nicht nur um funktionalität, auch der Aufbau der Form kann unter Umständen unterschiedlich sein,
weil bei einem Kunden das Hauptaugenmerk auf etwas gaaanz anderem liegt, oder viel mehr vertieft wird.
(Datenbanktechnisch, Abfragen, etc...)
Desweiteren versuche ich immer meine Programme komplett in der Entwicklungsumgebeung auch bedienbar zu
halten, damit ich zu jeder Zeit alles Testen kann. Naja, mit gewissen Vorgaben natürlich.

Gibt es denn noch andere denkbare Alternativen?!?
Wir haben den Bezug zur Realität verloren, aber die findet uns schon wieder!
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Verschiedene Kundenversionen in einem Programm pflegen??

  Alt 13. Feb 2006, 16:52
Wir haben dafür eine Art Db-Gestützte "Registry" verwendet (Selbstreferenzierte Tabelle mit Parent/Child). Diese lässt sich dann über Funktionen abfragen / setzen.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.640 Beiträge
 
#6

Re: Verschiedene Kundenversionen in einem Programm pflegen??

  Alt 13. Feb 2006, 17:06
Auch Forms kann man ohne weiteres in DLL's auslagern... Und eigentlich ist das der Königsweg.

Hrm.. andere Alternativen...

Sehr, sehr, sehr unschön: Alle Funktionalitäten in ein Programm einbauen und je nach Konfiguration im Programmverlauf eben anstelle von Form X halt Form Y laden...

Problematisch wird es, wenn sich tatsächlich grundlegende Funktionalitäten ändern und man auch nur eine kleine Sonderbehandlung bei Kunde xyz vergisst: Das führt zu ganz unschönen Bugs, die extrem schwer zu lokalisieren sind und schlimmstenfalls sogar den Datenbestand gefährden.


Bevor man das anfängt ist es wirklich besser: Ein Build pro Kunde. Das kann man noch relativ gut mit automatisierten Build-prozessen handhaben, wenn man eine gemeinsame Codebasis hernimmt und die Änderungen für einen bestimmten Kunden per DIFF integriert.

Will heissen: Originalsourcen nehmen - Kundenänderung einbauen - diff gegen Original fahren und ablegen.

Beim Build-Prozess dann immer Originalsourcen hernehmen, build, diff Kunde 1 laufen lassen, build, originalsourcen hernehmen, diff Kunde 2 laufen lassen, build... Dauert etwas länger, und man muss natürlich aufpassen dass man wenn man den originalstand ändert auch alle diff's zu aktualisieren und ggf. in einigen Ständen nochmal von Hand nachzuarbeiten, aber das ist deutlichst weniger Buganfällig als alles in ein Projekt einzubauen.

*brrr* Da schaudert es mir schon bei dem Gedanken sowas verwalten zu müssen...

Nein: Die richtige und sichere und am einfachsten zu verwaltende Methode ist sicher die mit den in Module ausgelagerte DLL's. Und natürlich kannst Du auch in eigene DLL's reindebuggen und das aus der IDE raus lauffähig zu haben. Haben wir mit einem Projekt mit einem Gesamtumfang von ca. 1,6 Million Zeilen damals auch gehabt. Alles andere wäre projekttechnischer Selbstmord.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#7

Re: Verschiedene Kundenversionen in einem Programm pflegen??

  Alt 13. Feb 2006, 17:25
Zitat von Phoenix:
Auch Forms kann man ohne weiteres in DLL's auslagern... Und eigentlich ist das der Königsweg.
Aber nicht bei MDI-Anwendungen, da gehts dann vernünftig nur mit BPL's!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Verschiedene Kundenversionen in einem Programm pflegen??

  Alt 13. Feb 2006, 17:36
Man könnte auch mit Compiler-Switches Arbeiten. Da sollte man aber aufpassen, dass man da nicht die Übersicht verliert.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: Verschiedene Kundenversionen in einem Programm pflegen??

  Alt 13. Feb 2006, 17:37
Zitat von Phoenix:
Sehr, sehr, sehr unschön: Alle Funktionalitäten in ein Programm einbauen und je nach Konfiguration im Programmverlauf eben anstelle von Form X halt Form Y laden...
Das ist aber der Weg, den wir erfolgreich gehen.
Es gibt eben zunehmend mehr Optionen, die steuern wie sich das Programm verhalten soll.
Allerdings wird von uns nicht jeder Firlefanz eingebaut, sondern vorher nachgebohrt,
warum ein Kunde diese oder jene Funktion haben möchte.
Wenn man verstanden hat, warum ein Kunde etwas haben möchte, kommt man häufig auf eine allgemeingültige
Lösung.
Beispiel: der Kunde möchte in einem DB-Grid ein bestimmtes Feld nicht sehen; es stört ihn.
die allgemeine Lösung: ALLE DBGrids lassen sich nun konfigurieren auf Sichtbarkeit und Reihenfolge der Felder.
Die Konfiguration wird in einer INI-Datei gespeichert.

Für ganz "krumme Dinger" kann der Endkunde seine Spezialitäten in VB- oder Javascript abhandeln.
Dazu wird der Windows Scripting Host verwendet.
Es gibt vordefinierte Script-Funktionen mit Übergabeparametern.
Wenn die Scriptfunktion in der Datei vorhanden ist, dann wird sie ausgeführt.
Die Übergabeparameter sind COM/DCOM-Interfacezeiger; damit kann man relativ komplexe Dinge erledigen.
Code:
' VB-Script Beispiel
' Kunde möchte Lieferschein-Nr eingeben und mit der Orginal-Lieferscheinnummer vergleichen
' falls unterschiedlich muss ein Freigabepasswort eingegeben werden
' oder der Vorgang wird geblockt
Function NachAuftragLaden2(Application, Auftrag, AuftragDetail)
   Input = InputBox("Bitte Lieferscheinnr. eingeben", "Lieferscheinnr-Eingabe")
'  MsgBox "NachAuftragLaden (Eingabe: "& Input &")"
   if Auftrag.LieferNr <> Input then
      if Application.QueryUnlockPW = False then 'Freigabepasswort OK ?
'      err.Raise 99, "User Script", "Lieferscheinnummer und Passwort falsch!"
         Application.Exception.Init "Lieferscheinnummer und Freigabe-Passwort falsch!"
      end if
   end if
Andreas
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#10

Re: Verschiedene Kundenversionen in einem Programm pflegen??

  Alt 13. Feb 2006, 20:26
Also wir haben hier alle aufgelistenten wege schon versucht und sind dann am Ende ednlich bei DLLs angekommen.

Ich kann dazu nur saagen mit CompilerSwitches zu arbeiten bringt die IDE zu durcheinander weil sie nicht merh weis wass Sie debugen soll.

BPL mag schön sein hab aber mich leider nie richtig mit beschäftigt(werd ich wohl auch nie).

Für jeden Kunden ein eigenes Build (vergiss es) das bringt nur Ärger, änderst du was im MainProg und alle sollen es haben kannste alles ändern.

DLLs geht auch mit MDI man kann alles machen damit genau wie mit BPL, einzigster nachteil die DLLs sind recht gross weil alles in jeder DLL ist. der Grosse Vorteil ist es ist einfach man muss nicht gucken das alle Delphi BPLs da sind die man braucht und man hat alles getrennt.

Und nun was wir gemacht haben wir haben 2 Wegen in einem also einmal die DLLs und dann noch für kleine änderungen Switches im Code (keine Compiler Switches) eben für kleine anpassungen z.b. eine zusätzliches Feld im Kundenstamm dafür lohnt sich nicht der aufwand ein Extra Modul für den Kunden zu machen.

Und die DB da haben wir einen SQL Parser Geschrieben der Lokale SQL Files liest und dann die DB den Fiels anpasst.
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz