2012-08-16 7 views
5

Ich habe eine Dokumentbibliothek im Sharepoint, die ein Word-Dokument speichert.Erstelle Bearbeitungslink zum Dokument im Sharepoint

Wenn ich auf den Link zum Dokument klicke, erhalte ich ein Dialogfeld mit "Sie möchten diese Datei in readonly oder editmode etc öffnen" und kann sie im Bearbeitungsmodus öffnen, ändern, direkt in Word speichern Änderungen werden in der Dokumentbibliothek gespeichert.

Der Link zur Datei in der Dokumentbibliothek wie folgt aussieht:

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

Wie kann ich diesen Link in meinem eigenen Web-Teil schaffen, in dem ich den Namen der Datei und Dokumentbibliothek habe? Ohne den obigen Code zu kopieren, wäre das keine gute Idee ...

Gibt es eine "offizielle" Methode, um das zu erreichen?

+0

Wer diese nach unten gestimmt? Warum? – Marc

Antwort

10

Leider scheint es nicht so, als gäbe es eine bessere Option. Aber zumindest können Sie herausfinden, was die Funktionsdefinition ist. Die Funktion DispEx ist in der Datei core.js definiert (sie ist jedoch einfacher in core.debug.js zu lesen). Beide befinden sich im Verzeichnis 14 \ Templates \ Layouts \ 1033. Hier

ist die Funktionsdefinition:

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

Hier ist meine Vermutung auf, was sie bedeuten. Bitte zögern Sie Kommentare hinzufügen keine Fehler oder Auslassungen zu korrigieren:

  • ele - [obj] das Element
  • ObjEvent - [obj] das Ereignisobjekt
  • fTransformServiceOn - [bool] (unbekannt Funktionalität) defaults True
  • fShouldTransformExtension - [bool] (unbekannt Funktionalität) standardmäßig auf false
  • fTransformHandleUrl - [bool] (unbekannt Funktionalität) standardmäßig auf false
  • strHtmlTrProgId - [string] Name des ActiveX Steuerelement, um zu versuchen, Standardeinstellungen in SharePoint.OpenDocuments zu laden.3
  • iDefaultItemOpen - [int] Indikator für Standardstandardmäßig 1
  • strProgId zu bearbeiten oder Lesen - [string] Name des ActiveX Control
  • strHtmlType [string] (unbekannt Funktionalität) standardmäßig leer
  • strServerFileRedirect - [string] (unbekannt Funktionalität)
  • strCheckoutUser [string] die ID des Benutzers, der das Dokument
  • strCurrentUser ausgecheckt hat - [string] die ID des aktuellen Benutzers
  • strRequireCheckout - [string] indic ator ob eine Kasse
  • strCheckedoutTolocal zu zwingen - [string] Indikator dafür, ob der lokale Ordner Entwürfe
  • strPermmask verwenden - [string] Berechtigungen sind

Es 0x7fffffffffffffff für die aktuellen Benutzereinstellungen Maske eindeutig einige Inkonsistenzen in Bezug auf die Verwendung von Strings und Ganzzahlen zur Darstellung boolescher Werte. Es ist auch merkwürdig, dass der Code 17 Parameter hat, aber ich kann nur eine Funktionsdefinition mit 15 Parametern finden, so dass ich bin mir nicht sicher, was die letzten zwei leeren Saiten sind für. Einiges davon ist die Natur von JavaScript, aber es sieht von Microsoft auch schlampig aus.

sich die Frage nicht wirklich beantworten, hoffentlich hilft es Ihnen, oder jemand anderes.

+0

+1 und vielen Dank, habe ich Ihre Antwort als angenommen, da dies besser als meine ist. Solange niemand mit der * echten * Antwort kommt;) – Marc

+0

danke für die Erklärung der Funktionsargumente –

0

Ich erinnere mich nicht, ob es eine offizielle Möglichkeit gibt, es mit JavaScript COM zu tun, aber Sie können das ASP.NET HyperLink-Steuerelement verwenden, um den ähnlichen Link zu generieren. Denn im Layout setzte Instanz

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

und in Code-behind etwas wie

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

nur die gleichen Werte von OOTB Link verwenden, aber

/test/DocLib2/Wordtest ändern. docx

zu URL Ihres Dokuments.

+0

Vielen Dank für Ihre Antwort, aber ich weiß, wie Sie ein HyperLink-Steuerelement verwenden und einige Attribute hinzufügen. Aber darum ging es nicht, weil ich ** das schreckliche 'return DispEx (dieses Ereignis, 'TRUE', 'FALSE', 'FALSE', 'SharePoint.OpenDocuments.3', '1', 'SharePoint.OpenDocuments', '', '', '', '1', '0', '0', '0x7fffffffffffffff', '', '') 'Code, da ich keine Ahnung habe, welcher Parameter tut was und es wäre besser, wenn eine SP-Methode es erzeugt. – Marc

1

ich am Ende mit diesem Code hinzufügen

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

meinen Link-Tag, weil ich nicht in der Lage war, eine bessere Lösung zu finden.

Wenn es welche gibt, lass es mich wissen.

+0

Bitte stimmen Sie meine Antwort ab, zumindest weil Sie das Gleiche getan haben, wie ich es vorgeschlagen habe. –

1

Chad Schroeder eine Blog-Post auf, wie der JavaScript-Funktionsaufruf in C# zu konstruieren. Berücksichtigen Sie einige Einstellungen, z. B. force checkout und öffnen Sie sie zum Beispiel im Browser oder Client.

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

Dispex funktioniert nicht in Chrome, wenn der Link in einem div ist, die den Dokumenttyp in einer App namens Attribut enthält:

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

Entweder Sie müssen es umwickeln so ein div, und sicher sein, die richtige Anwendung einzufügen, der die Datei geöffnet oder eine eigene Liste machen, indem der Dateierweiterung suchen:

$('.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'); 
    } 
}); 
Verwandte Themen