分類存檔: jQuery 和 SharePoint

克服惱人的問題與 SharePoint 快速啟動中的相對 Url

我想要將連結添加到快速啟動導航那天和 SharePoint 告訴我:

image

純文字版本的是:

確保該 URL 是有效的和開頭也是有效的字元 (數位記號 (#) 或正斜杠 (/)) 或有效支援的協定 (舉個例子, HTTP://’, HTTPs://’, 檔://’, ftp://’, mailto:’, ' 新聞:’).

"Blech 和痘!"我說.

對此的解決方法是使用 JavaScript 在快速啟動中查找已知的連結和重寫其行為.

對此進行測試, 添加新連結到您的測試網站難耐:

image

我使用 jQuery. 要解決這個問題, 得到一些 JavaScript 和 jQuery 拖到頁上使用您喜歡的方法和代碼像這樣的一條線:

 

$(文檔).準備好了( 功能 () {

    $("一:包含(測試 URL 替換)").按一下(功能 () { 警報("更改的按一下行為!"); 返回 false;});

});

鮑勃的你叔叔.

JQuery 選擇器查找每個 <一> 標記在其名稱中包含"測試 URL 替換". 您可能想要查找-曲調,根據您的連結和這種.

筆者(功能() 重寫 SharePoint 將所做的一切當使用者按一下. 請確保您"返回 false",否則它會做你的東西,然後嘗試 href 東西太, 幾乎可以肯定不是你的目標.

這樣做的和在 SharePoint 的線上環境中測試,但應該很好的工作 2010 和早些時候太.

</結束>

undefined訂閱我的博客.

跟我在 Twitter 上 http://www.twitter.com/pagalvin

快速和簡單: 解決"無效 URL 參數” UpdateListItems 在 lists.asmx 的問題

當通過 lists.asmx 和 UpdateListItems 一起工作, 很容易地建置錯誤:

不正確 URL 參數.

所提供的 URL 包含無效命令或值. 請再次檢查 URL.

你可以得到此錯誤,當您忘了包括 ID 在要更新的欄位的清單。  這, 像很多這些 SP 的 web 服務, 是有點違反直覺的因為你需要的 ID 屬性中包含的 ID <方法> 元素。  你不更新 ID 和可能永遠不會想在第一次的地方.

此 SOAP 信封工程:

<soapenv:信封 xmlns:soapenv =' HTTP://schemas.xmlsoap.org/soap/envelope/'>
  <soapenv:正文>                      
    <UpdateListItems xmlns =' HTTP://schemas.microsoft.com/sharepoint/soap/'>                     
      <listName>{C712E2EA-54E1-47AD-9D99-1848C7773E2F}</listName>                     
        <更新>                     
         <批次處理 OnError ="繼續">
          <方法 ID ="1" Cmd ="更新">
            <欄位名稱 ="CooperativeLock">鎖定!</欄位>
            <欄位名稱 ="ID">1</欄位>
          </方法>
        </批次處理>                     
        </更新>                
      </UpdateListItems>             
  </soapenv:正文>         
</soapenv:信封>

如果你帶出來的 ID 欄位引用然後你會令人討厭的"無效 URL 參數"消息.

</結束>

undefined訂閱我的博客.

跟我在 Twitter 上 http://www.twitter.com/pagalvin

 

可憐的人在 JavaScript 中的緩存

[TL;博士版本: 使用 cookie 來存儲非同步調用的結果; 立即呈現過去非同步調用的結果,然後在頁面載入後驗證它們。]

我一直在 SharePoint 的內聯網網站為用戶端的功能, 除其他事項外, 程式化的二級導航功能表選項都通過週期性老自訂清單管理。  想法是在用戶端獲取,不影響或受影響,由它推出的全球導航控制"他們的"網站的功能表.

(有件事令人難以置信顛覆有關添加指向一個 HTML 檔案,載入一些 CSS 和 JS,從根本上改變幾乎一切有關網站的行為......,但那是另一篇文章為 CEWP)

這個漂亮的簡單的代碼:

痛點在這裡是每次有人點擊該網站的頁面之一, 該使用者的 web 瀏覽器中伸出來獲取清單中的項。  一旦開發完成並測試已被證明是穩定和完整的東西, 此調用是不必要的多 99% 因為功能表中很少發生變化的時間。  它也有一個很奇怪的 UI 影響這是共同的在這個勇敢新世界超 ajaxy web 網站的 — — 頁上呈現,並只然後不會呈現在功能表。  它是緊張不安,我認為讓人分心。  和抖動. 所以, 緩存。 

我修改邏輯難耐:

  • 查找包含功能表中,如我上次讀取它的瀏覽器中的 cookie
    • 如果發現, 立即呈現它。  不要等待頁面完成載入。  (你需要確保你的 HTML 擺放在這裡, 但它並不難做).
  • 等待頁面完成載入,並進行非同步調用以載入了功能表項目從清單中使用休息或 lists.asmx 或不管
  • 比較我對 cookie
    • 如果它與匹配, 停止
    • 否則, 使用 jQuery 的, 如果動態填充一群 <李>中 <ul>
  • 使用 CSS 來做的所有格式
  • 利潤!

你們中的一些會說, "嘿! 沒有真正緩存會在這裡因為你反正讀功能表中 每一次.”  你說得對 — — 我不會給伺服器任何種類的斷裂。  但因為該調用是非同步和頁面的初始後會發生完全呈現 HTML 有效載荷, "感覺"更能回應使用者。  功能表中呈現漂亮一樣頁上繪製。  如果功能表中發生了變化, 使用者因此而遭受抖動重新繪製功能表, 但僅此一次.

有一些方法可以使此緩存功能更加有效和伺服器在同一時間幫忙:

  • 在"cookie 緩存"是有效的最低限度的規則中 24 小時或一些其他時限. 只要沒有過期的 cookie, 使用 cookie 的功能表快照和從來沒打伺服器.

哦那是所有現在我想說 :). 

如果任何人有任何聰明的想法在這裡我想要知道他們.

最後 — — 這種技術可以用於其他的東西。  此客戶機的頁的各種頁面都有一些資料驅動的事情, 其中許多不斷變化的相對較少 (像每週或每月一次).  如果您針對特定地區的功能, 您可以從本地 cookie 存儲拉內容並立即呈現給回應更快的使用者介面。  感覺速度更快,使用者即使不保存在伺服器任何週期。  你 可以 通過一些條件和觸發器決定廢除此 cookie 本機快取保存伺服器週期。  這就是所有情景和富有藝術氣息的東西和真正最大的樂趣 :). 

</結束>

undefined訂閱我的博客.

跟我在 Twitter 上 http://www.twitter.com/pagalvin

XSLT 和 jQuery 樣本

我做了很多的 XSLT 和 jQuery 和思想會分享他人在將來可能會發現有用的幾個片段.

示例 1: 發出簡單 JavaScript / 在 XSLT jQuery:

<xsl:範本匹配 ="的東西" xml:空間 ="維護">

  <!– 出查詢友好篩選器隱藏欄位保留為空 –>
  <腳本類型 ="文本/javascript">
    $(文檔).準備好了(功能(){
      $(""#QueryFriendlyFilters).瓦爾("空");
    });
  </腳本>

</xsl:範本>

這位會發出一些等待完成載入頁面的 JavaScript (由於 $(文檔).準備好了(…)) 和則集命名隱藏的欄位的值為 QueryFriendlyFilters,"空"的文本值.

示例 2: 使用 <xsl:如果> 要檢查"大於",  "小於", 等.

<xsl:範本匹配 ="的東西" xml:空間 ="維護">

  <div id ="fdcAllFilters">
 
    <xsl:如果 test="@Count>0">
      <跨類 ="fdcFilterLabel">當前的篩選器:</大跨度>
    </xsl:如果>

    <!– 在這裡發生了更多的東西. –>

</xsl:範本>

在上面的程式碼片段檢查名為"計數"的"東西"元素的屬性是否大於零。  這背後的 XML 就像:”

<東西計數 ="5"/>

示例 3: 迴圈訪問所有元素, 排布 jQuery 的調用.

<!– 遍歷的所有篩選器,並顯示正確  連結. –>
<xsl:為每個選擇 ="UserFilter">

  <一類 ="FilterHref" href ="javascript:mySubmitPage('' RemoveUserFilter,'{@ ID}’)">[X]</一>

  <跨類 ="fdcFilterLabel"><xsl:值的 select="@FilterValue"/></大跨度>

  <腳本類型 ="文本/javascript">

    $(文檔).準備好了(功能(){
        <xsl:文本><![CDATA[$(""#QueryFriendlyFilters).瓦爾( ($(""#QueryFriendlyFilters).瓦爾() + " ]]></xsl:文本>\"<xsl:值的 select="@FilterValue"/>\"<xsl:文本><![CDATA["));]]></xsl:文本>
    });

  </腳本>

</xsl:為每個>

上面的程式碼片段是最複雜的可能還有更容易的方法做這件事.

這背後的 XML 大致如下:

<UserFilter ID ="123"FilterValue ="xyzzy"/>

此程式碼片段迴圈訪問 <UserFilter> 節點。 

它首先發出錨標籤,按一下時調用已經在頁面上的 JavaScript 函數, "mySubmitPage",並傳遞的屬性的值 <UserFilter> 名為"ID"的節點。 

然後,它會發出一些等待載入頁面的 jQuery。  那 jQuery 更新隱藏的欄位命名為"QueryFriendlyFilters"中添加 FilterValue 屬性的值。  請注意所有瘋狂 <xsl:文本> 和 <![CDATA[ … ]]> 東西.

就是這樣, 希望它可以説明!

</結束>

訂閱我的博客.

跟我在 Twitter 上 http://www.twitter.com/pagalvin

Lists.asmx, GetListItems 和資料夾

我做了一些調查有人今天周圍作為 SharePoint 的一部分提供的 list.asmx web 服務 2010 (及更早版本).  她之所以能夠獲得在根資料夾的清單項 (包括子資料夾的名稱), 但不能在子資料夾中的專案。  我做了一些環顧四周在互聯網絡上,這是一個令人驚訝的常見的問題。  然而, 沒能得到很好簡單問題的答案, "如果我知道該資料夾, 如何獲取資料夾中的專案?”  要誠實, 因為我想我自己對這一出圖了一會兒我並沒有試圖在所有的努力 微笑.

進行此設置, 我創建了名為"博客情境"網站和自訂清單名稱為"自訂清單的子資料夾"。  然後創建資料夾名:

  • 一年 2005
  • 一年 2006
  • 一年 2007

我添加的資料夾"2006 年"幾個專案。  這是它看起來像:

image

我的朋友並不是編寫 C# 代碼,但寧願使用 Java, 所以 SOAP 信封是她的真正需要。  達到目標,, 寫了有點 jQuery,然後用於小提琴手獲得實際的 HTTP 會話.

這裡是有關 jQuery (我複製代碼下下麵如果要複製/粘貼):

image

他們第一個關鍵是要包括兩個 <queryOptions> 和 <QueryOptions> 節點。  第二個關鍵是, <資料夾> 節點是一個 URL,用戶端可以訪問.

可能有其他方法來獲得這, 但這工作對我來說,使用 jQuery 時.

這裡是上述的 SOAP 信封:

<soapenv:信封 xmlns:soapenv =’http://schemas.xmlsoap.org/soap/envelope/’>                
  <soapenv:正文>
    <GetListItems xmlns =’
http://schemas.microsoft.com/sharepoint/soap/’>
      <listName>自訂清單的子資料夾</listName>
      <viewFields>  
        <ViewFields>
          <FieldRef 名稱 =' 標題’ />
          <FieldRef 名稱 ='EncodedAbsUrl’ />
        </ViewFields>
      </viewFields>
      <queryOptions>
        <QueryOptions>
          <資料夾>
http://demoserver1/博客 子資料夾/2006 年年方案/清單/自訂清單</資料夾>
        </QueryOptions>
      </queryOptions>
   
</GetListItems>
  </soapenv:正文>
</soapenv:信封>

很多例子和討論圍繞這讓我相信我所需要的是 <QueryOptions> 並指定資料夾名稱。  對我來說, 我需要這兩包內 <queryOptions> 也可以指定完全限定的 URL <資料夾> 節點.

這裡是 jQuery AJAX 安裝程式:

$(文檔).準備好了(功能() {
       var soapEnv =
           "<soapenv:信封 xmlns:soapenv =’http://schemas.xmlsoap.org/soap/envelope/’> \
               <soapenv:正文> \
                    <GetListItems xmlns =’http://schemas.microsoft.com/sharepoint/soap/’> \
                       <listName>自訂清單的子資料夾</listName> \
                       <viewFields> \
                           <ViewFields> \
                              <FieldRef 名稱 =' 標題’ /> \
                              <FieldRef 名稱 ='EncodedAbsUrl’ /> \
                          </ViewFields> \
                       </viewFields> \
                       <queryOptions> \
                         <QueryOptions> \
                           <資料夾>http://demoserver1/Blogging 子資料夾/2006 年年方案/清單/自訂清單</資料夾> \
                         </QueryOptions> \
                       </queryOptions> \
                   </GetListItems> \
               </soapenv:正文> \
           </soapenv:信封>";

</結束>

訂閱我的博客.

跟我在 Twitter 上 http://www.twitter.com/pagalvin

Lists.asmx, GetList 和"的值不能為空”

我今天發現的 GetList() 中的方法 lists.asmx web 服務已非常仔細地調用或很容易引發一種神秘"的值不能為空"的異常 (這是假設你過去的更糟的一般錯誤訊息, "類型的異常 ' Microsoft.SharePoint.SoapServer.SoapServerException’ 引發了。")  具體, 我發現你不能提供任何種類的首碼的 GetList 方法。  下面的 jQuery 片斷闡釋了點:

image

如果你這樣做, 以"值不能為空"按此 web 服務回應 小提琴手-提供 HTTP 談話全文:

<?xml 版本 ="1.0" 編碼 ="utf-8"?>
  <肥皂:信封
     xmlns:soap ="
http://schemas.xmlsoap.org/soap/envelope/"    
     xmlns:xsi ="
http://www.w3.org/2001/XMLSchema-instance
     xmlns:xsd ="
http://www.w3.org/2001/XMLSchema">

  <肥皂:正文>
    <肥皂:故障>
      <faultcode>肥皂:伺服器</faultcode>
      <faultstring>
        類型的異常 ' Microsoft.SharePoint.SoapServer.SoapServerException’ 引發了.
      </faultstring>
      <詳細>
        <errorstring xmlns ="
http://schemas.microsoft.com/sharepoint/soap/">
值不能為空.
        </errorstring>
      </詳細>
    </肥皂:故障>
  </肥皂:正文>
</肥皂:信封>

答案是肯定的, 您很可能不會添加該"s0"首碼你自己, 但是一些工具是容易做這件事 (像日食).

這是更令人困惑 / 令人沮喪,因為其他的方法能容忍首碼。  例如, " GetListCollection 方法不介意是否它首碼, 即使使用像"xyzzy"廢話首碼:

image

這"的值不能為空"似乎相當常見,所以希望這會説明別人,在將來的 lists.asmx 與.

</結束>

訂閱我的博客.

跟我在 Twitter 上 http://www.twitter.com/pagalvin

無止境地嵌套 <div> 標記和 jQuery

這似乎是一個古怪的話題, 我不確定這的確值得有關的博客, 但是,從未停止過我, 所以在這裡我們去 微笑

我正在那裡我揪一些資料從搜索專案, 打包成一條 XML 消息,然後該 XML 是最終轉換為 XSLT 通過 HTML。  有很多的 jQuery 涉及, 其中一位實現一些定位字元的功能。  當您按一下某個選項卡上 (真的, 一 <div>), jQuery 調用.hide() 和.show() 對各種 div (初始頁面載入下載的所有內容,所以在這種情況下有沒有回發).

一群小時前, 選項卡切換邏輯開始運行不穩定,它不會顯示我的選項卡中的一個。  我最終跟蹤它的事實,ie 瀏覽器 (至少) 原以為, <div> 到目前為止的嵌套標籤, 遠比預期更深。將顯示開發人員工具列:

-<div id ="Tab1Content">
  -<div>
    -<div>
      -<div id ="Tab2Content">
        -<div>
           …………………………
                   </div>  <— — 終於呈現它一路下來被關閉!

所以, 如果我做了 $("#"Tab1Content).隱藏(), 我還會隱藏前臺,我可能永遠不會告訴前臺是否我還沒給看標籤頁 1。  複製,並且的代碼粘貼到 visual studio 和它很好地顯示所有 div 的襯砌起來的, 就像他們應該做的事情, 這樣看:

-<div id ="Tab1Content">
  +<div>
  +<div>
-<div id ="Tab2Content">
  +<div>
  +<div>

我的頭靠在牆上打了一會兒,並注意到在實際的 HTML 代碼產生大量的空 <div> 標籤, 像:

<正文>

  <div id ="Tab1Content">

    <div id ="第一行"/>
    <div id ="行 2"/>

  </div>

  <div id ="Tab2Content">

    <div id ="第一行"/>
    <div id ="行 2"/>

  </div>

</正文>

(以上是過於簡單化的 waaaaaaaaaaaay。  空的 div 標籤都是完全有效. 一些我 <div> 標記是內容的完整, 但更多的不是。  我認識到,那我 <xsl:為每個> 指令發出短型 div 標籤時 xsl:對於每個才 ' 找到的任何資料。  被迫輸出的 HTML 注釋, 如圖所示:

image

 

畢竟這樣做, 所有 div 的很好地都排隊和我選項卡切換開始工作.

如往常一樣, 我希望這將有助於在必要時有人.

</結束>

訂閱我的博客.

跟我在 Twitter 上 http://www.twitter.com/pagalvin

然而更多的 jQuery–調整大小圖像示例

我從用戶端的舊供應商那裡繼承了一個 web 部件,它有一個圖像的大小問題。  圖片應該是 60 歲×50 但由於一些奇怪的原因, 原始供應商將他們被迫 42×42, 因此,他們看擠壓:

 

良好的形象

壞形象

這裡是標記 (某種程度上簡化):

<表類 =' 擴展 outlook'>
  <thead>
    <tr>
      <th  寬度 = 100′>3 星期二</th>
    </tr>
  </thead>

  <tbody>
    <tr 類 = '預測'>
      <td 寬度 = 100′>
        <ul>
          <李班 = '高'>高: 72&二甘醇;F</李>
          <李班 = '低'>低: 44&二甘醇;F</李>
          <李班 = '狀況'>陽光燦爛
            <img src =’
http://deskwx.weatherbug.com/images/Forecast/icons/localized/60×50/en/trans/cond007.png’ 寬度 = 42年’ 高度 = 42年’ 按住 alt =” />
          </李>
        </ul>
      </運輸署>
    </tr>

  </tbody>

</表>

您會注意到儘管 圖像本身的路徑 顯示正確的尺寸 (60×50) 原始供應商迫使它在 42×42.  為什麼?  瘋狂.

不管怎麼說, 我想要快速而輕鬆地解決這個問題,我轉向了 jQuery。  訣竅是要找到相應的所有 <img> 標記。  我不想與任何其他 img 標籤弄髒 (其中有很多).  這位的 jQuery 沒有訣竅:

<腳本類型 ="文本 javascript" src ="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></腳本>

<腳本類型 ="文本/javascript">
     $(文檔).準備好了(功能 () {

         $(' li.condition > img').每個(功能 (索引, 專案)
           
{
             $(專案).css("寬", ""60); 
             $(專案).css("高度", ""50);
            });
     }); // 在文檔載入
</腳本>

這段代碼查找集合 <李> 誰的班是"條件"的標籤, <img> 孩子們。  它然後遍歷所有這一切。  立竿見影.

我大概可以簡化它, 但我永遠不會是那種解決 π 的 unix 傢伙 自 18 數位精度使用 sed 和 awk 和我不是那種,如果 jQuery 傢伙要麼 微笑.

</結束>

訂閱我的博客.

跟我在 Twitter 上 http://www.twitter.com/pagalvin

實施全球彈出式通知系統

我寫了一篇文章 www.sharepoint.briefing.com 題為"實施全球彈出式通知系統.”  此函數是社區學院等通信學校倒閉因雪而實施的。 

它使用一個自訂清單, 開箱即用 SharePoint 的 web 服務和一些 jQuery 來做這項工作.

這裡是個難題:

image

閱讀整件事情在這裡: http://www.sharepointbriefing.com/features/article.php/3918471/Implement-a-Global-Pop-up-Notification-System.htm

</結束>

訂閱我的博客.

跟我在 Twitter 上 http://www.twitter.com/pagalvin

掌控您確定和取消按鈕

我寫道: 這篇文章 一段時間了, 但是看起來沒有連結到它從我的博客在時間, 所以這裡走:

image

本文介紹如何強制 newform.aspx 重定向到一個頁面,當使用者按一下確定,另一頁,她按一下取消時.

</結束>

訂閱我的博客.

跟我在 Twitter 上 http://www.twitter.com/pagalvin