SQL-Statements aus einer Textdatei auslesen.
Sascha Balke
Hallo Zusammen,wir haben div. Regeln angelegt, in denen wir mit vielen SQL-Statements arbeiten. Soweit auch alles kein Problem.
Nur wenn wir die Regeln verteilen müssen wir diese je nach Kunde bzw. Anforderung immer direkt in der betroffenen Regel ändern. Teilweise können es mehr als 100 Regeln betreffen! :o
Jetzt kam die Frage auf, ob man in der Regel nicht auf eine vorhandene Textdatei zurückgreifen/auslesen kann, in der die Query hinterlegt ist.
Das hätte den charmanten Vorteil, dass man nur noch diese Textdatei anpassen müsste und die Regeln so belassen könnte.
Geht sowas bzw. hat jemand von euch dazu eine Idee?
VG
Sascha
Sascha Balke
Hallo Zusammen,vielleicht lässt sich dieser Beitrag ja noch ins coresuite customize verschieben, denn beim posten habe ich mich verhauen.
Weiß jemand von euch, ob soetwas möglich ist und wenn ja - wie?!
VG
Sascha
Michael Egloff
Hallo Sascha,leider sind die Funktionalitäten seit dem Umzug auf die neue Seite noch nicht vollständig.
Deshalb kann ich deinen Eintrag nicht verschieben.
Werde das aber noch nachholen, sobald möglich.
Hier mal ein Beispiel zum Lesen aus einer Datei:
try
{
string path = "C:\Query.txt";
if( System.IO.File.Exists(path))
{
System.IO.StreamReader sr = new System.IO.StreamReader(path);
string textContent = sr.ReadToEnd();
sr.Close();
MessageBox.Show("Query: " + textContent, "OK");
}
else
{
MessageBox.Show("Datei existiert nicht: " +path, "OK");
}
}
catch(System.Exception e)
{
MessageBox.Show("Fehler: " + e.Message, "OK");
}
Sascha Balke
Hallo Michael,bis auf einen kleinen Schönheitsfehler funktioniert es - ein fehlte.
string path = "C:\Query.txt";
Das Problem welches ich nur habe ist, dass ich nicht weiß wie ich das Ergebnis als String setzen muss, um es an späterer stelle auch nutzen zu können.
Habe schon einiges versucht, jedoch ohne den gewünschten Erfolg zu erhalten.
Hier mein bisheriger Aufbau:
string query= "";
try
{
// GRID, WILL CONTAIN THE VALUES TO DISPLAY
SwissAddonFramework.UI.Components.Grid grid = SwissAddonFramework.UI.Components.Grid.CreateNew("COR_GR1");
grid.Height = 280; grid.Width = 620; grid.Top = 10; grid.Left = 10;
// SAP FORM, WILL CONTAIN THE GRID
SwissAddonFramework.UI.Components.Form form = SwissAddonFramework.UI.Components.Form.CreateNewForm("COR_CUS_SHOW1", "COR_CUS_SHOW1" + SwissAddonFramework.Utils.UniqueStringGenerator.Next());
form.Height = 380; form.Width = 650; form.Top = 200; form.Left = 300;
form.Value = "offene Lieferungen";
SwissAddonFramework.UI.Components.Button buttonOK = SwissAddonFramework.UI.Components.Button.CreateNew("1");
buttonOK.Value= "OK";
buttonOK.SetPosition(grid.Left, grid.Top+grid.Height+20);
form.AddItem(buttonOK);
// ADD GRID TO THE FORM
form.AddItem(grid);
// LOAD FORM
form.Load();
// YOUR QUERY
query= "Select DocEntry as #, DocNum as Belegnummer, DocDate as Belegdatum, DocDueDate as Lieferdatum, CardName as Kunde, Comments as Bemerkungen from ODLN where Docstatus = 'O' ";
// ATTACH QUERY TO GRID
grid.ExecuteQuery(query);
grid.Columns["#"].Width = 15;
// SET COLUMNS NON EDITABLE (DISPLAY ONLY)
grid.Columns["#"].Editable = false;
grid.Columns["Belegnummer"].Editable = false;
grid.Columns["Belegdatum"].Editable = false;
grid.Columns["Lieferdatum"].Editable = false;
grid.Columns["Kunde"].Editable = false;
grid.Columns["Bemerkungen"].Editable = false;
//MessageBox.Show("query:" + query, "OK");
((SwissAddonFramework.UI.Components.TextEditGridColumn)grid.Columns["#"].SpecificGridColumn).LinkObjectType = "15";
}
catch(System.Exception ex)
{
SwissAddonFramework.UI.Dialogs.MessageBox.Show("Es ist bei der Beleg-Abfrage ein unerwarteter Fehler aufgetreten! Bitte prüfen Sie Ihre SQL-Abfrage.n" + query + "n" + ex.Message , "OK");
}
Könntest du mir kurz den Tip geben, wie ich weiterkomme?
Danke und viele Grüße
Sascha
Fritz Schwendemann
Hallo SaschaIn Deinem Code sehe ich nicht, dass Du das Beispiel von Michael Egloff eingebaut hast:
System.IO.StreamReader sr = new System.IO.StreamReader(path);
string textContent = sr.ReadToEnd();
sr.Close();
textContent ist ein String, den Du für die Query weiterverwenden kannst. Du musst nur die Vorlage von Michael Egloff einbauen und dann muss es funktionieren.
Schönen Gruss
Fritz
Sascha Balke
Autsch ... habe das alte/falsche gepostet.Hier das richtige
try
{
// GRID, WILL CONTAIN THE VALUES TO DISPLAY
SwissAddonFramework.UI.Components.Grid grid = SwissAddonFramework.UI.Components.Grid.CreateNew("COR_GR1");
grid.Height = 280; grid.Width = 620; grid.Top = 10; grid.Left = 10;
// SAP FORM, WILL CONTAIN THE GRID
SwissAddonFramework.UI.Components.Form form = SwissAddonFramework.UI.Components.Form.CreateNewForm("COR_CUS_SHOW1", "COR_CUS_SHOW1" + SwissAddonFramework.Utils.UniqueStringGenerator.Next());
form.Height = 380; form.Width = 650; form.Top = 200; form.Left = 300;
form.Value = "offene Lieferungen";
SwissAddonFramework.UI.Components.Button buttonOK = SwissAddonFramework.UI.Components.Button.CreateNew("1");
buttonOK.Value= "OK";
buttonOK.SetPosition(grid.Left, grid.Top+grid.Height+20);
form.AddItem(buttonOK);
// ADD GRID TO THE FORM
form.AddItem(grid);
// LOAD FORM
form.Load();
string path = "C:\Query.txt";
if( System.IO.File.Exists(path))
{
System.IO.StreamReader sr = new System.IO.StreamReader(path);
string textContent = sr.ReadToEnd();
sr.Close();
//MessageBox.Show("Query: " + textContent, "OK");
}
else
{
MessageBox.Show("Datei existiert nicht: " +path, "OK");
}
// ATTACH QUERY TO GRID
grid.ExecuteQuery(textContent);
grid.Columns["#"].Width = 15;
// SET COLUMNS NON EDITABLE (DISPLAY ONLY)
grid.Columns["#"].Editable = false;
grid.Columns["Belegnummer"].Editable = false;
grid.Columns["Belegdatum"].Editable = false;
grid.Columns["Lieferdatum"].Editable = false;
grid.Columns["Kunde"].Editable = false;
grid.Columns["Bemerkungen"].Editable = false;
//MessageBox.Show("query:" + query, "OK");
((SwissAddonFramework.UI.Components.TextEditGridColumn)grid.Columns["#"].SpecificGridColumn).LinkObjectType = "15";
}
catch(System.Exception ex)
{
SwissAddonFramework.UI.Dialogs.MessageBox.Show("Es ist bei der Beleg-Abfrage ein unerwarteter Fehler aufgetreten! Bitte prüfen Sie Ihre SQL-Abfrage.n" + textContent + "n" + ex.Message , "OK");
}
Hier sagt er, dass die Name "textContent" nicht vorhanden ist.
Hast du einen Tip, wo der Fehler liegt?
Fritz Schwendemann
Hallo SaschaDefiniere die Variable textContent vor der Leseschleife, dann ist sie nach der Schleife verwendbar.
Gruss
Fritz
Sascha Balke
Hallo Fritz,den Fehler habe ich grad behoben und die 1. Messagebox gibt mir auch die richtige Query zurück, jedoch wird die Query nicht verwendet und ich erhalte die letzte (siehe Ende) Messagebox, dass ein Fehler aufgetreten ist.
Irgendwo scheint noch der Wurm drin zu sein. Hast du noch eine Idee?
Fritz Schwendemann
Hallo SaschaIch weiss jetzt nicht, wie Dein Code aktuell aussieht. Kannst Du mal alles posten?
Hast Du die Variable query durch textContent ersetzt?
Schönen Gruss
Fritz
Sascha Balke
Hallo Fritz,anbei...
string query ="textContent";
try
{
string path = "C:\Query.txt";
if( System.IO.File.Exists(path))
{
System.IO.StreamReader sr = new System.IO.StreamReader(path);
string textContent = sr.ReadToEnd();
sr.Close();
//MessageBox.Show("Query: " + textContent, "OK");
}
else
{
MessageBox.Show("Datei existiert nicht: " +path, "OK");
}
// GRID, WILL CONTAIN THE VALUES TO DISPLAY
SwissAddonFramework.UI.Components.Grid grid = SwissAddonFramework.UI.Components.Grid.CreateNew("COR_GR1");
grid.Height = 280; grid.Width = 620; grid.Top = 10; grid.Left = 10;
// SAP FORM, WILL CONTAIN THE GRID
SwissAddonFramework.UI.Components.Form form = SwissAddonFramework.UI.Components.Form.CreateNewForm("COR_CUS_SHOW1", "COR_CUS_SHOW1" + SwissAddonFramework.Utils.UniqueStringGenerator.Next());
form.Height = 380; form.Width = 650; form.Top = 200; form.Left = 300;
form.Value = "offene Lieferungen";
SwissAddonFramework.UI.Components.Button buttonOK = SwissAddonFramework.UI.Components.Button.CreateNew("1");
buttonOK.Value= "OK";
buttonOK.SetPosition(grid.Left, grid.Top+grid.Height+20);
form.AddItem(buttonOK);
// ADD GRID TO THE FORM
form.AddItem(grid);
// LOAD FORM
form.Load();
// YOUR QUERY
//query= "Select DocEntry as #, DocNum as Belegnummer, DocDate as Belegdatum, DocDueDate as Lieferdatum, CardName as Kunde, Comments as Bemerkungen from ODLN where Docstatus = 'O' ";
// ATTACH QUERY TO GRID
grid.ExecuteQuery(query);
grid.Columns["#"].Width = 15;
// SET COLUMNS NON EDITABLE (DISPLAY ONLY)
grid.Columns["#"].Editable = false;
grid.Columns["Belegnummer"].Editable = false;
grid.Columns["Belegdatum"].Editable = false;
grid.Columns["Lieferdatum"].Editable = false;
grid.Columns["Kunde"].Editable = false;
grid.Columns["Bemerkungen"].Editable = false;
//MessageBox.Show("query:" + query, "OK");
((SwissAddonFramework.UI.Components.TextEditGridColumn)grid.Columns["#"].SpecificGridColumn).LinkObjectType = "15";
}
catch(System.Exception ex)
{
SwissAddonFramework.UI.Dialogs.MessageBox.Show("Es ist bei der Beleg-Abfrage ein unerwarteter Fehler aufgetreten! Bitte prüfen Sie Ihre SQL-Abfrage.n" + query + "n" + ex.Message , "OK");
}
Danke dir!
Fritz Schwendemann
Hallo SaschaDein Code kann so nicht funktionieren, insbesondere query = "textContent". Deklariere am Anfang mal query = textContent = "";
In der Leseschleife 'string' weglassen, nur textContent = sr.ReadToEnd();
Und mit der Variable textContent arbeitest Du dann weiter. Vergiss das 'query' oder schreib nach der Schleife: query = textContent;
Schönen Gruss
Fritz
Sascha Balke
Hallo Fritz,habe vielen Dank - es funktioniert!
Ich habe das Wald vor lauter Bäumen nicht gesehen. :bang:
0
Please sign in to leave a comment.
Comments
0 comments