Iceboone 2 Geschrieben 5. April 2020 Melden Teilen Geschrieben 5. April 2020 Hallo, ich brauche mal eure Hilfe. Ich bin Anwender eines Maklerverwaltungsprogramms. Dieses Programm ist in der Lage Skripte auszuführen, um beispielsweise die zum Programm gehörende SQL-Datenbank zu manipulieren bzw. Korrekturen vorzunehmen. Ich habe auch Skripte die funktionieren und ich habe diese auch schon verändert, aber leider ist es nicht ganz klar welche Sprache dem ganzen zu Grunde liegt. Es erscheint mir als wäre es Windows Script, über welches ich in VBS oder JScript abspringen kann. Aber wie gesagt wissen tue ich es nicht. Hier ein Beispiel für ein funktionierendes Skript: function ProcessDataSet(Dataset){ var vbHelper = new VbScriptHelper(); var vm1 = ''; var vm2 = ''; var vm3 = ''; vm1 = vbHelper.InputBox("Bitte geben Sie die erste Vermittlernummer ein die bei den markierten Vertraegen hinterlegt werden soll.","Vermittler 1"); vm2 = vbHelper.InputBox("Bitte geben Sie die zweite Vermittlernummer ein die bei den markierten Vertraegen hinterlegt werden soll.","Vermittler 2"); vm3 = vbHelper.InputBox("Bitte geben Sie die dritte Vermittlernummer ein die bei den markierten Vertraegen hinterlegt werden soll.","Vermittler 3"); var abfrage = vbHelper.MsgBox("Bitte beenden Sie das Skript, durch druecken des Abbrechen-Buttons, wenn keine Datensicherung vorliegen sollte!","1","Vermittler"); var testQuery1 = Runtime.provideDataset(); var testQuery2 = Runtime.provideDataset(); var testQuery3 = Runtime.provideDataset(); testQuery1.active = false; testQuery1.CommandText = "SELECT AMSIDNR FROM VERMIT WHERE V_CODE = '"+vm1+"'"; testQuery1.active = true; testQuery2.active = false; testQuery2.CommandText = "SELECT AMSIDNR FROM VERMIT WHERE V_CODE = '"+vm2+"'"; testQuery2.active = true; testQuery3.active = false; testQuery3.CommandText = "SELECT AMSIDNR FROM VERMIT WHERE V_CODE = '"+vm3+"'"; testQuery3.active = true; if((abfrage == 1) && (!testQuery1.Eof) && (!testQuery2.Eof) && (!testQuery3.Eof)){ Dataset.First; while (!Dataset.Eof){ if (Dataset.FindField('CHECKED').AsString == '1') { Runtime.ExecuteQuery("UPDATE KUNDE SET VM1 = '"+vm1+"', VM2 = '"+vm2+"', vm3 = '"+vm3+"' WHERE AMSIDNR = '"+Dataset.FindField("AmsId").AsString+"'"); Runtime.ExecuteQuery("UPDATE VERTRAG SET VM1 = '"+vm1+"', VM2 = '"+vm2+"', vm3 = '"+vm3+"' WHERE \"KEY\" = '"+Dataset.FindField("AmsId").AsString+"'"); } Dataset.Next; } Runtime.MsgBox("Skript beendet!"); } else Runtime.MsgBox("Skript abgebrochen!"); } function VbScriptHelper(){ function ParamsToString(params){ var result = []; for (var i = 0; i < params.length; i++) { if ( typeof params[i] != 'string' ) { continue; } result[i] = '"' + params[i].replace(/"/g, '" + Chr(34) + "') + '"'; } return result.join(', '); } this.InputBox = function(prompt, title, defaultValue, xpos, ypos, helpfile, context){ vbs = new ActiveXObject('ScriptControl'); vbs.Language = 'VBScript'; return vbs.eval('InputBox(' + ParamsToString([prompt, title, defaultValue, xpos, ypos, helpfile, context]) + ')'); }; this.MsgBox = function(prompt, buttons, title, helpfile, context){ vbs = new ActiveXObject('ScriptControl'); vbs.Language = 'VBScript'; return vbs.eval('MsgBox(' + ParamsToString([prompt, buttons, title, helpfile, context]) + ')'); }; } Ein anderes Skript funktionierte solange, bis ich versucht habe die VBS funktion UCase einzubauen. Dieses brach mit der Fehlermeldung "Bezeichner erwartet" ab. Ohne die Funktion und ohne die Zeile 8 (Produkt = vbHelper.UCase(Produkt);) funktioniert das folgende Skript: var Date = new Date(); var Zeit = Date.getHours() +':' + Date.getMinutes() + ':' + Date.getSeconds(); function ProcessDataSet(Dataset){ vbHelper = new VbScriptHelper(); var Produkt = ''; Produkt = vbHelper.InputBox("Bitte geben Sie das Produkt ein, welches bei den markierten Vertraegen hinterlegt werden soll.", "Produkt-Neu"); Produkt = vbHelper.UCase(Produkt); var abfrage = vbHelper.MsgBox("Bitte beenden Sie das Skript, durch druecken des Abbrechen-Buttons, wenn keine Datensicherung vorliegen sollte!","1","Produkte"); if((abfrage == 1)){ Dataset.First; while (!Dataset.Eof){ if (Dataset.FindField('CHECKED').AsString == '1') { Runtime.ExecuteQuery("UPDATE VERTRAG SET Produkt = '"+Produkt+"', BEARBEITER='mySolution', BEARBDAT = CURRENT_DATE, BEARBZEIT = '"+Zeit+"' WHERE AMSIDNR = '"+Dataset.FindField("AmsId").AsString+"'"); } Dataset.Next; } Runtime.MsgBox("Skript beendet!"); } else Runtime.MsgBox("Skript abgebrochen!"); } function VbScriptHelper() { function ParamsToString(params) { var result = []; for (var i = 0; i < params.length; i++) { if (typeof params[i] != 'string') { continue; } result[i] = '"' + params[i].replace(/"/g, '" + Chr(34) + "') + '"'; } return result.join(', '); } this.InputBox = function (prompt, title, defaultValue, xpos, ypos, helpfile, context) { vbs = new ActiveXObject('ScriptControl'); vbs.Language = 'VBScript'; return vbs.eval('InputBox(' + ParamsToString([prompt, title, defaultValue, xpos, ypos, helpfile, context]) + ')'); }; this.MsgBox = function (prompt, buttons, title, helpfile, context) { vbs = new ActiveXObject('ScriptControl'); vbs.Language = 'VBScript'; return vbs.eval('MsgBox(' + ParamsToString([prompt, buttons, title, helpfile, context]) + ')'); }; this.CreateTextFile = function (filename, overwrite, unicode) { vbs = new ActiveXObject('ScriptControl'); vbs.Language = 'VBScript'; return vbs.eval('CreateTextFile(' + ParamsToString([filename, overwrite, unicode]) + ')'); }; this.CreateObject = function (class, servername) { vbs = new ActiveXObject('ScriptControl'); vbs.Language = 'VBScript'; return vbs.eval('CreateObject(' + ParamsToString([class, servername]) + ')'); }; this.OpenTextFile = function (filename2, iomode, create, format) { vbs = new ActiveXObject('ScriptControl'); vbs.Language = 'VBScript'; return vbs.eval('OpenTextFile(' + ParamsToString([filename2, iomode, create, format]) + ')'); }; this.Close = function (savechanges, filename3, routeworkbook) { vbs = new ActiveXObject('ScriptControl'); vbs.Language = 'VBScript'; return vbs.eval('Close(' + ParamsToString([savechanges, filename3, routeworkbook]) + ')'); }; this.UCase = function (string) { vbs = new ActiveXObject('ScriptControl'); vbs.Language = 'VBScript'; return vbs.eval('UCase' + ParamsToString([string]) + ')'); }; } Wer kann mir helfen? Danke. Gruß Volker Zitieren Link zu diesem Kommentar
MurdocX 950 Geschrieben 5. April 2020 Melden Teilen Geschrieben 5. April 2020 Die geschweiften Klammern, var und das Semikolon am Ende deuten stark auf C# hin. Zitieren Link zu diesem Kommentar
Iceboone 2 Geschrieben 5. April 2020 Autor Melden Teilen Geschrieben 5. April 2020 vor 3 Minuten schrieb MurdocX: Die geschweiften Klammern, var und das Semikolon am Ende deuten stark auf C# hin. Erst einmal danke für die schnelle Antwort. Aber kann c# nicht so viel? Warum sollte man dann auf Funktionen von VBS wechseln? Kannst du denn Windows Scripting ausschließen? Zitieren Link zu diesem Kommentar
MurdocX 950 Geschrieben 5. April 2020 Melden Teilen Geschrieben 5. April 2020 (bearbeitet) Naja, VBS hat keine Klammern, deshalb kann es das nicht sein. Man kann auch VB-Funktionen einbinden. Warum das der Entwickler getan hat, muss man ihn fragen. Das hat sicher nichts mit der Mächtigkeit von C# zu tun. Codebeispiel VBS: https://www.robvanderwoude.com/sourcecode.php?src=accessrd_vbs Codebeispiel C#: https://www.w3schools.com/cs/cs_methods.asp: Was benötigst du denn in C# oder möchtest generell erreichen mit deinen Veränderungen? bearbeitet 5. April 2020 von MurdocX Zitieren Link zu diesem Kommentar
Iceboone 2 Geschrieben 5. April 2020 Autor Melden Teilen Geschrieben 5. April 2020 Hmm, okay das sieht mehr nach c# aus als nach VBS, muss ich mir mal anschauen. Danke. ALso es ist so, das Verwaltungsprogramm hat ein paar Probleme, diese möchte ich mit Hilfe von Skripten umgehen. Daher such eich nach Lösungen. Diese Lösungen sind tatsächlich meist recht einfacher Natur, aber wenn man die Sprache nicht kennt ist es halt schwierig :) Ich kann diese Skripte in drei Situationen verwenden: 1. Ich erstelle eine Selektion im Programm. Dann möchte ich zum Beispiel bei allen die in diesem Ergebis enthalten sind eine Veränderung, einen Masseneintrag, eine Art copy und Paste etc. durchführen. 2. Es gibt die Möglichkeit beim Speichern gewisse Prüfungen durchzuführen. Also quasi bei auslösenden Events einen Code auszuführen: object TafnEventActionMapper object TafnEventActionScriptMapping ActionName = 'ActionDummy' EventName = 'BuEventVertragssparteVorbelegung' Script.Strings = ( 'var Vertrag = ScriptHost.Wrap( EventData.GetContext( "vertrag" ));' 'var Sparte = Vertrag.FindField("TYP").Value;' 'if (Sparte == "HRV"){' ' var VertragsSparte = ScriptHost.Wrap( EventData.GetContext( "vertragssparte" ));' ' VertragsSparte.SetValue("HRV185", "100");' '}' ) end object TafnEventActionScriptMapping ActionName = 'ActionDummy' EventName = 'UiEventVertragSpeichern' Script.Strings = ( 'var Runtime = EventData.GetContext( "RUNTIME" );' 'var Vertrag = ScriptHost.Wrap( EventData.GetContext( "vertrag" ));' 'var Gesell = Vertrag.FindField("GES").Value;' 'if ((Gesell == "") || (Gesell == null))' ' ScriptHost.RaiseException("Die Gesellschaft ist ein Pflichtfeld und muss gefüllt sein.");' 'var Beginn = Vertrag.FindField("BEGINN").Value;' 'if ((Beginn == "") || (Beginn == null))' ' ScriptHost.RaiseException("Der Vertragsbeginn ist ein Pflichtfeld und muss gefüllt sein.");' 'var Status = Vertrag.FindField("STATUS").Value;' 'if ((Status == "") || (Status == null))' ' ScriptHost.RaiseException("Der Vertragsstatus ist ein Pflichtfeld und muss gefüllt sein.");' 'var Zahlweise = Vertrag.FindField("ZAHLUNG").Value;' 'if ((Zahlweise == "") || (Zahlweise == null))' ' ScriptHost.RaiseException("Die Zahlweise ist ein Pflichtfeld und muss gefüllt sein.");' 'Runtime.MsgBox("Bitte beachten Sie folgende Sollfelder: \r\n\r\nVertrags-Nr. \r\nVertragsablauf \r\nInterne Nr. \r\nAntrag \r\nDokument \r\nAbbuchung \r\nCourtage % \r\nJahrescourtage");' ) end object TafnEventActionScriptMapping ActionName = 'ActionDummy' EventName = 'BuEventKundePost' Script.Strings = ( 'var Runtime = EventData.GetContext( "RUNTIME" );' 'var Kunde = ScriptHost.Wrap( EventData.GetContext( "kunde" ));' 'var Zuordnung = Kunde.FindField("ZUORDNUNG").Value;' 'if (Zuordnung == "PRIVAT"){' ' var Vorname = Kunde.FindField("VORNAME").Value;' ' if ((Vorname == "") || (Vorname == null))' ' ScriptHost.RaiseException("Der Vorname ist ein Pflichtfeld und muss gefüllt sein.");' ' var Nachname = Kunde.FindField("NACHNAME").Value;' ' if ((Nachname == "") || (Nachname == null))' ' ScriptHost.RaiseException("Der Nachname ist ein Pflichtfeld und muss gefüllt sein.");' '}else{' ' var Suchname = Kunde.FindField("VNAME").Value;' ' if ((Suchname == "") || (Suchname == null))' ' ScriptHost.RaiseException("Der Suchname ist ein Pflichtfeld und muss gefüllt sein.");' '}' 'var Name1 = Kunde.FindField("VN_NAME1").Value;' 'if ((Name1 == "") || (Name1 == null))' ' ScriptHost.RaiseException("Die erste Adresszeile ist ein Pflichtfeld und muss gefüllt sein.");' 'var Strasse = Kunde.FindField("VN_STR").Value;' 'if ((Strasse == "") || (Strasse == null))' ' ScriptHost.RaiseException("Die Strasse ist ein Pflichtfeld und muss gefüllt sein.");' 'var PLZ = Kunde.FindField("VN_PLZ").Value;' 'if ((PLZ == "") || (PLZ == null))' ' ScriptHost.RaiseException("Die PLZ ist ein Pflichtfeld und muss gefüllt sein.");' 'var Ort = Kunde.FindField("VN_ORT").Value;' 'if ((Ort == "") || (Ort == null))' ' ScriptHost.RaiseException("Der Ort ist ein Pflichtfeld und muss gefüllt sein.");' 'var Status = Kunde.FindField("STATUS").Value;' 'if ((Status == "") || (Status == null))' ' ScriptHost.RaiseException("Der Status ist ein Pflichtfeld und muss gefüllt sein.");' 'var Klasse = Kunde.FindField("KLASSE").Value;' 'if ((Klasse == "") || (Klasse == null))' ' ScriptHost.RaiseException("Die Klasse ist ein Pflichtfeld und muss gefüllt sein.");' 'var VM1 = Kunde.FindField("VM1").Value;' 'if ((VM1 == "") || (VM1 == null))' ' ScriptHost.RaiseException("Der erste Vermittler ist ein Pflichtfeld und muss gefüllt sein.");' 'var VM2 = Kunde.FindField("VM2").Value;' 'if ((VM2 == "") || (VM2 == null))' ' ScriptHost.RaiseException("Der zweite Vermittler ist ein Pflichtfeld und muss gefüllt sein.");' 'Runtime.MsgBox("Bitte beachten Sie folgende Sollfelder: \r\n\r\nTel. Privat \r\nTel. Gesch. \r\nTelefax \r\nMobiltelefon \r\neMail \r\nInternet \r\nGeboren am \r\nBLZ 1 \r\nKonto 1 \r\nBank 1 \r\nMaklervertrag ab \r\nLetzter Besuch \r\n");' ) end end und 3. Es gibt die Möglichkeit mit einer geplanten Aufgabe beispielweise nachts ein Skript aufzurufen. Für all diese drei Skripte muss ich irgendeine BAsis finden, um über Nacht für neu angelegt Kunden Aktionen durchzuführen. Um beim Speichern die Mailadresse zu validieren, um Massenkorrekturen durchzuführen. Also sehr breit aufgestellt, aber mir fehlt der Ansatz, mit welcher Sprache ich da ran muss. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 5. April 2020 Melden Teilen Geschrieben 5. April 2020 vor 2 Stunden schrieb MurdocX: Die geschweiften Klammern, var und das Semikolon am Ende deuten stark auf C# hin. Wenn's C# ist, ist es aber nur der Quell-Text, oder? C# sollte kompliliert sein, um ausgeführt werden zu können? Oder gibt es inzwischen auch interpretiertes C#? Liegen die "Scripte" nicht als Dateien vor? Zitieren Link zu diesem Kommentar
Iceboone 2 Geschrieben 5. April 2020 Autor Melden Teilen Geschrieben 5. April 2020 vor 5 Minuten schrieb BOfH_666: Wenn's C# ist, ist es aber nur der Quell-Text, oder? C# sollte kompliliert sein, um ausgeführt werden zu können? Oder gibt es inzwischen auch interpretiertes C#? Liegen die "Scripte" nicht als Dateien vor? Absolut richtig. Ich starte die Skripte im Programm selber. Ich habe die Inhalte nur mit Notepad geöffnet und dann kopiert. Also das Programm muss das interpretieren selbst übernehmen. Die letzte VAriante mit den events liegt in einer globalevents.map-Datei. Die wird vom Programm verwendet, um bei auslösenden Events den Befehl zu interpretieren und umzusetzen. Also in beiden Fällen liegen dem ganzen Dateien zu Grunde. Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 5. April 2020 Melden Teilen Geschrieben 5. April 2020 Was spricht der Hersteller des Programmes zu dem Thema? Zitieren Link zu diesem Kommentar
Iceboone 2 Geschrieben 5. April 2020 Autor Melden Teilen Geschrieben 5. April 2020 Der Hersteller hält sich sehr bedeckt. Die liefern die Sripte normalerweise nur verschlüsselt aus. Ich habe den Eindruck, dass der support es selbst nicht 100 % beantworten kann und die Entwicklung will immer gleich großes Geld haben. Also suche ich jetzt selbst Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 5. April 2020 Melden Teilen Geschrieben 5. April 2020 vor 4 Stunden schrieb Iceboone: Absolut richtig. Ich starte die Skripte im Programm selber. Ich habe die Inhalte nur mit Notepad geöffnet und dann kopiert. Also das Programm muss das interpretieren selbst übernehmen. Hmmm ... sollte "das Programm" die Interpretation wirklich selbst übernehmen und auch noch mehrere unterschiedliche Script-Sprachen unterstützen, sollte ja für jedes Script irgendwo konfiguriert sein, um welche Script-Sprache es sich handelt, oder? Zitieren Link zu diesem Kommentar
Lian 2.422 Geschrieben 6. April 2020 Melden Teilen Geschrieben 6. April 2020 vor 9 Stunden schrieb Iceboone: Die liefern die Sripte normalerweise nur verschlüsselt aus. Wie ist das gemeint? Wenn der Hersteller seine Scripte nur verschlüsselt herausgibt, wie bist Du an den Code gekommen? Zitieren Link zu diesem Kommentar
Iceboone 2 Geschrieben 6. April 2020 Autor Melden Teilen Geschrieben 6. April 2020 vor 2 Stunden schrieb Lian: Wie ist das gemeint? Wenn der Hersteller seine Scripte nur verschlüsselt herausgibt, wie bist Du an den Code gekommen? Wie weiter oben bereits erwähnt, kann die Frage mir der support selbst nicht genau beantworten, aber von denen habe ich diese Skripte unverschlüsselt erhalten. Nur wenn wir die Skripte kostenpflichtig anfordern, dann bekommen wir leider immer nur verschlüsselte Skripte. Zitieren Link zu diesem Kommentar
MurdocX 950 Geschrieben 6. April 2020 Melden Teilen Geschrieben 6. April 2020 (bearbeitet) vor 12 Stunden schrieb BOfH_666: Wenn's C# ist, ist es aber nur der Quell-Text, oder? C# sollte kompiliert sein, um ausgeführt werden zu können? Oder gibt es inzwischen auch interpretiertes C#? Da C# auch nativ in der Powershell ausgeführt werden kann, vermute ich hier ein ähnliches Konstrukt. VBS als Basis und C# gepackt. vor 3 Minuten schrieb Iceboone: Nur wenn wir die Skripte kostenpflichtig anfordern, dann bekommen wir leider immer nur verschlüsselte Skripte. Es ist hier schwer interpretierten Code, ohne die Software, gut nachzuvollziehen und weiterentwickeln zu können. Bei spezifischen Fragen zu C# kann ich Dir helfen, jedoch hier nicht. Mir ist es nicht möglich was ordentliches abzugeben. bearbeitet 6. April 2020 von MurdocX Zitieren Link zu diesem Kommentar
daabm 1.354 Geschrieben 6. April 2020 Melden Teilen Geschrieben 6. April 2020 Ahem - C# sieht anders aus Für mich ist das JavaScript - macht auch mehr Sinn irgendwie... Und wenn man dann noch screnc/scrdec kennt (den im Windows Script Host enthaltenen "Verschlüssler"), ergeben auch die restlichen Aussagen irgendwie einen Zusammenhang. Zitieren Link zu diesem Kommentar
Iceboone 2 Geschrieben 6. April 2020 Autor Melden Teilen Geschrieben 6. April 2020 vor 29 Minuten schrieb daabm: Ahem - C# sieht anders aus Für mich ist das JavaScript - macht auch mehr Sinn irgendwie... Und wenn man dann noch screnc/scrdec kennt (den im Windows Script Host enthaltenen "Verschlüssler"), ergeben auch die restlichen Aussagen irgendwie einen Zusammenhang. Kann man mit screnc die Skripte entschlüsseln? Vermutlich braucht man da eine Hilfsdatei oder? Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.