Ich relativ neu und stelle mich neuen Herausforderungen in der C#-Welt
Mein Ziel ist es einen bestimmten Wert aus einer Tabelle auf unserer Website auszulesen. Diese Liste liegt im SharePoint.
Die Seite liegt unter der Adresse http://......./AllItems.aspx
Es gibt vier Spalten -> Gerät // Status // RestZeit // Geändert
Die Restzeit gibt an, das ein Gerät in x-Minuten eingekühlt werden muss. Ziel ist es in meinem Form eine Ampel darzustellen ≤15 -> rot // 15 <=> 60 -> orange // >60 -> grün, die sich alle paar Minuten aktualisiert.
Die Form-Programmierung mit der Ampel bekomme ich hin, aber ich hab momentan keine Ahnung, wie ich an die Daten komme. Ist das generell möglich?
Mir fehlt ein wenig der Ansatz, ich habe mich zwar schon durch diverse Docs gekämpft, aber ich glaube ich bin etwas durcheinander gekommen 😦
Daten im Web kannst Du abrufen mit :
WebClient cl = new WebClient();
string html = cl.DownloadString(...);
...
Wenn die Website ohne Browser nichts liefert kannst Du ein WebBrowser Control einsetzen, die Website laden und dann das aktuelle Dokument auslesen.
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
Der SharePoint hat seit gefühlt 100 Jahren eine API für das Auslesen von Dateien oder Informationen über Anwendungen.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
s. SharePoint REST API: Grundlegendes zum SharePoint REST-Dienst
Oder alternativ mittels SharePoint-Clientobjektmodell (CSOM): Ausführen grundlegender Vorgänge unter Verwendung von SharePoint-Clientbibliothekscode
Danke für die Starthilfe, leider bin ich noch nicht auf dem richtigen Weg 😦
Im Quellcode der Website ist folgendes Script hinterlegt:
<script language="javascript" type="text/javascript">
function timedRefresh(timeoutPeriod) {
setTimeout("window.location.href = window.location.href;",timeoutPeriod);
}
timedRefresh(600000);// for 10 minutes
var i=0;
var allCells = document.getElementsByTagName("td");
for(i=0;i<allCells.length; i++)
{if(allCells[i].innerText.indexOf("Cryoampel#") == 0)
{if(allCells[i-1].innerText == "Eingekühlt")
{
var sharepointtime = Math.abs(Date.parse("January 01 1900 00:00:00"))/1000/60/60;
var modtime = (allCells[i].innerText.split("#")[1]);
//Stunden seit 1900
modtime = modtime.replace(/,/g, '.')*24;
//modtime in Stunden seit 1970
var modtime_js = modtime-sharepointtime;
//currtime in Stunden seit 1970
var currtime = new Date();
//Korrektur für Sommerzeit
var jan = new Date(currtime.getFullYear(), 0, 1).getTimezoneOffset();
var jul = new Date(currtime.getFullYear(), 6, 1).getTimezoneOffset();
if(Math.max(jan, jul) != currtime.getTimezoneOffset())
{
currtime = (currtime.getTime()/1000/60/60)+1;
}
else
currtime = currtime.getTime()/1000/60/60;
var remtime = ((modtime_js + 4) - currtime)-48;
var sremtime = remtime.toString();
var remtimesplit = sremtime.split(".");
var remminutes = Math.abs(parseInt((remtime-parseInt(remtimesplit[0]))*60));
if (remminutes <10) {remminutes = "0"+remminutes};
if(remtime <= 0.5)
{
allCells[i].innerHTML = "<b><font color='red'>"+remtimesplit[0]+":"+remminutes+"</font></b>";
}
else
allCells[i].innerHTML = remtimesplit[0]+":"+remminutes;
}
else
allCells[i].innerHTML = "-";
}
}</script>
Ich vermute, dass der Wert "allCells_.innerHTML", der Wert ist, den ich benötige.
Das Einzige was ich bisher geschafft habe, ist den Quellcode als Ganzes downzuloaden:
WebClient client = new WebClient();
client.UseDefaultCredentials = true;
string reply = Client.DownloadString("http://...../Lists/SEMTEM%20cryo%20cycle%20tracker/AllItems.aspx");
Console.WriteLine(reply);
Aber das ist ja leider nicht das Ziel....
Muss ich das Script nicht irgendwie laufen lassen, damit ich den berechneten Wert bekomme?
Liest du dir die Antworten auf deine Frage eigentlich auch durch?
Niemand würde das so machen, SharePoint hat eine API, die genau für diese Zwecke entwickelt wurde. Wenn du die nicht verwendest, wird dir wohl niemand weiterhelfen können.
Weeks of programming can save you hours of planning
Na klar, lese ich mir die Antworten durch und Bernd hat gleich im ersten Kommentar geschrieben, ich solle es mit einem Web-Client probieren. Dies erschien mir der unkomplizierteste Weg....
Sorry, dass ich da mit meiner wenigen Erfahrung nicht die Kompetenz habe, auf Anhieb zu erkennen, welch die richtige, saubere Methode ist. Zumal viele Wege nach Rom führen, ob sie nun steinig oder asphaltiert sind sei mal dahin gestellt.