Manchmal, aber nur manchmal wäre es sehr nett ...
Java Script ASP.NET Sharepoint
wenn man irgendwie auf ein bestimmtes Item in einer Sharepoint Liste mit JavaScript zugreifen könnte.
Die meisten JS-Frameworks Prototype, EXTJS usw. verstehen ja JSON.
Was liegt also näher, als die Möglichkeit zu schaffen, ein bestimmtes Item in JSON wandeln zu dürfen
Kategorie wenn man irgendwie auf ein bestimmtes Item in einer Sharepoint Liste mit JavaScript zugreifen könnte.
Die meisten JS-Frameworks Prototype, EXTJS usw. verstehen ja JSON.
Was liegt also näher, als die Möglichkeit zu schaffen, ein bestimmtes Item in JSON wandeln zu dürfen
Ich habe es wie folgt gelöst:
ASPX-Seite bauen, welche als Parameter die Site, Web, Liste und ID des Elementes bekommt.
Dieses liefert in JSON den StaticName, den Displayname und den Value...
Die StaticNames habe ich mit einem fn_ vor dem eigentlichen StaticName markiert.
Als Wert z.B. fn_Title bekommt dieses dann den "DisplayName" z.B.: Vertrag.
Im Item Vertrag kommt dann der Wert.
Am Ende sieht das ungefähr so aus:
{ fn_Title:'Vertrag',Vertrag:'17/20' }
Hier der Code:
<%@ PageLanguage="C#" %>
<%@ Importnamespace="Microsoft.SharePoint"%>
<script runat="server">
protected overridevoid OnLoad(EventArgs e) {
if (!IsPostBack) {
Response.ContentType = "application/json";
string sSite = Request.QueryString"site";
string sWeb = Request.QueryString"web";
string sList = Request.QueryString"list";
string sID = Request.QueryString"id";
using (SPSite site = new SPSite(sSite)) {
using (SPWeb web = site.AllWebs[sWeb]) {
SPList list = web.Lists[sList];
SPListItem li = list.GetItemById(int.Parse(sID));
SPFieldCollection fc = li.Fields;
bool bFirst = true;
Response.Write("{");
foreach (SPField field in fc) {
if (bFirst) {
bFirst = false;
} else {
Response.Write(",");
}
Response.Write("fn_" + field.StaticName+":'");
Response.Write(field.Title + "',");
Response.Write(field.StaticName+":'");
if (li[field.Title]==null) {
Response.Write("'");
} else {
Response.Write(li[field.Title].ToString()+"'");
}
}
Response.Write("}");
}
}
}
}
</script>
Gruß JJR
P.S.: Den Content-Type mußte ich umsetzen, da die JS-Frameworks evtl. eine Prüfung des Content-Types vornehmen