Question

J'ai besoin de construire quelque chose (à l'aide d'une solution en bac à sable?) pour démontrer que SharePoint est la possibilité pour les utilisateurs de la copie d'un document (avec ses attributs) à partir d'un doc de la bibliothèque d'un site vers un doc de la bibliothèque dans un autre site (même collection de sites, si c'est important) sans une application externe.Ce sera de sorte que les utilisateurs à travers plusieurs sites peuvent aller dans ma bibliothèque, choisissez un modèle word, puis de copier n'importe quel nombre de ceux de leur propre bibliothèque.

Je comprends que cela peut devenir compliqué avec sélecteur de personnes et de champs de recherche, mais même les plus élémentaires de la fonctionnalité est approprié maintenant.Nous avons été à l'origine de la pensée qu'il y avait une OOTB fonctionnalité qui peut être en mesure de le faire, mais qui ne semble pas être d'une grande aide alors je suis prêt à apprendre quoi que ce soit à ce point.

Je suis à la recherche d'une recommandation de la meilleure façon d'aller à ce sujet avant d'éventuellement avoir à y penser la solution.

edit:Explorer et Designer ont été écartés comme des options pour nos utilisateurs finaux.L'exemple le plus proche de ce que je suis à la recherche de "l'Envoyer à un autre emplacement" l'option qui vous permet de copier des fichiers avec leurs métadonnées à une autre bibliothèque.Mais je voudrais que les utilisateurs puissent le faire en vrac (p. ex., faire des 20 exemplaires d'un certain modèle dans un cas).Puis-je modifier cet outil à tous ou aurais-je besoin de créer mon propre?Merci!

Était-ce utile?

La solution


Je ne dans votre post, vous avez dit "sans une application externe" mais le fait d'inclure les librairies js?
Ci-dessous est une solution simple qui permettra de copier un document à partir d'un SP de la bibliothèque de tout autre SP de la bibliothèque.Je n'ai pas vérifié son cross-site scripting capacités, mais théoriquement il devrait fonctionner dans toutes les fermes, les domaines et les différentes versions SP.(Il fonctionne à 100% à travers des toiles dans la même collection de sites)
Il suffit de copier ce code dans un .fichier html, remplacez le chemin/vers/jquery* avec le chemin d'accès à votre jquery et spservices fichiers, et ajouter un composant webpart Éditeur de Contenu à ce que jamais la page que vous voulez à l'hôte de l'interface et de l'ensemble de son contenu, lien, l'emplacement de l' .fichier html que vous avez créé.

Puisque vous voulez autoriser l'envoi des vers de multiples destinations, je vous conseille d'utiliser un textarea, au lieu de l'url de destination(s) et ensuite les analyser en ligne c'est à dire: $("textarea").val().split("\n").each(myfunc);

Vous pouvez également étendre ce, afin d'utiliser les actuellement sélectionnée document comme source, ou même l'utilisation d'un élément de liste déroulante avec url jetons pour envoyer une chaîne de requête paramater vers une autre page dont la valeur(s) vous donnera les informations nécessaires pour récupérer le document source de l'information.

Note: Cet exemple utilise Jquery et SPServices
Références: À l'aide de JS dans 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>

Mise à JOUR

Au lieu d'analyser l'URL de destination à temps, vous pouvez réellement les stocker dans un tableau et de le passer à la DestinationUrls paramètre qui accepte un tableau de l'url de destination.

Aussi, j'ai testé cette fonction avec succès dans la console sur une page contenant l'spservices et la bibliothèque jquery en utilisant codé en dur les url absolues pour le dst et itemurl les variables.

Mise à JOUR 2

J'ai oublié de mentionner que j'ai eu des problèmes de copier les domaines.Ce que j'ai fait était de la récupération de la Liste des sources de champs et de supprimer toute lecture seule à l'aide de la fonction ci-dessous.
J'ai oublié de le mentionner parce que mon application me donne un accès facile à la source listguid par l'intermédiaire d'une chaîne de requête.Si vous avez besoin de trouver les vôtres découvrez l' $().SPServices.SPListNameFromUrl la fonction que j'ai eu un succès mitigé avec.

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

Autres conseils

Je peux penser à 2 options très simples:

1) Les utilisateurs peuvent copier des éléments avec des listes / bibliothèques ouvertes dans l'Explorateur Windows

2) Les utilisateurs peuvent copier des documents avec "Contenu et Structure":

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

L'option on n'apportera pas toutes les métadonnées du document sur le nouvel emplacement (par exemple créé, modifié, etc.).

Il me manque peut-être quelque chose, mais pourquoi ne pas simplement configurer les documents originaux en tant que types de contenu de site?En les définissant comme un type de contenu, vous pouvez inclure les champs de métadonnées et attribuer un modèle par défaut (votre document d'origine) au type.Une fois le type de contenu configuré, vous pouvez l'inclure dans la bibliothèque de documents des utilisateurs, de sorte qu'il n'y ait pas de copier en arrière.

En outre, si vous changez du document d'origine, vous pouvez simplement mettre à jour le type de contenu et le modèle changera pour partout où il a été inclus, au lieu de vous avoir à ré-copier le document à chaque destination distincte.

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top