Nous devons accéder à un site sharepoint 2007 depuis javascript. Fondamentalement, nous devons utiliser le service search.asmx mais comme il ne supporte pas le repos ni jsonp, il ne peut pas être utilisé directement.Comment faire un service de repos avec la capacité JSONP à exécuter dans Sharepoint 2007 (MOSS)?
Le plan d'origine était de faire un service wcf personnalisé avec le support pour repos et jsonp. C'était une petite entreprise mais quand j'ai donné le service aux gars de Sharepoint, aucun d'entre eux ne pouvait l'empaqueter dans un paquet wsp pour l'installer dans sharepoint 2007 et le faire fonctionner.
Selon cette question Rest Webservices for Sharepoint 2007 cela peut ne pas être si facile et un httpmodule est requis pour les URLs au repos. L'autre idée de l'exécuter en tant qu'application autonome peut ne pas suffire car je pense que le service a besoin d'accéder à SPContext.
Serait-il possible de créer simplement un Application Page et là dans le code derrière override Render, effacer le tampon de sortie, changer le type mime et rendre les données json-sérialisées? Donc l'url serait http://spsite/mycustomquery.aspx?q=mysearchtext&start=0&count=200&callback=mycallbackfunction
.
Une page d'application prendrait au moins en charge Get, mais a-t-elle accès à SPContext?
Voici le service wcf avec lequel j'ai commencé.
contrat
[ServiceContract]
public interface IRestSPQuery
{
[OperationContract]
[WebGet(UriTemplate = "query/{queryText}/{startAt}/{count}?callback={callback}", ResponseFormat = WebMessageFormat.Json)]
[JSONPBehavior(callback = "callback")]
ResultTable Query(string queryText, string startAt, string count, string callback);
}
mise en œuvre
public ResultTable Query(string queryText, string startAt, string count, string callback)
{
//http://sharepointsite/_vit_bin/CustomQuery/RestSPQuery.svc/Query/searchtext/0/200?callback=myfunction
KeywordQuery keywordQuery = new KeywordQuery(SPContext.Current.Site);
keywordQuery.StartRow = startAt;
keywordQuery.RowLimit = count;
keywordQuery.SortList.Add("Rank", SortDirection.Descending);
keywordQuery.QueryText = queryText;
ResultTableCollection searchResults = keywordQuery.Execute();
ResultTable relevantResultsTable = searchResults[ResultType.RelevantResults];
return relevantResultsTable;
}
Merci pour la suggestion. Ressemble à ce que j'ai suggéré ici (http://stackoverflow.com/questions/14092364/can-i-change-mime-type-and-rendered-output-in-application-page-in-sharepoint-200). Apparemment, Ashx n'est pas autorisé dans Moss par défaut. – MathiasR
@MathiasR Vous avez raison d'être bloqué par défaut mais il est possible de [débloquer] (http://blogs.technet.com/b/sharepointcomic/archive/2009/01/07/blocked-file-types-in -sharepoint.aspx) eux. – skeletank