Richtiger VB Syntax ??
Tomas Fernandez
Moin Zusammen,leider bin ich kein VB Experte und habe folgendes vor.
Ich möchte den Functionsbutton auf dem Formtype 651 (Aktivität) plazieren und nach füllen der Maske die Daten zum Navigationssystem schicken.
Das plazieren und erscheinen des Button funktioniert ohne Probleme. Als Type Shell funktioniert das senden des https://.. auch einbandfrei.
Nun wollte ich mir eine VB-Code zur nutze machen, welchen ich im Web gefunden habe aber leider will der nicht.
Hier der Code:
Function WFCobjects(Account As String, UserName As String, Password As String) As String
Dim Action As String
Dim ReqUrl As String
Dim Req As WinHttpRequest
Action = "showObjectReportExtern"
ReqUrl = "https://connect.webfleet.tomtomwork.com/extern?lang=de"
ReqUrl = ReqUrl & "&" & "account=zzz"
ReqUrl = ReqUrl & "&" & "username=yyy"
ReqUrl = ReqUrl & "&" & "password=xxx"
ReqUrl = ReqUrl & "&" & "action=sendDestinationOrderExtern&orderid=3102060&objectno=002&orderdate=04.09.2007&ordertime=09:00&ordertext=Ware ausliefern&addrnr=10218336"
Set Req = New WinHttpRequest
Req.Open "GET", ReqUrl
Req.Send
WFCobjects = Req.ResponseText
End Function
Nach Ausführung des Codes bekomme ich folgende Meldung:
Namespace COR_Utility
Class Helper
' Globals ----------
' Function: Run_FB_COR_CUS_00000002 ----------
Public Sub Run_FB_COR_CUS_00000002(pVal As COR_Utility.Logic.CustomizeEvent) As Boolean
Function WFCobjects() As String
'Account As String, UserName As String, Password As String
'Dim Action As String
Dim ReqUrl As String
Dim Req As WinHttpRequest
'Action = "showObjectReportExtern"
ReqUrl = "https://connect.webfleet.tomtomwork.com/extern?lang=de"
ReqUrl = ReqUrl & "&" & "account=zzz"
ReqUrl = ReqUrl & "&" & "username=YYY"
ReqUrl = ReqUrl & "&" & "password=XXX"
ReqUrl = ReqUrl & "&" & "action=sendDestinationOrderExtern&orderid=3102060&objectno=002&orderdate=04.09.2007&ordertime=09:00&ordertext=Ware ausliefern&addrnr=10218336"
Set Req = New WinHttpRequest
Req.Open "GET", ReqUrl
Req.Send
WFCobjects = Req.ResponseText
End Function
End Sub
End Class
End Namespace
Die Methode COR_Utility.Helper.Run_FB-COR_CUS_00000002 konte nicht gtefunden werden.
Wo liegt der Fehler ???
Eine weitere Frage für mich ist, wie bekomme ich die Daten aus dem Formtype in das VB Script ??
Desweiteren frage ich mich wofür die Buttons in den Codefenster im Costumize sind, da bei betätigung keine Funktion ausgeführt wird ???
Gruß und besten Dank für Ihre Hilfe
Michael Egloff
Hallo Tomas,ich beginne mal mit der letzten Frage: Die Buttons im Codefenster funktionieren nicht, da eine falsche DLL in der momentanen Version mitgeliefert wird (nächste Version ist das behoben).
Wenn du Code schreibst, solltest du unbedingt darauf achten, dass du den Code kompilierst (also auf die richtige Syntax überprüfst). Dies kannst du indem du auf den Knopf mit dem roten Haken im CodeEditor klickst, aber da dieser ja nicht funktioniert, kannst du F5 drücken. Danach sagt dir der Compiler, ob dein Code ok ist.
Die Fehlermeldung
CODE:
Die Methode COR_Utility.Helper.Run_FB-COR_CUS_00000002 konte nicht gtefunden werden.
kommt, wenn dein Code gar nicht kompiliert werden konnte und somit im Kontext gar nicht existiert,
Desweiteren musst du darauf achten, dass du immer den ganzen Namespace angibst (z.B. bei WinHttpRequest).
Den Code, den du schreibst, wird in einer Funktion aufgerufen, du musst also nicht mehr den Funktionskopf beschreiben. Als Parameter steht dir das ganze Form zur Verfügung (mit pVal.Form hast du Zugriff).
Ich hoffe, damit einige Probleme gelöst zu haben.
Tomas Fernandez
Hallo Michael,danke für die Rückmeldung.
Hatte mir jetzt in einer kleinen NAchtsession selber geholfen und mir den Thread "Webservice for Currency Rates (Automatische Wechselkursabfrage) Form 8661" von Herrn Grenacher zu nutze gemacht.
HAbe jetzt folgenden Code.
// Export von Tom TOm WORK Aufträgen aus Aktivitäten
// TomTomWORK - NEU
// Alt aus Wechselkursabfrage
//SwissAddonFramework.UI.Components.Matrix mtr = (SwissAddonFramework.UI.Components.Matrix)SwissAddonFramework.UI.Components.Matrix.GetFromUID(pVal.Form,"9");
//string cur = mtr.GetValue("2",pVal.Row-1).ToString();
// Laden der Feldwerte
//try
//{
string customer = SwissAddonFramework.UI.Components.TextEdit.GetFromUID(pVal.Form, "9").Value.ToString();
string date = SwissAddonFramework.UI.Components.TextEdit.GetFromUID(pVal.Form, "23").Value.ToString().Remove(0,6)+"."+(SwissAddonFramework.UI.Components.TextEdit.GetFromUID(pVal.Form, "23").Value.ToString().Remove(0,4)).Remove(2,2)+"."+SwissAddonFramework.UI.Components.TextEdit.GetFromUID(pVal.Form, "23").Value.ToString().Remove(4,4);
string timestart = SwissAddonFramework.UI.Components.TextEdit.GetFromUID(pVal.Form, "16").Value.ToString().Remove(2,2)+":"+SwissAddonFramework.UI.Components.TextEdit.GetFromUID(pVal.Form, "16").Value.ToString().Remove(0,2);
string timeend = SwissAddonFramework.UI.Components.TextEdit.GetFromUID(pVal.Form, "79").Value.ToString().Remove(2,2)+":"+SwissAddonFramework.UI.Components.TextEdit.GetFromUID(pVal.Form, "79").Value.ToString().Remove(0,2);
string text = SwissAddonFramework.UI.Components.TextEdit.GetFromUID(pVal.Form, "53").Value.Replace("&","-").ToString().Remove(0,2) + " " + SwissAddonFramework.UI.Components.TextEdit.GetFromUID(pVal.Form, "25").Value.Replace("&","-").ToString();
if (text.Length>500)
text = text.Remove(0,500);
string delivery = SwissAddonFramework.UI.Components.TextEdit.GetFromUID(pVal.Form, "45").Value.ToString();
string service = SwissAddonFramework.UI.Components.TextEdit.GetFromUID(pVal.Form, "145").Value.ToString();
string order = delivery + service + "-" + SwissAddonFramework.UI.Components.TextEdit.GetFromUID(pVal.Form, "5").Value.ToString();
if (order.Length>10)
order = order.Remove(1,2);
string ordertype = SwissAddonFramework.UI.Components.TextEdit.GetFromUID(pVal.Form, "53").Value.ToString().Substring(1,1);
string driver = SwissAddonFramework.UI.Components.TextEdit.GetFromUID(pVal.Form, "53").Value.ToString().Substring(0,1);
// Basisstring für https setzten
string fullpath = @"https://connect.webfleet.tomtomwork.com/extern?&separator=3&&account=xxx&username=yyy&password=yyy&lang=de&action=sendDestinationOrderExtern&orderid=XXXORDERID&ordertype=XXXORDERTYPE&objectno=XXXDRIVER&orderdate=XXXDATE&ordertime=XXXTIME&ordertext=XXXTEXT&addrnr=XXXADDR&arrivaltolerance=15";
// Ersetzten mit Feldinhalt aus SAP
fullpath=fullpath.Replace("XXXADDR",customer);
fullpath=fullpath.Replace("XXXTEXT",text);
if (ordertype.Equals("1"))
fullpath=fullpath.Replace("XXXTIME",timestart);
else
fullpath=fullpath.Replace("XXXTIME",timeend);
fullpath=fullpath.Replace("XXXDATE",date);
fullpath=fullpath.Replace("XXXORDERID",order);
fullpath=fullpath.Replace("XXXORDERTYPE",ordertype);
fullpath=fullpath.Replace("XXXDRIVER",driver);
// Create a HttpWebRequest object on the Tom Tom WORK url
System.Net.HttpWebRequest webreq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(fullpath);
// Get a HttpWebResponse object from the Tom Tom WORK url
System.Net.HttpWebResponse webresp = (System.Net.HttpWebResponse)webreq.GetResponse();
// Create a StreamReader object and pass the Tom Tom WORK Server stream as a parameter
System.IO.StreamReader strm = new System.IO.StreamReader(webresp.GetResponseStream(), System.Text.Encoding.ASCII);
// Read a single line from the stream (from the server)
// We read only a single line, since the Tom Tom WORK server returns all the
// information needed by us in just one line.
string csv = strm.ReadLine();
//string csv = "";
// Close the stream to the server and free the resources.
strm.Close();
// AUSGABE des Ergebnis von der Übertragung
if (string.IsNullOrEmpty(csv))
SwissAddonFramework.Messaging.StatusBar.WriteSucess("Erfolgreich übertragen");
else
SwissAddonFramework.Messaging.StatusBar.WriteError(csv);
// Ausgabe der Daten zur Prüfung
//SwissAddonFramework.Messaging.StatusBar.WriteSucess(fullpath);
//customer + " " + date + " " + time+ " " + order + " " + text);
//}
//catch{}
Habe nur das Problem wenn ich Daten aus den Felder "Thema" Item 35 oder "Zugeordnete Person" Item 33 laden will.
bekomme ich immer einen Fehler.
http://217.7.224.233/download/tomtom.jpg
Fehler entsteht nur wenn der Code "string thema" Zeile 259 eingetragen ist.
Kann dies ein Fehler im Customize sein ??? Oder meiner.
Besten Dank für die Antwort noch einmal der F5 Trick ist schon mal gut.
Gruß
Tomas
Michael Egloff
Hallo Tomas,customize hat natürlich keine Fehler :-)
der Fehler liegt darin, dass das Thema-Feld kein TextEdit, sondern eine ComboBox (Drop-Down-Liste) ist.
Ändere die Zeile folgendermassen:
string thema = SwissAddonFramework.UI.Components.TextEdit.GetFromUID(pVal.Form, "35").Value.ToString();
auf
string thema = SwissAddonFramework.UI.Components.ComboBox.GetFromUID(pVal.Form, "35").Selected.Value.ToString();
Damit hast du in 'string thema' den Wert der ComboBox (ACHTUNG, ist nur Referenz auf die Tabelle 'Thema' welche den eigentlichen Text enthält!)
Noch was: wenn du die Remove Methode benutzt (z.B. string date = SwissAddonFramework.UI.Components.TextEdit.GetFromUID(pVal.Form, "23").Value.ToString().Remove(0,6)), muss man aufpassen, dass wirklich Text in diesem Feld steht.
Ist da nichts eingetragen, so gibt es einen Fehler!
Viel Glück
Tomas Fernandez
Hallo Michael,danke für die schnelle Hilfe.
Funktioniert jetzt perfekt ich wollte auch den Wert der Combobox und nicht den Text.
Nun bin ich wieder einen Schritt weiter und suche eine Erläuterung der Felder "LinkedObyType" und "Query" für die Funktion New Items.
Habe ich wieder mal nur etwas überlesen oder gibt es keine in der Anleitung ??
Desweiteren habe ich bei den Funktionsbutton ein Bild mit einem Pfad "\ \server\sap\bilder\bild.bmp" hinterlegt. Dies wird aber nicht angezeigt.
Gibt es hierfür noch weitere Vorgaben, welche einzuhalten sind ??
Gruß
Tomas
Michael Egloff
Hallo Tomas,die beiden Spalten LinkedObjType und Query sind (wie du schon vermutet hast) noch nicht dokumentiert, weil sie neu sind und noch in der Testphase.
Ich versuchs deshalb hier kurz:
Bei LinkedObjType kannst du einen Typ angeben, auf welches diese Feld verlinkt ist. Hast du zum Beispiel ein Feld mit einem CardCode eines Geschäftspartners angelegt, kannnst du bei LinkedObjType "2" angeben und es wird dir automatisch ein LinkedButton (oranger Pfeil) erstellt, welcher auf den entsprechenden Geschäftspartner verweist. Die Liste ( welche Zahlen für welche Objekte stehen) werde ich noch hier im Forum platzieren.
Bei Query kannst du eine SELECT Statement angeben, welches dir dann eine Liste von möglichen Daten anzeigt (ChooseFromList). Wie bei SAP üblich, kannst du diese Liste durch Klicken der Tabulator-Taste aufrufen. Momentan ist es so (wird sich aber wahrscheinlich noch ändern), dass man den Wert, den man schlussendlich im Feld haben muss, im SQL-Statement als VALUE bezeichnen muss. Ein Beispiel:
SELECT ItemCode AS VALUE, ItemName AS Description FROM OITM
Hier werden alle Artikel gezeigt und der ItemCode ins Feld zurückgeschrieben.
Bilder sollten eigentlich funktionieren. Das Bild muss JPG oder BMP und 16x16 pixel sein
Tomas Fernandez
Hallo Michael,supppper das hatte ich mir schon gedacht.
Habe ich gleich eingebaut in mein Serviceprojekt.
Nun habe ich aber gelich das nächste Problem.
Ich möchte das mir in eine Kundenauftrag wo ich ein UDF einblende der zugehörige Servcieabruf eingetragen wird (manuel).
Hierfür habe ich folgenden SQL "SELECT callID AS VALUE, custmrName AS NAME FROM OSCL WHERE customer = $[$-4.1.0.0]" hinterlegt.
Leider zeigt mir das System keine Auswahl an.
Wenn ich hingegen direkt die Kundennummer eingebe "SELECT callID AS VALUE, custmrName AS NAME FROM OSCL WHERE customer = '1010'" funktioniert es ohne Probleme.
Siehst du das Problem ???
Gruß
Tomas
Michael Egloff
Hallo Tomas,eine dynamische Query, so wie du sie anstrebst, ist momentan nicht möglich. Man kann (noch) keine Parameter angeben.
Du hast somit zwei Möglichkeiten:
1) Warten, bis Parameter eingebaut sind (diese werden dann aber nicht SAP-mässig ( $[$-4.1.0.0] ) sonder coresystems-mässig ( [%G;4] ) angegeben)
2) Query ohne Parameter aufrufen (ohne WHERE -Klausel)
gruss, Michael
0
Please sign in to leave a comment.
Comments
0 comments