26. Januar 2018 16:04
IF REC.FIND('-') THEN
REPEAT
REC.CALCFIELDS("Hash BLOB");
CLEAR(REC."Hash BLOB");
REC.MODIFY;
REC."Hash MD5" := '';
CLEAR(Test);
CLEAR(Ostream);
CLEAR(SInStream);
Text := FORMAT(REC);
BIGTEXTvariable.ADDTEXT(Text);
REC."Hash BLOB".CREATEOUTSTREAM(Ostream);
BIGTEXTvariable.WRITE(Ostream);
REC.CALCFIELDS("Hash BLOB");
IF REC."Hash BLOB".HASVALUE THEN BEGIN
REC."Hash BLOB".CREATEINSTREAM(SInStream);
CLEAR(BIGTEXTvariable);
BIGTEXTvariable.READ(SInStream);
MESSAGE('%1',BIGTEXT); //MESSAGES nur zu Testzwecken !!
MD5 := MD5.Create();
MD5.ComputeHash(SInStream);
HashKey := BTcon.ToString(MD5.ComputeHash(SInStream));
HashKey := DELCHR(HashKey, '=', '-');
REC."Hash MD5" := HashKey;
MESSAGE('%1',HashKey);
REC.MODIFY;
END;
UNTIL REC.NEXT = 0;
26. Januar 2018 16:49
OBJECT Codeunit 50094 MD5Test
{
OBJECT-PROPERTIES
{
Date=26.01.18;
Time=15:45:17;
Modified=Yes;
Version List=;
}
PROPERTIES
{
OnRun=VAR
Customer@1000000000 : Record 18;
MD5Old@1000000001 : Text;
BEGIN
Customer.FINDSET;
REPEAT
MD5Old := Customer.MD5;
Customer.MD5 := '';
Customer.MD5 := GenerateMD5(FORMAT(Customer)));
IF Customer.MD5 <> MD5Old THEN
Customer.MODIFY;
UNTIL Customer.NEXT = 0;
END;
}
CODE
{
LOCAL PROCEDURE GenerateMD5@1000000003(Text@1000000000 : Text) MD5Text : Text;
VAR
MD5@1000000001 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Security.Cryptography.MD5";
BTcon@1000000002 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.BitConverter";
InStream@1000000003 : InStream;
OutStream@1000000005 : OutStream;
TempBlob@1000000004 : TEMPORARY Record 99008535;
BEGIN
TempBlob.Blob.CREATEOUTSTREAM(OutStream);
OutStream.WRITE(Text);
TempBlob.Blob.CREATEINSTREAM(InStream);
MD5 := MD5.Create();
MD5.ComputeHash(InStream);
MD5Text := BTcon.ToString(MD5.ComputeHash(InStream));
MD5Text :=DELCHR(MD5Text, '=', '-');
END;
BEGIN
END.
}
}
29. Januar 2018 15:13
25. Februar 2020 13:04
Ted hat geschrieben:Dein Code sieht ein wenig danach aus als wenn du einfach alles zusammen kopiert hast was du zu dem Thema gefunden hast. [...]
Um dir fix unter die Arme zu greifen, der Code macht was du brauchst, du solltest dennoch verstehen wieso weshalb da was gemacht wird.
LOCAL PROCEDURE GenerateMD5@1000000011(String@1000000004 : Text) : Text;
VAR
MD5@1000000003 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Security.Cryptography.MD5";
BTcon@1000000002 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.BitConverter";
MD5String@1000000006 : Text;
MemoryStream@1000000007 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.MemoryStream";
Encoding@1000000008 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Text.UTF8Encoding";
Bytes@1000000010 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Array";
BEGIN
MemoryStream := MemoryStream.MemoryStream;
Encoding := Encoding.UTF8Encoding();
Bytes := Encoding.GetBytes(String);
MemoryStream.Write(Bytes,0,Bytes.Length);
MemoryStream.Position := 0;
MD5 := MD5.Create;
MD5String := BTcon.ToString(MD5.ComputeHash(MemoryStream));
MD5String := DELCHR(MD5String, '=', '-');
MD5String := LOWERCASE(MD5String);
EXIT(MD5String);
END;
26. Februar 2020 20:15
besi22 hat geschrieben:...
Die Datensätze sind durchaus unterschiedlich und müssen Zeile für Zeile, bzw. Datensatz für Datensatz auf ihre "Version" geprüft und verglichen werden.
Im Grunde "If rec <> xrec dann Datensatz überschreiben".
FORMAT(Rec) = FORMAT(xRec)