IP-Berechnung in Navision

27. Januar 2010 12:28

Hallo

Wer hat schon mal IP-Adressen in Navision berechnet?

Ich habe ein Range an IP-Adressen. Es sind nur jede 32ste gültig, z.B. 172.168.0.0, 172.168.0.32, 172.168.0.64 etc. Diese IP ist z.B. beim Customer eingetragen. Ich muss nun eine Funktion erstellen, die mir für neue Customer eine freie IP heraussucht (d.h. noch bei keinem Customer eingetragen). In welchen Datentyp speichere ich die IP-Adresse am Besten? Wäre es effizienter die IP in Oktett zu zerlegen oder IP in eine Ganzzahl umzuwandeln?

Besten Dank für die Anregungen. Bitte keine SQL-Lösungen.

System: Navision 4.00 SP2 mit SQL Server 2005

Re: IP-Berechnung in Navision

27. Januar 2010 16:41

ich pers. würde 4 Felder anlegen die je ein Oktet in Dezimal anzeigen. Für die berechnung wuerde ich dann eine Codeunit erstellen die dafuer zustaendig ist.

Re: IP-Berechnung in Navision

27. Januar 2010 17:16

ich würde es wahrscheinlich über eine zusätzliche Tabelle lösen mit 2 Spalten, IP und Customer ID, also ähnlich wie zb die Textbausteine für Artikel. Somit wäre sichergestellt dass eine IP nur 1 Kunden zugewiesen sein kann, aber 1 Kunde auch mehrere IPs haben kann. Die Tabelle würde ich dann vorbefüllen, entweder direkt in NAV berechnet, oder von extern aus einem Subnet Calc zb importiert.

Re: IP-Berechnung in Navision

27. Januar 2010 18:12

Hallo Michelle,

die IP-Adresse ist eigentlich nichts anderes als ein 32-Bit- Unsigned Integer. Da wir Menschen aber so unsere Probleme mit großen Zahlen haben, haben die Macher von TCP/IP an uns gedacht, und das ganze in eine lesbare Form mit den 4 Zahlen und den Punkten gebracht.

Das heißt dein Feld könnte ein BigInteger z.B. IP64 sein (integer geht nicht, weil der nur 31 Bit für positive Werte kann), das du in deine Customer-Tabelle einträgst. Darauf legst du einen Schlüssel. Wenn du jetzt die letzte IP benötigst, machst du bei gesetztem Schlüssel ein
Code:
Customer.Findlast
oder
Code:
Customer.find('+').


Deine neue IP-Adresse ist dann einfach
Code:
neueIP := CustomerIP + 32;

Eine lesbare IP-Adresse bekommst du dann mit folgender Funktion z.B.
Code:
IPString := getIPString(ip64):

getIPString:
Code:
for i := 1 to 4 do
begin
  if i >1 then
    resultstr := '.'+resultstr;
  resultstr := format(ip64 mod 256)+ resultstr;
  ip64 := ip64 div 256;
end;


Gruß, Fiddi
Zuletzt geändert von fiddi am 1. Februar 2010 14:36, insgesamt 1-mal geändert.

Re: IP-Berechnung in Navision

29. Januar 2010 14:27

nur so als Anmerkung:
Will kein Besserwisser sein, aber die IP besteht aus 4 Elementen a 8 Bit (1 Byte = 256 Zeichen) also sollten 4x8=32 Bit Integer reichen.
Um das Problem mit der Ganzzahligkeit zu umgehen ist ein 64Bit Integer aber vielleicht doch besser. :)

mfg,
winfy

Re: IP-Berechnung in Navision

1. Februar 2010 14:36

@winfy,

genau das ist der Grund :wink:.

Aber ich habe meine Fehler in dem Beitrag korrigiert. :wink:

Gruß, Fiddi