2012-08-16 6 views
5

私は、文書ファイルを保存する共有ポイントの文書ライブラリを持っています。共有ポイントの文書への編集リンクを作成します。

文書へのリンクをクリックすると、「このファイルを読み取り専用またはeditmodeなどで開く」というダイアログボックスが表示され、編集モードで開くことができます。変更はドキュメントライブラリに保存されます。

ドキュメントライブラリ内のファイルへのリンクは次のようになります。

<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> 

どのように私は、ファイルの名前とドキュメントライブラリを持って自分のWebパーツには、このリンクを作成するのですか?上記のコードをコピーするだけでは、それは良い考えではありません...

これを達成するためのいくつかの "公式の"方法はありますか?

+0

誰がこれを投票しましたか?どうして? – Marc

答えて

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 - [ブール](未知の機能)デフォルト設定
  • にfShouldTransformExtension - [ブール](未知の機能)デフォルトはFalseへ
  • fTransformHandleUrl - [ブール](未知の機能)デフォルトはFalse
  • strHtmlTrProgId - のActiveXの[文字列]名前SharePoint.OpenDocumentsに既​​定値をロードしようとするコントロール。3
  • iDefaultItemOpen - [INT] 1
  • strProgIdにデフォルトを編集または読むためのデフォルトの表示 - [文字列]
  • strServerFileRedirectを空にするためのActiveXコントロール
  • strHtmlType [文字列](未知の機能)の名前がデフォルト - [文字列](未知の機能)
  • strCheckoutUser [文字列] strCurrentUser文書
  • をチェックアウトしたユーザーのID - [文字列]現在のユーザー
  • strRequireCheckoutのID - [文字列]インド語
  • ローカル下書きフォルダを使用するかどうかの[文字列]インジケーターstrPermmask - -
  • strCheckedoutTolocalをチェックアウトを強制するかどうかはATOR [文字列]の権限がいくつかは明らかに存在している0x7fffffffffffffff

に、現在のユーザーのデフォルトのマスクブール値を表現するために文字列と整数を使用する点で不一致です。あなたのコードに17個のパラメータがあるのも奇妙ですが、15個のパラメータでしか関数定義を見つけることができないので、最後の2つの空文字列が何であるか分かりません。その中にはJavaScriptの性質もありますが、Microsoftの面では見た目も似ていません。

これは本当に質問には答えません。うまくいけば、あなたや他の人に役立つはずです。

+0

+1とありがとう、私はこれが私より優れているので、私はあなたの答えを受け入れるように設定しました。 *実際の答えが誰も出てこない限り) – Marc

+0

関数の引数の説明に感謝します –

0

JavaScript COMで公式に機能するかどうかは覚えていませんが、ASP.NET HyperLinkコントロールを使用して同様のリンクを生成できます。例えば、レイアウトに

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

とコードビハインド何か

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

のようなだけでOOTBリンクから同じ値を使用しますが、

/テスト/ DocLib2/wordtestを変更中に入れました。 docx

お客様のドキュメントのURLです。

+0

あなたの答えをありがとうが、私はHyperLinkコントロールを使用し、いくつかの属性を追加する方法を知っています。しかし、それは私が**恐ろしい 'return DispEx(this、event、 'TRUE'、 'FALSE'、 'FALSE'、 'SharePoint.OpenDocuments.3'、 '1'、 'SharePoint.OpenDocuments'、 ''、 ''、 '1'、 '0'、 '0'、 '0x7fffffffffffffff'、 ''、 '') 'コードいくつかのSPメソッドがそれを生成すれば何が良いでしょう。 – Marc

1

私はよりよい解決策を見つけることができませんでしたので、私のリンクタグにこのコード

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

を追加することで終わります。

ある場合はお知らせください。

+0

あなたが私が提案したのと同じことをしたから少なくとも私の答えを投票してください。 –

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
リンクはアプリと呼ばれる属性内の文書タイプが含まれ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'); 
    } 
}); 
関連する問題