Bonjour à tous,
Je suis développeur sur SAP et je cherche à étendre mes capacités sur le c# en créant une application qui permet de lire le flux OData sur Windows 8 qui est généré à partir de SAP Netweaver Gateway.
J'ai testé une application sur Windows seven avec une appli console qui fonctionne tres bien mais je ne peux pas porter mon code sur Windows 8 à cause du Framework.
L'application sur Windows 8 est sur le Framework 4.5 (je pense car je peux pas changer de Framework) j'ai ajouter le service de reference qui m'a généré une classe qui me permet de lire le flux.
Cette classe générée est différente de celle généré sous Windows seven.
Sous Windows seven j'ai une méthode qui s'appel Execute alors que sous Windows 8 j'ai une methode BeginExecute qui genere un thread.
ce thread appel une methode static lorsque le resultat est disponible qui s'appel "callBacK".
Je me documente beaucoup sur le net ce qui m'a permit de pondre le code suivant:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using System.Threading;
using Windows.UI.Popups;
//begin jcol
using System.Net;
using App6.ServiceReference1;
using System.Data.Services.Client;
// Pour en savoir plus sur le modèle d'élément Page vierge, consultez la page http://go.microsoft.com/fwlink/?LinkId=234238
namespace App6
{
/// <summary>
/// Une page vide peut être utilisée seule ou constituer une page de destination au sein d'un frame.
/// </summary>
public sealed partial class MainPage : Page
{
static AsyncCallback callback;
static int requestCounter;
static List<z_flight> tableau = new List<z_flight>();
string username = "monusersap";
string password = "monmotdepassesap";
ServiceReference1.Z_FLIGHT service;
public MainPage()
{
this.InitializeComponent();
callback = new AsyncCallback(callBacK);
string functionImportName = "z_flightCollection";
string serviceUrl = "monadresse d'interrogation";
service = new ServiceReference1.Z_FLIGHT(new Uri(serviceUrl));
service.Credentials = new NetworkCredential(username, password);
Interlocked.Increment(ref requestCounter);
string relativeUri = functionImportName;
Uri uri = new Uri(relativeUri, UriKind.Relative);
service.BeginExecute<z_flight>(uri, callback, service);
while (requestCounter > 0)
{
}
UpdateUI();
}
private void UpdateUI()
{
foreach (z_flight flight in tableau)
{
ListViewItem item = new ListViewItem();
item.Content = flight.airline + " " + flight.airlineid + " " + flight.airportfr + " " + flight.airportto + " " + flight.arrdate; ;
listview1.Items.Add(item);
}
}
public void callBacK(IAsyncResult result)
{
// Decrement the request counter in a thread-safe manner.
Interlocked.Decrement(ref requestCounter);
DataServiceQuery<z_flight> query = result as DataServiceQuery<z_flight>;
tableau = query.EndExecute(result).ToList<z_flight>();
}
}
}
Tout fonctionne tres bien sauf au moment ou je veux recuperer le resultat dans la methode "callBacK" à la ligne suivante:
DataServiceQuery<z_flight> query = result as DataServiceQuery<z_flight>;
query = null
J'ai l'impression qu'une exception est levé mais je n'arrive pas à la déterminer.
Pourriez vous m'aider?
Merci d'avance.
Cdlt
Jonathan
Partager