2012-08-16 86 views
5

我有一個文件庫在sharepoint存儲一個word文檔。創建編輯鏈接到sharepoint文件

如果我點擊鏈接到文檔,我會得到一個對話框,「你想以只讀或編輯模式等方式打開這個文件」,並可以在編輯模式下打開它,改變它,直接將它保存在word中更改保存在文檔庫中。

鏈接到文檔庫中的文件看起來像這樣:

<a onfocus="OnLink(this)" 
    href="/test/DocLib2/wordtest.docx" 
    onmousedown="return VerifyHref(this,event,'1','SharePoint.OpenDocuments','')"  
    onclick="return DispEx(this,event,'TRUE','FALSE','FALSE', 
      'SharePoint.OpenDocuments.3','1', 'SharePoint.OpenDocuments', 
      '','','','1','0','0','0x7fffffffffffffff','','')" 
>wordtest</a> 

如何創建我自己的網絡的一部分這個環節在那裏我有文件和文檔庫的名字嗎?沒有隻是複製上面的代碼,這不會是一個好主意......

是否有一些「官方」的方法來實現這一目標?

+0

誰投了票?爲什麼? – Marc 2012-11-30 13:43:30

回答

10

不幸的是,似乎沒有更好的選擇。但至少你可以弄清楚函數定義是什麼。 DispEx函數在core.js文件中定義(但在core.debug.js中更容易閱讀)。兩者都在14 \ Templates \ Layouts \ 1033目錄中。

下面是函數的定義:

function DispEx(ele, objEvent, fTransformServiceOn, fShouldTransformExtension, 
    fTransformHandleUrl, strHtmlTrProgId, iDefaultItemOpen, strProgId, strHtmlType, 
    strServerFileRedirect, strCheckoutUser, strCurrentUser, strRequireCheckout, 
    strCheckedoutTolocal, strPermmask) 

這是我猜他們的意思。請隨意添加註釋糾正任何錯誤或遺漏:

  • ELE - [OBJ]元素
  • objEvent - [OBJ]事件對象
  • fTransformServiceOn - [布爾](未知功能)默認爲True
  • fShouldTransformExtension - [BOOL](未知功能)默認爲False
  • fTransformHandleUrl - [BOOL](未知功能)默認爲False
  • strHtmlTrProgId - [字符串]該ActiveX的名稱控制嘗試將默認值加載到SharePoint.OpenDocuments。3
  • iDefaultItemOpen - [INT]缺省的指示器來編輯或閱讀默認爲1
  • strProgId - [字符串]清空ActiveX控件
  • strHtmlType [字符串](未知功能)默認的名稱
  • strServerFileRedirect - [字符串](未知功能)
  • strCheckoutUser [字符串]誰已簽出該文件
  • strCurrentUser的用戶的ID - [字符串]當前用戶的ID
  • strRequireCheckout - [字符串]印度語ATOR是否強制結賬
  • strCheckedoutTolocal - 是否使用本地草稿文件夾[字符串]指示燈
  • strPermmask - [字符串]權限掩碼爲當前用戶默認爲0x7fffffffffffffff

顯然有一些在使用字符串和整數來表示布爾值方面存在不一致。奇怪的是,你的代碼有17個參數,但我只能找到15個參數的函數定義,所以我不確定最後兩個空字符串是什麼。其中一些就是JavaScript的本質,但微軟方面也看起來很sl sl。

這並沒有真正回答這個問題,希望它可以幫助你或其他人。

+0

+1非常感謝你,我將你的答案設定爲接受,因爲這比我的更好。只要沒有人提出* real *答案;) – Marc 2013-01-14 23:56:03

+0

感謝函數參數說明 – 2017-02-16 07:17:34

0

我不記得是否有官方能力使用JavaScript COM來完成它,但是您可以使用ASP.NET HyperLink控件來生成相似的鏈接。例如把在佈局

<asp:HyperLink ID="EditHl" runat="server" Text="Edit document"/> 

,並在代碼隱藏像

EditHl.Attributes["attribute name"] = "attribute value"; 

只使用從開箱即用的鏈接相同的值,但是改變

/測試/ DocLib2/wordtest。 docx

到您的文檔的URL。

+0

感謝您的回答,但我知道如何使用HyperLink控件並添加一些屬性。但這不是問題所在,因爲我**不想**複製可怕的'返回DispEx(this,event,'TRUE','FALSE','FALSE','SharePoint.OpenDocuments.3', '1','SharePoint.OpenDocuments','','','','1','0','0','0x7fffffffffffffff','','')'代碼,因爲我不知道哪個參數做什麼,如果一些SP方法生成它會更好。 – Marc 2012-08-17 00:41:18

1

我最終添加該代碼

return DispEx(this,event,'TRUE','FALSE','FALSE', 
'SharePoint.OpenDocuments.3','1', 'SharePoint.OpenDocuments','','','', 
'1','0','0','0x7fffffffffffffff','','') 

到我的鏈接標籤,因爲我沒能找到一個更好的解決方案。

如果有任何問題,請告訴我。

+0

請投票我的答案,至少因爲你做了同樣的建議。 – 2012-09-04 08:01:20

1

Chad Schroeder就如何在C#中構建javascript函數調用發表了博客文章。考慮到一些設置,例如強制檢出並在瀏覽器或客戶端中打開。

private string GetFileViewScript(SPFile file) 
    { 
     string text = SPUtility.MapToControl(SPContext.Current.Web, file.Name, string.Empty); 
     string text2 = (file.Item.ParentList.DefaultItemOpen == DefaultItemOpen.Browser) ? "1" : "0"; 
     SPFieldLookupValue sPFieldLookupValue = file.Item["CheckedOutUserId"] as SPFieldLookupValue; 
     string scriptLiteralToEncode = (sPFieldLookupValue == null) ? string.Empty : sPFieldLookupValue.LookupValue; 
     string text3 = (SPContext.Current.Web.CurrentUser != null) ? SPContext.Current.Web.CurrentUser.ID.ToString(CultureInfo.InvariantCulture) : string.Empty; 
     string text4 = file.Item.ParentList.ForceCheckout ? "1" : "0"; 

     return string.Format(CultureInfo.InvariantCulture, "return DispEx(this,event,'{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}')", new object[] 
     { 
      "TRUE", 
      "FALSE", 
      "FALSE", 
      text, 
      text2, 
      text, 
      string.Empty, 
      string.Empty, 
      SPHttpUtility.EcmaScriptStringLiteralEncode(scriptLiteralToEncode), 
      text3, 
      text4, 
      (string)file.Item["IsCheckedoutToLocal"], 
      (string)file.Item["PermMask"] 
     }); 
    } 

Using DispEx in a link to a SharePoint document

0

除非鏈接是一個包含一個屬性的文檔類型名爲app一個div內的Dispex不會在Chrome中工作:

<div class="ms-vb itx" ctxname="ctx19" id="2" app="ms-word"> 
    <a onfocus="OnLink(this)" 
     href="/test/DocLib2/wordtest.docx" 
     onmousedown="return VerifyHref(this,event,'1','SharePoint.OpenDocuments','')"  
     onclick="return DispEx(this,event,'TRUE','FALSE','FALSE', 
      'SharePoint.OpenDocuments.3','1', 'SharePoint.OpenDocuments', 
      '','','','1','0','0','0x7fffffffffffffff','','')">wordtest</a> 
    <span class="ms-newdocument-iconouter"> 
     <img class="ms-newdocument-icon" src="/_layouts/15/images/spcommon.png?rev=23" alt="new" title="new"> 
    </span>   
</div> 

無論你需要用它這樣的div,並確保插入正確的應用程序,將打開該文件,或通過查看文件擴展名創建自己的列表:

$('.test_links').click(function(e) { 
    e.preventDefault(); 
    if (!!window.chrome) { 
     var extenstion = this.href.substr(this.href.lastIndexOf('.') + 1); 
     var prefix = ''; 
     switch (extenstion) { 
      case 'doc': 
      case 'docx': 
       prefix = 'ms-word:ofv|u|'; 
       break; 
      case 'xls': 
      case 'xlsx': 
       prefix = 'ms-excel:ofv|u|'; 
       break; 
     } 
     window.location.href = prefix + this.href; 
    } else { 
     DispEx(this, e, 'TRUE', 'FALSE', 'FALSE', 'SharePoint.OpenDocuments.3', '0', 'SharePoint.OpenDocuments', '', '', '', _spPageContextInfo.userId + '', '0', '0', '0x7fffffffffffffff'); 
    } 
}); 
相關問題