Вопрос

, Мне нужно что-то создать (используя изолированное решение?) продемонстрировать, что SharePoint предоставляет пользователям возможность копировать документ (с его атрибутами) из библиотеки doc на одном сайте в библиотеку doc на другом сайте (в том же семействе сайтов, если это важно) без использования внешнего приложения.Это будет сделано для того, чтобы пользователи с нескольких сайтов могли перейти в мою библиотеку, выбрать шаблон Word, а затем скопировать любое их количество в свою собственную библиотеку.

Я понимаю, что это может усложниться с полями выбора пользователей и поиска, но даже самая базовая функциональность сейчас уместна.Изначально мы думали, что есть функция OOTB, которая, возможно, сможет это сделать, но, похоже, это не сильно поможет, поэтому на данный момент я готов изучить что угодно.

Я просто ищу рекомендацию о наилучшем способе сделать это, прежде чем, возможно, переосмыслить решение.

Редактировать:Explorer и Designer были исключены из списка опций для наших конечных пользователей.Самый близкий пример того, что я ищу, - это опция "Отправить в другое место", которая позволяет вам копировать файлы с их метаданными в другую библиотеку.Но я бы хотел, чтобы пользователи могли делать это массово (например, делать 20 копий определенного шаблона в одном экземпляре).Могу ли я вообще модифицировать этот инструмент или мне нужно будет создать свой собственный?Спасибо!

Это было полезно?

Решение


Я нет, в своем посте вы сказали "без внешнего приложения" но включает ли это библиотеки js?
Ниже приведено простое решение, которое позволит скопировать документ из одной библиотеки SP в любую другую библиотеку SP.Я не проверял его возможности межсайтового скриптинга, но теоретически он должен работать на фермах, доменах и разных версиях SP.(Это на 100% работает на всех веб-сайтах одного семейства сайтов)
Просто скопируйте этот код в HTML-файл, замените путь /к/jquery* на путь к вашим файлам jquery и spservices и добавьте веб-часть редактора контента на любую страницу, на которой вы хотите разместить интерфейс, и установите ссылку на его содержимое в месте расположения созданного вами html-файла.

Поскольку вы хотите разрешить отправку нескольким адресатам, я рекомендую вместо этого использовать текстовое поле для целевых URL (ов), а затем анализировать их по строкам, т.е.: $("textarea").val().split("\n").each(myfunc);

Вы также могли бы расширить это, чтобы использовать выбранный в данный момент документируйте в качестве источника или даже используйте выпадающий список элементов с токены URL- адресов чтобы отправить параметр строки запроса на другую страницу, значения которого (ов) предоставили бы вам информацию, необходимую для восстановления информации исходного документа.

Примечание: В этом примере используется Jquery и Дополнительные услуги
Ссылки: Использование JS в CEWP

<label>Copy From:</label><input type="text" value="" id="copyFrom" maxlength="255">
<label>Copy To:</label><input type="text" value="" id="copyTo" maxlength="255">
<input type="button" onclick="copyItem();" value="Copy">
<script type="text/javascript" src="/path/to/jquery.ver"></script>
<script type="text/javascript" src="/path/to/jquery.SPServices.ver"></script>
<script type="text/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();
                       console.log(itemstream);
                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");
                       console.log(error);
            }
        });
    }
    //to run in console uncomment line below
    //copyItem();
</script>

Обновить

Вместо того чтобы анализировать URL-адреса назначения по одному, вы можете фактически сохранить их в массиве и передать его DestinationUrls параметр, который принимает массив целевых URL-адресов.

Кроме того, я успешно протестировал эту функцию в консоли на странице, содержащей spservices и библиотеку jquery, используя жестко закодированные абсолютные URL-адреса для dst и itemurl переменные.

ОБНОВЛЕНИЕ 2

Я забыл упомянуть, что у меня возникли проблемы с копированием полей.В итоге я извлек поля исходного списка и удалил все поля, доступные только для чтения, используя приведенную ниже функцию.
Я забыл упомянуть об этом, потому что моя конкретная реализация дает мне легкий доступ к исходному listguid через строку запроса.Если вам нужно найти свой, ознакомьтесь с $().SPServices.SPListNameFromUrl функция, с которой я имел переменный успех.

var fieldstocopy = '';
    var itemfieldsxml = $.parseXML(itemfields);
    $().SPServices({
      operation: "GetList",
      listName: ListGUID,
      async: false,
      completefunc: function(xData, Status) {
        $(xData.responseXML).find("Fields > Field").not("[ReadOnly='TRUE']").each(function() {
          var $node = $(this);
          fieldstocopy+=$(itemfieldsxml).find("FieldInformation[InternalName='"+$node.attr("Name")+"']").first().get(0).xml;
        });
      }
    });

Другие советы

Я могу придумать 2 очень простых варианта:

1) Пользователи могут скопировать элементы со списками / библиотеками, открытыми в Windows Explorer

2) Пользователи могут копировать документы с «контентом и структурой»:

http://yoursite/_Layouts/sitemanager.aspx?Source={WebUrl}_layouts/settings.aspx
.

Опция Не будет принести все метаданные документа на новое место (например, созданные, модифицированные и т. Д.).

Я не могу что-то упустить, но почему бы не только настроить оригинальные документы в качестве типов содержимого сайта?Установив их в качестве типа содержимого, вы можете включить поля метаданных и назначить шаблон по умолчанию (ваш исходный документ) к типу.Как только тип содержимого установлен, вы можете включить его в документ «Документ пользователей», поэтому не должно быть никакой копирования взад и вперед.

Кроме того, если вы не можете изменить оригинальный документ, вы можете просто обновить тип содержимого, и шаблон будет изменяться для везде, который он был включен, вместо того, чтобы вы должны переоценить документ в каждый отдельный пункт назначения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top