Domanda

, ho bisogno di costruire qualcosa (usando una soluzione di sandboxed?) Per dimostrare che SharePoint ha la capacità di utenti di copiare un documento (con i suoi attributi) da una biblioteca doc in un sito a una biblioteca DOC in un altro sito (lo stesso Raccolta del sito, se importa) senza un'applicazione esterna. Questo sarà in modo che gli utenti su più siti possano andare nella mia biblioteca, scegliere un modello di Word e quindi copiare qualsiasi numero di quelli nella propria libreria.

Capisco che questo potrebbe essere complicato con i campi di selezionatrice e ricerca delle persone, ma anche la più elementare della funzionalità è appropriata ora. Originariamente abbiamo pensato che ci fosse una caratteristica OOTB che potrebbe essere in grado di farlo, ma non sembra essere di grande aiuto, quindi sono disposto a imparare qualcosa a questo punto.

Sto solo cercando una raccomandazione del modo migliore per farlo fare prima di farlo in modo pratico della soluzione.

Modifica: Explorer e Designer sono stati esclusi come opzioni per i nostri utenti finali. L'esempio più vicino di quello che sto cercando è l'opzione "Invia all'altra posizione" che ti consente di copiare i file con i loro metadati su un'altra libreria. Ma vorrei che gli utenti siano in grado di farlo in massa (ad esempio, effettuare 20 copie di un certo modello in un'istanza). Posso modificare questo strumento o dovrei aver bisogno di crearne il mio? Grazie!

È stato utile?

Soluzione


I no nel tuo post hai detto "senza un'applicazione esterna" ma include le librerie JS?
Di seguito è riportata una soluzione semplice che copierà un documento da una libreria SP a qualsiasi altra libreria SP. Non ho verificato le sue capacità di scripting cross-site, ma in teoria dovrebbe lavorare in fattorie, domini e diverse versioni SP. (It 100% funziona su reti nella stessa collezione del sito)
Semplicemente Copia questo codice in un file .html, sostituire il percorso / / jQuery * con il percorso dei file JQuery and SpServices e aggiungi una parte web editor di contenuti a quale pagina mai si desidera ospitare l'interfaccia e impostare Il suo collegamento di contenuti alla posizione del file .html che hai creato.

Dato che si desidera consentire l'invio a più destinazioni I raccomandare usando una textarea invece per gli URL di destinazione e poi analizzali per linea IE: $("textarea").val().split("\n").each(myfunc);

Potresti anche estendere questo per utilizzare il attualmente selezionato Documento come sorgente o addirittura Utilizzare un elemento di elenco a discesa con Gettoni URL per inviare una stringa di query Paramater a un'altra pagina il cui valore / i ti darebbe le informazioni necessarie per recuperare le informazioni del documento di origine.

Nota: Questo esempio utilizza jQuery e sprserbes
Riferimenti: usando 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>
.

Aggiornamento

Invece di analizzare l'URL di destinazione in un momento in cui puoi effettivamente archiviarli in un array e passarlo al parametro DestinationUrls che accetta una serie di URL di destinazione.

Inoltre, ho testato questa funzione con successo in console su una pagina contenente SPServices e JQuery Library utilizzando URL assoluti hardcoded per le variabili dst e itemurl.

Aggiorna 2

Ho dimenticato di dire che avevo problemi a copiare i campi. Quello che ho finito per fare stava recuperando i campi Elenco sorgente e rimuovendo quelli di sola lettura utilizzando la funzione di seguito.
Ho trascurato di menzionare questo perché la mia particolare implementazione mi dà un facile accesso alla fonte ListisGuid tramite una querystring. Se hai bisogno di trovare il tuo check out $().SPServices.SPListNameFromUrl funzione che ho avuto il successo misto con.

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

Altri suggerimenti

Posso pensare a 2 opzioni molto semplici:

1) Gli utenti possono copiare elementi con elenchi / librerie aperte in Esplora risorse

2) Gli utenti possono copiare documenti con "Contenuto e struttura":

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

Opzione Uno non porterà tutti i metadati del documento alla nuova posizione (ad esempio creati, modificati, ecc.).

Potrei mancare qualcosa, ma perché non solo configurare i documenti originali come tipo di contenuto del sito?Impostandoli come tipo di contenuto, è possibile includere i campi Metadati e assegnare un modello predefinito (il documento originale) al tipo.Una volta impostato il tipo di contenuto, è possibile includerlo nella libreria dei documenti degli utenti, quindi non è necessario copiare avanti e indietro.

Inoltre, se ti capita di modificare il documento originale, è possibile semplicemente aggiornare il tipo di contenuto e il modello cambierà per ovunque è stato incluso, invece di dover ri-copiare il documento in ogni destinazione separata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top