|
Service web WCF (à la Microsoft) |
Débuté par LC90176, 31 oct. 2012 14:29 - 4 réponses |
| |
| | | |
|
| |
Membre enregistré 34 messages Popularité : +1 (1 vote) |
|
Posté le 31 octobre 2012 - 14:29 |
Bonjour,
WinDev 17 (ou 18) sait-il consommer des services Web WCF ? De même, sait-il créer ce type de services ?
Ce serait pour interagir avec Sharepoint.
Merci pour les réponses. |
| |
| |
| | | |
|
| | |
| |
Posté le 30 novembre 2012 - 12:21 |
Bonjour,
Je suis à la recherche d'une solution aussi ...
Mes requêtes SOAP vers WDSL(Lists.asmx)Sharepoint 2010 passent avec [ HTTPParamètre(httpParamètreMode,1) => gestion de l'authentification via IE] et j'aurais voulu implémenter WCF pour s'authentifier avec login et pwd.
Merci pour vos réponses |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 203 messages Popularité : +3 (3 votes) |
|
Posté le 30 novembre 2012 - 19:15 |
Bonjour,
Ici on manipule des listes Sharepoint. Comme on a eu des difficultés pour utiliser directement le WebService on a fait une DLL maison en C#. La Dll manipule le WebService. Widev appelle la DLL pour lui demander une liste en texte ou envoyer une requête de mise à jour.
Cordialement,
Alex |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 203 messages Popularité : +3 (3 votes) |
|
Posté le 30 novembre 2012 - 19:21 |
Extraits de code :
using System; using System.Xml;
namespace Wssp { PUBLIC class WsspClass { PRIVATE static Site.Lists l = new Site.Lists();
PUBLIC static bool InitSite(string pUrlService) { l.UseDefaultCredentials = True; l.Credentials = System.Net.CredentialCache.DefaultCredentials; l.Url = pUrlService; RETURN True;
}
PUBLIC static string GetListAndView(string pListName, string pViewName = "") { xmlNode n = l.GetListAndView(pListName, pViewName); RETURN n.OuterXml; }
PUBLIC static string GetListCollection() {
string sRes = string.Empty; string sNeud = string.Empty;
xmlNode n = l.GetListCollection(); foreach (xmlNode m IN n) { sNeud = m.OuterXml; sRes += sNeud + Environment.NewLine; }
RETURN sRes;
}
PUBLIC static xmlNode GetListItems(string pIdElem, string pNomListe) {
XMLDocument xD = new XMLDocument(); xD.LoadXml("<Document><Query><Where><Eq><FieldRef Name='Title' /><Value Type='Text'>" + pIdElem + "</Value></Eq></Where></Query><ViewFields /><QueryOptions /></Document>");
xmlNode nQ = xD.SelectSingleNode("//Query"); xmlNode nV = xD.SelectSingleNode("//ViewFields"); xmlNode No = xD.SelectSingleNode("//QueryOptions");
xmlNode n = l.GetListItems(pNomListe, "", nQ, nV, null, No, null);
RETURN n;
}
PUBLIC static string GetListItemsS(string pIdListe, string pQuery, ref string pErr) {
string sRes = string.Empty;
XMLDocument xR = new XMLDocument(); xR.LoadXml(pQuery);
xmlNode nQ = xR.SelectSingleNode("//Query"); xmlNode nV = xR.SelectSingleNode("//ViewFields"); xmlNode No = xR.SelectSingleNode("//QueryOptions");
try { xmlNode xRes = l.GetListItems(pIdListe, "", nQ, nV, null, No, null); sRes = xRes.OuterXml; } catch (System.Web.Services.Protocols.SoapException x) { pErr = x.Detail.InnerText; }
RETURN sRes;
}
PUBLIC static bool UpdateListItems(string pIdListe, string pReq, ref string pErr) { bool bRes = True;
XMLDocument d = new XMLDocument(); d.LoadXml(pReq); XMLElement b = d.DocumentElement;
try { l.UpdateListItems(pIdListe, b); } catch (System.Web.Services.Protocols.SoapException x) { pErr = x.Detail.InnerText; bRes = False; }
RETURN bRes;
}
} }
Procedure PRIVÉE GLOBALE gbSpTrouveListe(stL est un stListeEtVue dynamique, LOCAL sNomListe est une chaîne, LOCAL sUrl est une chaîne, LOCAL sIdVue est une chaîne)
sXmlListes, sXmlListe, sXmlListEtVue, sXmlElements est une chaîne sErr, sIdListe, sListeTitre est une chaîne oX,oL est un cXml bRes est un booléen sChamps est une chaîne sViewFields est une chaîne sReqPage est une chaîne
nLi1PageSuivante,nLiNbEle est un entier sLiJetonPageSuivante, sLiPage est une chaîne
SI sUrl<>"" ALORS WsspClass.InitSite(sUrl) FIN
sXmlListes = WsspClass.GetListCollection() POUR TOUTE CHAINE sXmlListe DE sXmlListes SEPAREE PAR RC
oX:mbXmlInitialiseUTF8(sXmlListe) sListeTitre = oX:msXmlLit("@Title") sIdListe = oX:msXmlLit("@Name")
SI sIdListe=sNomListe ALORS
sXmlListEtVue = WsspClass.GetListAndView(sIdListe,sIdVue) SI oX:mbXmlInitialiseUTF8(sXmlListEtVue) ALORS sIdVue = oX:msXmlLit("/ListAndView/View/@Name") sViewFields = oX:msXmlExtrait("ViewFields")
sXmlElements = "" sLiJetonPageSuivante = "" nLi1PageSuivante=1 TANTQUE Vrai
SI sLiJetonPageSuivante<>"" ALORS nLi1PageSuivante+=nLiNbEle
FIN sReqPage = ::gsSpReqSelect(sChamps, sViewFields, sLiJetonPageSuivante) QUAND EXCEPTION DANS sLiPage = WsspClass.GetListItemsS(sNomListe, sReqPage, sErr) FAIRE sLiPage = "" FIN nLiNbEle=0 sLiJetonPageSuivante="" SI oL:mbXmlInitialiseUTF8(sLiPage) ALORS nLiNbEle = oL:msXmlLit("/listitems/rs:data/@ItemCount") sLiJetonPageSuivante = oL:msXmlLit("/listitems/rs:data/@ListItemCollectionPositionNext") FIN
sXmlElements +=[RC]+sLiPage
SI sLiJetonPageSuivante="" ALORS SORTIR FIN FIN
bRes = Vrai SORTIR FIN FIN FIN
SI bRes ALORS stL.sListeTitre = sNomListe stL.sListeId = sIdListe SI sUrl<>"" ALORS stL.sUrl = sUrl stL.sVueId = sIdVue stL.sXmlElements = sXmlElements stL.sCol = sChamps FIN
RENVOYER bRes
Procedure PRIVÉE mbSpEcrit(stL est un stListeEtVue dynamique)
sReq, sErr est une chaîne bRes est un booléen
sReq=[ <Batch OnError='Continue' ListVersion='1' ViewName='%1'> <Method ID='%2' Cmd='Update'> <Field Name='ID'>%2</Field> <Field Name='MessageErreurOREX'>%3</Field> <Field Name='Erreur_x0020_technique'>%4</Field> <Field Name='Erreur_x0020_contenu'>%5</Field> <Field Name='Statut_x0020_validation'>%6</Field> </Method> </Batch> ]
SI :bErrTechnique ET :bErrContenu ALORS
:mbMessageAjoute("Détécté (Erreur Technique) ET (Erreur Contenu) -> Annule erreur contenu !!!")
:bErrContenu=Faux FIN
:sErrMessage = Remplace(:sErrMessage,"<","(") :sErrMessage = Remplace(:sErrMessage,">",")") :sErrMessage = TexteVersXML(:sErrMessage) sReq=ChaîneConstruit(sReq, stL.sVueId, :sId, :sErrMessage, :bErrTechnique, :bErrContenu, :sStatutDoc) bRes = WsspClass.UpdateListItems(stL.sListeId, sReq, sErr)
RENVOYER bRes |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 203 messages Popularité : +3 (3 votes) |
|
Posté le 30 novembre 2012 - 19:35 |
Un autre bout de code :
Procedure PRIVÉE GLOBALE gsSpReqSelect(sChamps est une chaîne, LOCAL sViewFields est une chaîne, LOCAL sJetonPageSuivante est une chaîne)
sWhere, sReq est une chaîne oX est un cXml nEle est un entier sOptions est une chaîne sChamps = ""
sViewFields = ChaîneConstruit([ <ViewFields> %1 </ViewFields> ],sViewFields)
SI oX:mbXmlInitialiseUTF8(sViewFields) ALORS nEle = oX:mnXmlCount("/ViewFields/FieldRef") SI nEle>0 ALORS POUR nCpt = 1 A nEle sChamps+=[RC]+oX:msXmlLit("/ViewFields/FieldRef["+nCpt+"]/@Name") FIN FIN FIN
sWhere = [ <Eq> <FieldRef Name='Statut_x0020_validation' /> <Value Type='Choice'>Publiable</Value> </Eq> ]
sWhere=""
sReq = [ <Document> <Query> <Where> %2 </Where> </Query> %1 %3 </Document> ]
SI sJetonPageSuivante="" ALORS sOptions = "<QueryOptions/>" SINON sOptions = [ <QueryOptions> <Paging ListItemCollectionPositionNext='%1' /> </QueryOptions> ] sJetonPageSuivante = TexteVersXML(sJetonPageSuivante) sOptions = ChaîneConstruit(sOptions, sJetonPageSuivante) FIN
sReq = ChaîneConstruit(sReq,sViewFields,sWhere,sOptions)
RENVOYER sReq |
| |
| |
| | | |
|
| | | | |
| | |
|