[gelöst] Hash Code von Dateien

Bild Microsoft Dynamics NAV 2013 (aka "NAV 7")

[gelöst] Hash Code von Dateien

Beitragvon tba » 4. Juni 2013 08:30

Hallo,
ich suche eine Möglichkeit (möglichst aus NAV direkt) den Hashcode MD5 einer Datei (für Vergleiche ob die Datei schon existiert/geändert wurde) zu ermitteln.
Hat da evtl. jemand Erfahrung mit?

viele GrĂĽĂźe
Thomas
Zuletzt geändert von tba am 4. Juni 2013 16:19, insgesamt 2-mal geändert.
GrĂĽĂźe aus Berlin
Thomas
Benutzeravatar
tba
Microsoft Partner
Microsoft Partner
 
Beiträge: 430
Registriert: 22. Februar 2007 13:57
Wohnort: Berlin
Realer Name: Thomas Barthel
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2.00 - 2013

Re: Hash Code von Dateien

Beitragvon fiddi » 4. Juni 2013 08:34

Hallo,

da musst du direkt auf .NET zurĂĽckgreifen.

GruĂź, Fiddi
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
fiddi
Moderator
Moderator
 
Beiträge: 7096
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell

Re: Hash Code von Dateien

Beitragvon tba » 4. Juni 2013 16:18

ok, das klappt.
GrĂĽĂźe aus Berlin
Thomas
Benutzeravatar
tba
Microsoft Partner
Microsoft Partner
 
Beiträge: 430
Registriert: 22. Februar 2007 13:57
Wohnort: Berlin
Realer Name: Thomas Barthel
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2.00 - 2013

Re: [gelöst] Hash Code von Dateien

Beitragvon SilverX » 4. Juni 2013 21:57

Der Vollständigkeit halber ein Beispiel:
Code: Alles auswählen
OBJECT Codeunit 50000 Calculate Hash
{
  OBJECT-PROPERTIES
  {
    Date=04.06.13;
    Time=21:49:55;
    Modified=Yes;
    Version List=;
  }
  PROPERTIES
  {
    OnRun=VAR
            SHA1Hash@1000000000 : Text;
            MD5Hash@1000000001 : Text;
          BEGIN
            SHA1Hash := GetSHA1('D:\Temp\File1.txt');
            MD5Hash := GetMD5('D:\Temp\File1.txt');

            MESSAGE('SHA1: ' + SHA1Hash + ', MD5: ' + MD5Hash);
          END;

  }
  CODE
  {

    PROCEDURE GetSHA1@1000000004(Filename@1000000000 : Text) : Text;
    VAR
      SHA1CryptoServiceProvider@1000000002 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Security.Cryptography.SHA1CryptoServiceProvider";
    BEGIN
      SHA1CryptoServiceProvider := SHA1CryptoServiceProvider.SHA1CryptoServiceProvider();
      EXIT(GetHashString(Filename,SHA1CryptoServiceProvider));
    END;

    PROCEDURE GetMD5@1000000000(Filename@1000000000 : Text) : Text;
    VAR
      MD5CryptoServiceProvider@1000000002 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Security.Cryptography.MD5CryptoServiceProvider";
    BEGIN
      MD5CryptoServiceProvider := MD5CryptoServiceProvider.MD5CryptoServiceProvider();
      EXIT(GetHashString(Filename,MD5CryptoServiceProvider));
    END;

    PROCEDURE GetFileStream@1000000001(Filename@1000000000 : Text;VAR ReturnFileStream@1000000001 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.FileStream") : Boolean;
    VAR
      FileMode@1000000002 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.FileMode";
    BEGIN
      ReturnFileStream := ReturnFileStream.FileStream(Filename,FileMode.Open);

      IF NOT ISNULL(ReturnFileStream) THEN
        EXIT(TRUE);

      EXIT(FALSE);
    END;

    PROCEDURE GetHashString@1000000002(Filename@1000000001 : Text;HashAlgorithm@1000000000 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Security.Cryptography.HashAlgorithm") : Text;
    VAR
      FileStream@1000000005 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.FileStream";
      BitConverter@1000000004 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.BitConverter";
      HashString@1000000003 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.String";
      ReturnHash@1000000002 : Text;
    BEGIN
      IF NOT GetFileStream(Filename,FileStream) THEN
        EXIT('');

      HashString := BitConverter.ToString(HashAlgorithm.ComputeHash(FileStream));
      ReturnHash := HashString.Replace('-','');
      FileStream.Close();

      EXIT(ReturnHash);
    END;

    BEGIN
    END.
  }
}


Aber Vorsicht vor Exceptions, wie fehlende Dateien!
Cheers
Carsten


This post is my own opinion and does not necessarily reflect the opinion or view of my employer.
SilverX
Microsoft Partner
Microsoft Partner
 
Beiträge: 1252
Registriert: 16. September 2006 14:07
Realer Name: Carsten Scholling
Arbeitsort: GĂĽtersloh
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2013+

Re: [gelöst] Hash Code von Dateien

Beitragvon tba » 5. Juni 2013 11:16

Hallo Carsten,

da dein Code eleganter aus sieht als meiner, nehme ich deinen :wink:
Hintergrund: ich will 2 aus Navision erzeugte PDF's (saveaspdf) vergleichen ob sie identisch sind.
Da die PDF's aber immer noch einen String /CreationDate [druckdatum/zeit]enthalten muss der vorher noch aus dem Stream entfernt werden.
Falls das mal jemand braucht.
GrĂĽĂźe aus Berlin
Thomas
Benutzeravatar
tba
Microsoft Partner
Microsoft Partner
 
Beiträge: 430
Registriert: 22. Februar 2007 13:57
Wohnort: Berlin
Realer Name: Thomas Barthel
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2.00 - 2013

Re: [gelöst] Hash Code von Dateien

Beitragvon Jörg Nissen » 3. Februar 2015 09:24

Hallo,

ich muss diesen Alten Thread nochmal ausgraben....

Wenn ich dein Beispeil importieren möchte kommt eine Fehlermeldung das "[" folgen muss.
Ich muss bei den Variablentyp text die Länge angeben [250] damit der Import klappt.

Beim kompelieren kennt er "filemode.open" nicht. Ersetzte ich das durch filemode ist die nächste Meldung

"Der aufruf ist zwischen den folgendenMethoden nicht eindeutig:
ComputeHash(system.IOS.Stream Input Stream
und
ComputeHash(byte[] buffer )


fĂĽr welche Navisionversion ist das ?

Wir haben 2009 im Einsatz.
Danke
Jörg
Benutzeravatar
Jörg Nissen
 
Beiträge: 373
Registriert: 7. März 2007 09:39
Wohnort: flensburg
Arbeitsort: Wees
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: [gelöst] Hash Code von Dateien

Beitragvon SilverX » 3. Februar 2015 11:03

Hallo Jörg,

Dynamics NAV 2013+. Siehst du daran, dass für Text keiner Länge angegeben werden muss und mit Enumerations (FileMode) gearbeitet wird.
Cheers
Carsten


This post is my own opinion and does not necessarily reflect the opinion or view of my employer.
SilverX
Microsoft Partner
Microsoft Partner
 
Beiträge: 1252
Registriert: 16. September 2006 14:07
Realer Name: Carsten Scholling
Arbeitsort: GĂĽtersloh
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2013+

Re: [gelöst] Hash Code von Dateien

Beitragvon Jörg Nissen » 5. Februar 2015 13:15

so was hatte ich schon vermutet......
Danke
Benutzeravatar
Jörg Nissen
 
Beiträge: 373
Registriert: 7. März 2007 09:39
Wohnort: flensburg
Arbeitsort: Wees
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: [gelöst] Hash Code von Dateien

Beitragvon Kowa » 19. Februar 2015 01:11

[Beitrag aus dem Forum NAV Tipps & Tricks nach NAV 2013 verschoben, da es eine Frage (und kein Tipp oder Trick) darstellt.]

GruĂź, Kowa
MSDynamics.de-Team
GruĂź, Kai

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, Messenger oder Telefon! DafĂĽr ist dieses Forum da.

Download: Dynamics NAV Object Text Explorer (Alternativlink). MVP Alumni
Benutzeravatar
Kowa
Moderator
Moderator
 
Beiträge: 7854
Registriert: 17. Juni 2005 17:32
Wohnort: Bremen
Realer Name: Kai Kowalewski
Arbeitsort: Osterholz-Scharmbeck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: BC, NAV 2018 bis Navision 2.01

Re: [gelöst] Hash Code von Dateien

Beitragvon besi22 » 22. Januar 2018 17:10

Hallo zusammen,

ich greife das Thema auch nochmal auf.
Habe zwar schon eine PN an SilverX geschrieben.. hier nochmal an die "Allgemeinheit".

Ich muss, anstatt zweier Dateien, Versionsunterschiede von Tabelleninhalten vergleichen. Sprich, jeder Datensatz in der Tabelle wird einen eigenen MD5-Hash haben. Hintergrund ist, dass bei einer Datenübertragung nicht immer alle Datensätze transferiert werden sollen sondern nur die verschoben werden, welche Unterschiede ggü. der vorherigen Versionen aufweisen.

Vielleicht hat ja hier jemand einen Lösungsansatz.
besi22
 
Beiträge: 18
Registriert: 4. Mai 2017 15:20
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2016

Re: [gelöst] Hash Code von Dateien

Beitragvon SilverX » 24. Januar 2018 15:04

Um Datensätze zu vergleichen ist nicht unbedingt ein Hash notwendig. Für den Fall, dass du keine Blob-Inhalte prüfen must, reicht ein einfaches
Code: Alles auswählen
RecRef1.GETTABLE(Rec1);
RecRef2.GETTABLE(Rec2);

IF FORMAT(RecRef1) <> FORMAT(RecRef2) THEN BEGIN
  [...]
END;
aus.
Cheers
Carsten


This post is my own opinion and does not necessarily reflect the opinion or view of my employer.
SilverX
Microsoft Partner
Microsoft Partner
 
Beiträge: 1252
Registriert: 16. September 2006 14:07
Realer Name: Carsten Scholling
Arbeitsort: GĂĽtersloh
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2013+

Re: [gelöst] Hash Code von Dateien

Beitragvon Kowa » 24. Januar 2018 15:59

…bzw. bei großen Sätzen alternativ so.
GruĂź, Kai

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, Messenger oder Telefon! DafĂĽr ist dieses Forum da.

Download: Dynamics NAV Object Text Explorer (Alternativlink). MVP Alumni
Benutzeravatar
Kowa
Moderator
Moderator
 
Beiträge: 7854
Registriert: 17. Juni 2005 17:32
Wohnort: Bremen
Realer Name: Kai Kowalewski
Arbeitsort: Osterholz-Scharmbeck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: BC, NAV 2018 bis Navision 2.01

Re: [gelöst] Hash Code von Dateien

Beitragvon fiddi » 24. Januar 2018 16:22

Oder, wenn man es sicherstellen kann, das mit INSERT(TRUE) bzw. MODIFY(TRUE) gearbeitet wird, dann kann man auch einen DateTime- Feld in die Tabelle einbauen, die im Trigger mit der aktuellen Zeit versehen wird.

Man muss sich dann nur noch den Timestamp des letzten verarbeiteten Datensatzes irgendwo merken, und beim nächsten Lauf nur noch die mit einem neueren Timestamp verarbeiten.

GruĂź Fiddi
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
fiddi
Moderator
Moderator
 
Beiträge: 7096
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell

Re: [gelöst] Hash Code von Dateien

Beitragvon tba » 21. April 2020 12:54

Nachtrag:
den Hashcode benutze ich, um nur die Änderung auf ausgewählten Feldern zu vergleichen. Sonst reicht natürlich ein Timestamp.
GrĂĽĂźe aus Berlin
Thomas
Benutzeravatar
tba
Microsoft Partner
Microsoft Partner
 
Beiträge: 430
Registriert: 22. Februar 2007 13:57
Wohnort: Berlin
Realer Name: Thomas Barthel
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2.00 - 2013


ZurĂĽck zu NAV 2013

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron