【问题标题】:Copy word document between document libraries in different subsites (SharePoint)在不同子网站的文档库之间复制 Word 文档 (SharePoint)
【发布时间】:2014-03-26 16:38:48
【问题描述】:

什么是最好的(主观的..我知道。对不起!)方法来提示用户将我的库中的文档实例复制到他自己网站的库中(在同一个网站集上,如果重要的话) ?我是一名管理员,拥有一些我创建得太频繁而无法为其设置特定内容类型的 Word 文档。所以我创建了一个库,其中包含一些单词模板供他们复制(最重要的是:除了修改/创建的字段之外,还包括元数据)。

我已经尝试了一些 javascript/jquery 方法,我将这些方法放在显示表单上,并带有一个文本框,允许他们输入他们的库 url 以及他们想要制作多少份副本,但这似乎没有随心所欲地工作。实现这一目标的最有效方法是什么?使用事件处理程序?如果是这样,有没有办法将其中一个与功能区上的自定义按钮相关联(我只将这些按钮与 js 功能相关联)?

我尝试使用的 javascript 函数示例:

function copyItem() {
    var itemurl = $("#copyFrom").val();
    var dst = $("#copyTo").val();

    $().SPServices({
        operation: "GetItem",
        Url: itemurl,
        async: false,
        completefunc: function (xData, Status) {
            itemstream = $(xData.responseXML).find("Stream").text();
            itemfields = "";
            $(xData.responseXML).find("FieldInformation").each(function(){
                itemfields+=$(this).get(0).xml;
            });;

        }
    });

    $().SPServices({
        operation: "CopyIntoItems",
        SourceUrl: itemurl,
        async: false,
        DestinationUrls: [dst],
        Stream: itemstream,
        Fields:itemfields,
        completefunc: function (xData, Status) {
            var error = $(xData.responseXML).find("CopyResult").first().attr("ErrorCode");
        }
    }
}

调用者:

  <label>from:</label><input type="text" value="" id="copyFrom" maxlength="255">
    <label>to:</label><input type="text" value="" id="copyTo" maxlength="255">
    <input type="button" onclick="copyItem();" value="Copy">

注意:我现在没有在这些文本框中输入任何值,因为我是手动将它们输入到 itemurl 和 dst 中。 但是控制台说:

属性“copyItem”的值为 null 或未定义,不是 Function 对象。

【问题讨论】:

    标签: javascript jquery sharepoint sharepoint-2010 wsp


    【解决方案1】:

    不建议使用“async:false”。最好进行异步调用并将第二个SPServices 插入第一个。

    您的第二个 SPServices 也缺少右括号。

    最后,“字段”必须是一个数组 (http://msdn.microsoft.com/en-us/library/copy.copy.copyintoitems.aspx)。

    我尝试了以下代码,它对我有用:

    var srcurl="http://my.sharepoint.com/aymeric_lab/Shared%20Documents/879258.jpeg";
    var desturl="http://my.sharepoint.com/aymeric_lab/Shared%20Documents/879258_copy.jpeg";
    $().SPServices({
      operation: "GetItem",
      Url: srcurl,
      completefunc: function (xData, Status) {
        var itemstream = $(xData.responseXML).find("Stream").text();
        var itemfields = [];
        $(xData.responseXML).find("FieldInformation").each(function(){
          itemfields.push($(this).get(0).xml);
        });
    
        $().SPServices({
          operation: "CopyIntoItems",
          SourceUrl: srcurl,
          DestinationUrls: [ desturl ],
          Stream: itemstream,
          Fields:itemfields,
          completefunc: function (xData, Status) {
    
          }
        })
      }
    });
    

    【讨论】:

    • 嗨-感谢您的澄清并找到缺少的括号。将其替换为函数后,无论我指定的文件类型如何,控制台仍然显示“copyItem”为空或未定义。如果有帮助,我已经编辑了我的原始问题以包含我用来调用它的按钮。
    • 您没有正确阅读我的答案。主要问题在于 Stream:它必须是一个数组。再看看我的答案和代码:-)
    • 抱歉,不是“Stream”而是“Fields”!
    • 我明白这一点,但我仍然没有看到问题所在,因为我说我明确使用了你的示例并收到了同样的问题。我不明白它是如何为您工作的,我一直盯着 CopyIntoItems 操作方法(原始 c# 方法)看是否可以找到我缺少的步骤,但我没有看到它..是在您的示例之外我应该声明一些不同的东西(除了文档 URL)?
    • 这样做之后,我意识到问题出在“xData.responseXML” - 流和字段仍然是空白值,因为它们没有从 responseXML 获取任何信息。尝试编写 console.log(xData.responseXML); 时,我收到一条错误消息,提示“无法获取未定义或空引用的属性 'xml',所以我不确定这里发生了什么。状态成功并且 responseText 似乎正确显示所有内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 2012-07-15
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    相关资源
    最近更新 更多