http://blogs.msdn.com/b/dwinter/archive/2008/06/28/migrating-wiki-pages-remotely-part-01.aspx (6 भाग 1): मैं अपने खुद के MetaWeblog API कि प्रोग्राम के रूप में शेयरप्वाइंट 2010 में विकी पृष्ठों और 2007 मेरे स्रोतों का प्रबंधन करता है लुढ़का है एसपी 2010 और 2007 दोनों के लिए कोड काफी समान है, लेकिन कुछ चेतावनी हैं:
- 2010 में, विकी लिंक मार्कअप के प्रबंधन के बारे में चिंता करने की आवश्यकता नहीं है (उदा। [[कोष्ठक]])।
- 2007 में, विकी मार्कअप आपके अनुरोध पर परिवर्तित हो गया है, इसलिए आपको इसे वापस पोस्ट करने से पहले विकी मार्कअप में फिर से परिवर्तित करना होगा। वापस पोस्ट करने पर, आप अद्यतनListItems का उपयोग नहीं कर सकते हैं, आपको कॉपी सेवा का उपयोग करना होगा। ऐसा इसलिए है क्योंकि UpdateListItems किसी भी विकी मार्कअप से बच जाएगा, प्रभावी रूप से आपके प्रयासों को बेकार बना देगा।
- हमारे पर्यावरण में, हमें रिकॉर्डटाइप की जांच करने से पहले भरने की आवश्यकता है। शायद यह मानक है? यदि आप इस फ़ील्ड को सेट नहीं करते हैं, तो आपका पृष्ठ आपके लिए चेक आउट रहेगा। तो, मेरे पास एक सशर्त है जो इस क्षेत्र को SP2007 के लिए सेट करता है।
- 2010 में, एसपी कच्चे विकीफ़ील्ड मूल्य में मार्कअप का एक गुच्छा जोड़ता है, और यदि यह गायब है तो यह लेआउट को गड़बड़ कर सकता है। मैं बस इसे डब्लूएलडब्लू पोस्टिंग के मूल्य के चारों ओर डालता हूं, फिर इसे प्राप्त करने के लिए बाहर निकाल देता हूं। निचे देखो।
मैं विकी पृष्ठों को बनाने और अपडेट करने के पहले लिंक में कॉपी सेवा का उपयोग करता हूं। 2010 में, आप अद्यतन करने के लिए सूची सेवा का उपयोग कर सकते हैं, लेकिन जोड़ने के लिए नहीं। मैं चित्र पुस्तकालय में स्वचालित रूप से छवियों को अपलोड करने के लिए इमेजिंग सेवा का उपयोग करता हूं।
यहाँ एक समारोह "एमएस-wikilinks" को बदलने के लिए है मार्कअप विकि के लिए:
नोट: मैं HTMLAgilityPack मामले में मार्कअप लौटे विकृत है का उपयोग करें। आप इसे करने के लिए रेगेक्स का भी उपयोग कर सकते हैं। मैं मार्कअप को स्वच्छ करने के लिए माइक्रोसॉफ़्ट एंटी-एक्सएसएस 4.1 लाइब्रेरी का भी उपयोग करता हूं।
नोट 2: मेरा UrlDecode फ़ंक्शन System.Web, taken from here पर निर्भरता नहीं लेता है।
/// <summary>
/// Sharepoint 2007 is mean and converts [[wiki links]] once the page is saved in the Sharepoint editor.
/// Luckily, each link is decorated with class="ms-wikilink" and follows some conventions.
/// </summary>
/// <param name="html"></param>
/// <returns></returns>
private static string ConvertAnchorsToWikiLinks(this string html)
{
HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);
var anchorTags = (from d in htmlDoc.DocumentNode.Descendants()
where d.Attributes.Contains("class") && d.Attributes["class"].Value == "ms-wikilink"
select d).ToList();
foreach (var anchor in anchorTags)
{
// Two kinds of links
// [[Direct Link]]
// [[Wiki Page Name|Display Name]]
var wikiPageFromLink = UrlDecode(anchor.Attributes["href"].Value.Split('/').LastOrDefault().Replace(".aspx", ""));
var wikiPageFromText = anchor.InnerText;
HtmlNode textNode = null;
if (wikiPageFromLink == wikiPageFromText)
{
// Simple link
textNode = HtmlTextNode.CreateNode("[[" + wikiPageFromText + "]]");
}
else
{
// Substituted link
textNode = HtmlTextNode.CreateNode(String.Format("[[{0}|{1}]]", wikiPageFromLink, wikiPageFromText));
}
if (textNode != null)
{
anchor.ParentNode.ReplaceChild(textNode, anchor);
}
}
return htmlDoc.DocumentNode.InnerHtml;
}
समारोह SharePoint के एचटीएमएल पट्टी है:
/// <summary>
/// Gets editable HTML for a wiki page from a SharePoint HTML fragment.
/// </summary>
/// <param name="html"></param>
/// <returns></returns>
public static string GetHtmlEditableContent(string html)
{
HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);
HtmlNode divNode = (from d in htmlDoc.DocumentNode.Descendants()
where d.Attributes.Contains("class") && d.Attributes["class"].Value == "ms-rte-layoutszone-inner"
select d).FirstOrDefault();
HtmlNode divNode2 = (from d in htmlDoc.DocumentNode.Descendants()
where d.Attributes.Contains("class") && d.Attributes["class"].Value.StartsWith("ExternalClass")
select d).FirstOrDefault();
if (divNode != null)
{
// SP 2010
return divNode.InnerHtml;
}
else if (divNode2 != null)
{
// SP 2007 or something else
return divNode2.InnerHtml.ConvertAnchorsToWikiLinks();
}
else
{
return null;
}
}
और अंत में, समारोह है कि कि मार्कअप सब वापस जोड़ता है:
/// <summary>
/// Inserts SharePoint's wrapping HTML around wiki page content. Stupid!
/// </summary>
/// <param name="html"></param>
/// <returns></returns>
public static string InsertSharepointHtmlWrapper(string html, SharePointVersion spVersion)
{
// No weird wrapper HTML for 2007
if (spVersion == SharePointVersion.SP2007)
return Microsoft.Security.Application.Sanitizer.GetSafeHtmlFragment(html);
HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(@"<table id='layoutsTable' style='width:100%'>
<tbody>
<tr>
<td>
<div class='ms-rte-layoutszone-outer' style='width:99.9%'>
<div class='ms-rte-layoutszone-inner' style='min-height:60px;word-wrap:break-word'>
</div>
</div>
</td>
</tr>
</tbody>
</table>
<span id='layoutsData' style='display:none'>false,false,1</span>");
HtmlNode divNode = (from d in htmlDoc.DocumentNode.Descendants()
where d.Attributes.Contains("class") && d.Attributes["class"].Value == "ms-rte-layoutszone-inner"
select d).FirstOrDefault();
divNode.InnerHtml = Microsoft.Security.Application.Sanitizer.GetSafeHtmlFragment(html);
return htmlDoc.DocumentNode.InnerHtml;
}
यह काम करता है महान।
- पेज अभी भी अंतिम बार संशोधित और सही उपयोगकर्ता को बनाए रखने
- पेज अपने सभी
मैं अपने एपीआई प्रकाशित करने की सोच रहा हूँ प्रबंधन करने के लिए इतिहास
क्या किसी ने यह पता लगाया है कि शेयरपॉइंट डिजाइनर के बिना टेम्पलेट कैसे प्राप्त करें? –
विकी लिंक को पार्स करने के लिए रेगेक्स आसान था; लेकिन यह दूसरी तरफ काम नहीं करता है। यदि आप UpdateListItems और अपने विकीफ़ील्ड में [[ब्रैकेट]] छोड़ते हैं तो SharePoint इसे \\ [[ब्रैकेट] \\] में परिवर्तित करता है जो पूरी तरह से मेरे दिमाग को चकमा देता है। मैं यह नहीं समझ सकता कि इससे कैसे बचें; यदि मैं मैन्युअल रूप से लिंक को कन्वर्ट करता हूं, तो SharePoint तब उनसे लिंक के रूप में व्यवहार करेगा (कच्चे विकी मार्कअप के बजाय)। शिथिल शिथिल। एसपी -2010 में, यह तय है और यह सब ठीक काम करता है। मैं इसे SP2007 में काम करने की कोशिश कर रहा हूं। – kamranicus
समाधान मिला। आप सम्मिलित करने और अपडेट करने के लिए प्रतिलिपि सेवा का उपयोग कर सकते हैं, बस नाम को वही रखें। इसके बाद यह कच्चे विकी मार्कअप के रूप में मार्कअप लेता है और अपेक्षित काम करता है। बहुत बढ़िया! – kamranicus