Frage

, Ich muss etwas bauen (mit einer Sandbox-Lösung?), um zu demonstrieren, dass SharePoint Benutzern die Möglichkeit bietet, ein Dokument (mit seinen Attributen) aus einer Dokumentbibliothek auf einer Website in eine Dokumentbibliothek auf einer anderen Website (ggf. dieselbe Websitesammlung) ohne externe Anwendung zu kopieren.Auf diese Weise können Benutzer auf mehreren Websites zu Meine Bibliothek wechseln, eine Word-Vorlage auswählen und dann eine beliebige Anzahl davon in ihre eigene Bibliothek kopieren.

Ich verstehe, dass dies mit Personenauswahl- und Suchfeldern kompliziert werden kann, aber selbst die grundlegendsten Funktionen sind jetzt angemessen.Wir dachten ursprünglich, dass es eine OOTB-Funktion gibt, die das möglicherweise kann, aber das scheint nicht viel zu helfen, also bin ich bereit, an dieser Stelle etwas zu lernen.

Ich suche nur nach einer Empfehlung für den besten Weg, dies zu tun, bevor ich möglicherweise die Lösung überdenke.

bearbeiten:Explorer und Designer wurden als Optionen für unsere Endbenutzer ausgeschlossen.Das nächstgelegene Beispiel für das, wonach ich suche, ist die Option "An einen anderen Speicherort senden", mit der Sie Dateien mit ihren Metadaten in eine andere Bibliothek kopieren können.Ich möchte jedoch, dass Benutzer dies in großen Mengen tun können (z. B. 20 Kopien einer bestimmten Vorlage in einer Instanz erstellen).Kann ich dieses Tool überhaupt ändern oder müsste ich mein eigenes erstellen?Danke!

War es hilfreich?

Lösung


Ich nein in deinem Beitrag hast du gesagt "ohne externe Anwendung" aber schließt das js-Bibliotheken ein?
Unten finden Sie eine einfache Lösung, mit der ein Dokument von einer SP-Bibliothek in eine andere SP-Bibliothek kopiert wird.Ich habe die Site-übergreifenden Skriptfunktionen nicht überprüft, aber sie sollten theoretisch Farmen-, Domänen- und verschiedene SP-Versionen übergreifend funktionieren.(Es funktioniert zu 100% über Websites in derselben Websitesammlung hinweg.)
Kopieren Sie diesen Code einfach in eine .html-Datei, Ersetzen Sie den Pfad / zu / jquery * durch den Pfad zu Ihren jQuery- und SPServices-Dateien und fügen Sie der Seite, auf der Sie die Benutzeroberfläche hosten möchten, ein Inhaltseditor-Webpart hinzu und setzen Sie den Inhaltslink auf den Speicherort der .html-Datei, die Sie erstellt haben.

Da Sie das Senden an mehrere Ziele zulassen möchten, empfehle ich, stattdessen einen Textbereich für die Ziel-URL (s) zu verwenden und diese dann zeilenweise zu analysieren, dh: $("textarea").val().split("\n").each(myfunc);

Sie könnten dies auch erweitern, um das zu nutzen aktuell ausgewählt dokument als Quelle oder verwenden Sie sogar ein Listenelement-Dropdown mit url-Token um einen Abfragezeichenfolgenparameter an eine andere Seite zu senden, deren Wert (e) Ihnen die Informationen geben würde, die zum Abrufen der Quelldokumentinformationen erforderlich sind.

Beachten: Dieses Beispiel verwendet Jquery und SPServices
Verweis: Verwenden von JS in 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>

UPDATE

Anstatt die Ziel-URLs einzeln zu analysieren, können Sie sie tatsächlich in einem Array speichern und an das übergeben DestinationUrls parameter, der ein Array von Ziel-URLs akzeptiert.

Außerdem habe ich diese Funktion erfolgreich in der Konsole auf einer Seite getestet, die die Spservices- und jQuery-Bibliothek mit fest codierten absoluten URLs für die enthält dst und itemurl variabel.

AKTUALISIERUNG 2

Ich habe vergessen zu erwähnen, dass ich Probleme beim Kopieren der Felder hatte.Am Ende habe ich die Quelllistenfelder abgerufen und alle schreibgeschützten Felder mit der folgenden Funktion entfernt.
Ich habe es versäumt, dies zu erwähnen, da meine spezielle Implementierung mir über einen Querystring einen einfachen Zugriff auf die Quell-Listguid ermöglicht.Wenn Sie Ihre finden müssen, schauen Sie sich die an $().SPServices.SPListNameFromUrl funktion, mit der ich gemischten Erfolg hatte.

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

Andere Tipps

Ich kann an 2 sehr einfache Optionen denken:

1) Benutzer können Elemente mit Listen / Bibliotheken kopieren, die in Windows Explorer geöffnet wurden

2) Benutzer können Dokumente mit "Inhalt und Struktur" kopieren: generasacodicetagpre.

Option Einer bringt nicht alle Metadaten des Dokuments auf den neuen Standort (z. B. erstellt, modifiziert usw.).

Ich fehlt möglicherweise etwas, aber gründet jedoch nicht einfach die Originaldokumente als Site-Inhaltstypen?Wenn Sie sie als Inhaltstyp einstellen, können Sie die Metadatenfelder aufnehmen und eine Standardvorlage (Ihr Originaldokument) dem Typ zuweisen.Sobald der Inhaltstyp eingerichtet wurde, können Sie es in die Dokumentbibliothek des Benutzers aufnehmen, sodass keine Kopierungen vorhanden sind.

Wenn Sie auch das Originaldokument ändern, können Sie einfach den Inhaltstyp aktualisieren, und die Vorlage ändert sich nicht überall, wo er aufgenommen wurde, anstatt Sie das Dokument erneut auf jedes separate Ziel neu kopieren müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top