Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在sharepoint中创建指向文档的编辑链接_C#_Sharepoint_Sharepoint 2010 - Fatal编程技术网

C# 在sharepoint中创建指向文档的编辑链接

C# 在sharepoint中创建指向文档的编辑链接,c#,sharepoint,sharepoint-2010,C#,Sharepoint,Sharepoint 2010,我在sharepoint中有一个文档库,用于存储word文档 如果单击指向文档的链接,我会看到一个对话框,“您想以只读或编辑模式打开此文件”,可以在编辑模式下打开、更改、直接保存在word中,更改将保存在文档库中 指向文档库中文件的链接如下所示: <a onfocus="OnLink(this)" href="/test/DocLib2/wordtest.docx" onmousedown="return VerifyHref(this,event,'1','SharePo

我在sharepoint中有一个文档库,用于存储word文档

如果单击指向文档的链接,我会看到一个对话框,“您想以只读或编辑模式打开此文件”,可以在编辑模式下打开、更改、直接保存在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>

如何在我自己的web部件中创建此链接,其中我有文件和文档库的名称?如果不复制上面的代码,那将不是一个好主意


有什么“官方”方法可以实现这一点吗?

我不记得是否有官方的JavaScript COM功能,但您可以使用ASP.NET超链接控件生成类似的链接。比如说在布局上

<asp:HyperLink ID="EditHl" runat="server" Text="Edit document"/>
只需使用OOTB链接中的相同值,但更改

/test/DocLib2/wordtest.docx


添加到文档的URL。

我最后添加了此代码

return DispEx(this,event,'TRUE','FALSE','FALSE', 
'SharePoint.OpenDocuments.3','1', 'SharePoint.OpenDocuments','','','',
'1','0','0','0x7fffffffffffffff','','')
我的链接标签,因为我无法找到更好的解决方案


如果有,请告诉我。

不幸的是,似乎没有更好的选择。但至少你可以搞清楚函数定义是什么。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]事件对象
  • FTTransferMServiceOn-[bool](未知功能)默认为True
  • fShouldTransformExtension-[bool](未知功能)默认为False
  • ftTransfermHandleUrl-[bool](未知功能)默认为False
  • strHtmlTrProgId-[string]尝试将默认值加载到SharePoint.OpenDocuments的ActiveXControl的名称。3
  • iDefaultItemOpen-[int]编辑或读取默认值的默认指示器默认值为1
  • strProgId-[string]ActiveX控件的名称
  • strHtmlType[string](未知功能)默认为空
  • strServerFileRedirect-[string](功能未知)
  • strCheckoutUser[string]签出文档的用户的ID
  • strCurrentUser-[string]当前用户的ID
  • strRequireCheckout-[string]指示是否强制签出
  • strCheckedoutTolocal-[string]指示是否使用本地草稿文件夹
  • strPermmask-[string]当前用户的权限掩码默认为0x7FFFFFFFFFFFFFFFFF
在使用字符串和整数表示布尔值方面,显然存在一些不一致之处。同样奇怪的是,您的代码有17个参数,但我只能找到一个有15个参数的函数定义,所以我不确定最后两个空字符串的用途。其中一些是JavaScript的本质,但它也只是在微软方面显得马虎


这并没有真正回答这个问题,希望它能帮助你或其他人。

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"]
        });
    }

除非链接位于包含名为app:

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

谢谢你的回答,但我知道如何使用超链接控件和添加一些属性。但这并不是问题所在,因为我不想复制可怕的
return DispEx(这个事件,'TRUE','FALSE','FALSE','SharePoint.OpenDocuments.3','1','SharePoint.OpenDocuments',','','','','','1','0','0','0x7fffffffffffffff','','')
编码,因为我不知道哪个参数起什么作用,如果某个SP方法生成它会更好。请投票表决我的答案,至少因为你做了与我建议相同的事。+1非常感谢,我将你的答案设置为接受,因为这比我的答案好。只要没有人能给出真正的答案;)
<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>
$('.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');
    }
});