あるサイトから別のサイトへの文書をコピーします。
-
10-12-2019 - |
質問
、私はSharePointがユーザーがあるサイト内のドキュメントライブラリから別のサイトのドキュメントライブラリへのドキュメントライブラリから(その属性を持つ)文書をコピーすることができることを実証するために何かを構築する必要があります。外部アプリケーションなしで重要な場合はサイトコレクション。これは、複数のサイト間のユーザーがライブラリに移動し、Wordテンプレートを選択してから、それらの番号の数を自分のライブラリにコピーするようになります。
私は人々ピッカーとルックアップフィールドと複雑になるかもしれないことを理解していますが、最も基本的な機能性でさえ適切であることが適切です。もともとそれをすることができるかもしれないOOTB機能があったと考えていましたが、それは多くの助けを借りているようですので、この時点で何も学ぶことを望んでいます。
おそらく解決策を上回る前にこれを行うために行くための最良の方法の推薦を探しています。
編集:エクスプローラとデザイナーは、エンドユーザーのオプションとして除外されました。私が探しているものの最も近い例は、メタデータを他のライブラリにコピーすることを可能にする「他の場所への送信」オプションです。しかし、私はユーザーがバルクでこれを行うことができるようにしたい(例えば、あるインスタンスで特定のテンプレートのコピーを20コピー)。私はこのツールをまったく変更することができますか、それとも私自身のものを作成する必要がありますか? おかり!
解決
私はあなたの投稿でいいえあなたは「外部アプリケーションなし」を言ったが、JSライブラリを含むのか?
下のSPライブラリから他のSPライブラリにドキュメントをコピーする単純なソリューションです。
私はそのクロスサイトのスクリプティング機能を確認していませんが、理論的には農場、ドメイン、およびさまざまなSPバージョンを越えて働く必要があります。 (それは同じサイトコレクションのウェブ全体に100%が動作します)
このコードを.htmlファイルにコピーし、パス/ / jQuery *をjQueryファイルとSPServicesファイルへのパスに置き換え、インターフェイスをホストして設定したいものにコンテンツエディタのWebパーツを追加します。作成した.htmlファイルの場所へのその内容リンク。
複数の宛先への送信を許可したいので、宛先URLの代わりにTextAreaを使用してリコーミングしてから、Lineでそれらを解析します.$("textarea").val().split("\n").each(myfunc);
現在選択されているドキュメント、あるいは URLトークン query文字列を別のページに送信するには、Retreiveに必要な情報を提供します。ソース文書情報。
注:この例では、jQueryと Cewp のJSを使う
.
<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を解析する代わりに、実際にそれらを配列に保存し、宛先URLの配列を受け入れるDestinationUrls
パラメータに渡すことができます。
また、dst
およびitemurl
変数のハードコード絶対URLを使用して、SPServicesおよびJQueryライブリティを含むページ上のコンソールでこの機能を正常にテストしました。
アップデート2
私はフィールドのコピーを克服したことを私に言及するのを忘れました。私が終わったのは、ソースリストのフィールドを取得し、以下の機能を使用して読み取り専用のものを削除しました。
私の特定の実装は私にQueryStringを介してソース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エクスプローラで開いているリスト/ライブラリでアイテムをコピーできます。
2)ユーザーは「コンテンツと構造」で文書をコピーできます。
http://yoursite/_Layouts/sitemanager.aspx?Source={WebUrl}_layouts/settings.aspx
.
オプション1つは、文書のメタデータをすべての新しい場所に向けて持ち込みません(例えば、作成、変更など)。
私は何かが足りないかもしれませんが、元の文書をサイトコンテンツタイプとして設定するだけではありません。それらをコンテンツタイプとして設定することで、メタデータフィールドを含めてデフォルトのテンプレート(元の文書)をタイプに割り当てることができます。コンテンツタイプが設定されたら、それをユーザーのドキュメントライブラリに含めることができますので、後部や先にコピーする必要はありません。
また、元の文書を変更する場合は、コンテンツの種類を更新するだけで、文書を別々の宛先に再コピーする必要がなく、含まれていた場所でテンプレートが変更されます。