Cet exemple montre comment créer un client SOAP sur base du framework .net 4.0 et utilisant MercatorWebService. Cet exemple est soumis aux réserves suivantes :
- il est fourni "as is" et sans support
- il convient d'y ajouter une gestion des exceptions (try catch) afin de gérer les cas où le web service n'est pas ou plus disponible.
Afin de pouvoir utiliser un web service, il faut, dans Visual Studio, ajouter une référence de service. Cela se fait via un clic-droit sur "Références" et sélection de "Ajouter une référence de service". Dans la zone "Adresse", il faut saisir http://testws.mercator.eu/MercatorWebService.asmx (adaptée en fonction de votre domaine). Dans notre exemple, nous avons adapté l'espace de nom en "MercatorWebService40".
Note : si, lors de la réception d'une réponse, une exception est levée et indique une erreur dans le corps du message (body of message), lors de la désérialisation, il suffit d'augmenter la valeur de ces paramètres dans le fichier app.config (ou web.config si votre application est une application asp.net) : (valeurs données à titre indicatif)
Créer une facture dans le journal Factu :
MercatorWebService40.MercatorWebServiceSoapClient client = new MercatorWebService40.MercatorWebServiceSoapClient();
MercatorWebService40.SecurityInfo si = new MercatorWebService40.SecurityInfo();
si.SecureKey = ... ;
MercatorWebService40.StringMws s = client.BillingEngineInitNew(si, MercatorWebService40.TypeVAEnum.V, 1, "Factu");
if (!string.IsNullOrEmpty(s.LastError))
{
MessageBox.Show("BillingEngineInitNew : " + s.LastError);
return;
}
// à partir d'ici, il est obligatoire d'appeler la méthode BillingEngineClose
string uniqueId = s.Value;
MercatorWebService40.BooleanMws b = client.BillingEngineApplyCustomerSupplier(uniqueId, "INEO52209");
if (!string.IsNullOrEmpty(b.LastError))
{
MessageBox.Show("ApplyCustomerSupplier : " + b.LastError);
}
else
{
MercatorWebService40.Int32Mws i = client.BillingEngineAppendLine(uniqueId);
if (!string.IsNullOrEmpty(i.LastError))
{
MessageBox.Show("BillingEngineAppendLine : " + i.LastError);
}
else
{
b = client.BillingEngineInsertItem2(uniqueId, "03102001", i.Value, 5); // q = 5
if (!string.IsNullOrEmpty(b.LastError))
{
MessageBox.Show("InsertItem : " + b.LastError);
}
else
{
b = client.BillingEngineUpdateAmounts(uniqueId);
if (!string.IsNullOrEmpty(b.LastError))
{
MessageBox.Show("BillingEngineUpdateAmounts : " + b.LastError);
}
else
{
b = client.BillingEngineSave(uniqueId);
if (!string.IsNullOrEmpty(b.LastError))
{
MessageBox.Show("BillingEngineSave : " + b.LastError);
}
else
{
MercatorWebService40.Int64Mws p = client.BillingEngineSavedNumber(uniqueId);
if (!string.IsNullOrEmpty(p.LastError))
MessageBox.Show("BillingEngineSavedNumber : " + p.LastError);
else
MessageBox.Show(string.Format("La vente {0} {1} a été créée !", "Factu", p.Value));
}
}
}
}
}
MercatorWebService40.VoidMws v = client.BillingEngineClose(uniqueId); // toujours terminer par BillingEngineClose() après un InitNew fructueux
if (!string.IsNullOrEmpty(v.LastError))
MessageBox.Show("BillingEngineClose : " + v.LastError);
Modifier une facture existante dans le journal Factu :
MercatorWebService40.MercatorWebServiceSoapClient client = new MercatorWebService40.MercatorWebServiceSoapClient();
MercatorWebService40.SecurityInfo si = new MercatorWebService40.SecurityInfo();
si.SecureKey = ... ;
MercatorWebService40.StringMws s = client.BillingEngineInitExisting(si, MercatorWebService40.TypeVAEnum.V, 1, "00F384F9FE", "Factu", 201300003);
if (!string.IsNullOrEmpty(s.LastError))
{
MessageBox.Show("BillingEngineInitExisting : " + s.LastError);
return;
}
// à partir d'ici, il est obligatoire d'appeler la méthode BillingEngineClose
string uniqueId = s.Value;
MercatorWebService40.DataSetMws ds = client.BillingEngineDataSet(uniqueId);
if (!string.IsNullOrEmpty(ds.LastError))
{
MessageBox.Show("BillingEngineDataSet : " + s.LastError);
}
else
{
MercatorWebService40.BooleanMws b = client.BillingEngineUpdateLigne(uniqueId, 0, "pu", 100); // changer le prix unitaire sur la ligne 0
if (!string.IsNullOrEmpty(b.LastError))
{
MessageBox.Show("BillingEngineUpdateLigne : " + b.LastError);
}
else
{
b = client.BillingEngineUpdateAmounts(uniqueId);
if (!string.IsNullOrEmpty(b.LastError))
{
MessageBox.Show("BillingEngineUpdateAmounts : " + b.LastError);
}
else
{
MercatorWebService40.DataTableMws dt = client.BillingEnginePIEDS(uniqueId);
if (!string.IsNullOrEmpty(dt.LastError))
{
MessageBox.Show("BillingEnginePIEDS : " + dt.LastError);
}
else
{
double tot_ttc_dv = Convert.ToDouble(dt.Value.Rows[0]["TOT_TTC_DV"]);
b = client.BillingEngineSave(uniqueId);
if (!string.IsNullOrEmpty(b.LastError))
MessageBox.Show("BillingEngineSave : " + b.LastError);
else
MessageBox.Show(string.Format("Le nouveau total est {0:### ##0.00} !", tot_ttc_dv));
}
}
}
}
MercatorWebService40.VoidMws v = client.BillingEngineClose(uniqueId); // toujours terminer par BillingEngineClose() après un InitExisting fructueux, sinon ce document sera non modifiable dans Mercator car en cours de modification
if (!string.IsNullOrEmpty(v.LastError))
MessageBox.Show("BillingEngineClose : " + v.LastError);
Obtenir une dataTable contenant le premier client :
MercatorWebService40.MercatorWebServiceSoapClient client = new MercatorWebService40.MercatorWebServiceSoapClient();
MercatorWebService40.SecurityInfo si = new MercatorWebService40.SecurityInfo();
si.SecureKey = ... ;
MercatorWebService40.DataSetMws ds = client.Zselect(si, "select top 1 * from cli");
if (!string.IsNullOrEmpty(ds.LastError))
{
MessageBox.Show("Zselect : " + ds.LastError);
return;
}
DataTable dt_cli1 = ds.Value.Tables[0];
Lire quelques propriétés de MercatorUi.Globals :
MercatorWebService40.MercatorWebServiceSoapClient client = new MercatorWebService40.MercatorWebServiceSoapClient();
MercatorWebService40.SecurityInfo si = new MercatorWebService40.SecurityInfo();
si.SecureKey = ... ;
MessageBox.Show("SqlServer = " + client.GlobalsSqlServer(si));
MessageBox.Show("RepData = " + client.GlobalsRepData(si));
MercatorWebService40.StringMws s = client.GlobalsParams(si, "LANGUE_DEF");
if (!string.IsNullOrEmpty(s.LastError))
MessageBox.Show("GlobalsParams : " + s.LastError);
else
MessageBox.Show("LANGUE_DEF = " + s.Value);