SharePointでサイトを跨いでファイルをコピーしてみた(補足)

昨日の記事を見直してみて、例えば自分がjavascript or SharePointの初心者だとして、これだけ見て実際に動くとこまで確認できるかな(いや出来ない)と思ったので、詰まりそうなポイントを想像しQA形式でもうちょっとだけ詳しく説明してみます。

●開発者ツール?F12?何言ってんの?

⇒IEでもChromeでも利用可能な、クライアントの情報を色々操作したり、javascriptのデバッグとかできるツールです。大体のブラウザにおいてF12キー押下で起動でき、コンソールの中でコードを打てばそのコードが実行されます。使い方とかはちょっと勘弁してください。ちな私はChrome派です。

●「Uncaught ReferenceError: SP is not defined」って出るんだけど!?

⇒モダンUIになってませんか?モダンUIはカスタムスクリプトが実行できません。クラシックUIにしてリトライしてください。

●フルパスって何よ!?

⇒「https://~」から「・・・.xlsx]など拡張子まで含め全て記載してください。コピー先のファイルも同様です。極端に言えばコピー元とコピー先で別の拡張子を指定することも出来ると思います(←試してない

●コピーされてないしエラーも出てないしわけわかめ

⇒処理成功時、および失敗時にログを出力するようにしましょう。最初のfunctionは成功時の処理、後半は失敗時の処理です。以下、サンプルコードです。

var ctx = SP.ClientContext.get_current();
SP.MoveCopyUtil.copyFile(ctx, "<コピー元ファイルのフルパス>", "<コピー先ファイルのフルパス>");
ctx.executeQueryAsync(
    function () {console.log("成功");},
    function (sender, args) {console.log("失敗:" + args.get_message());}
);

●エラーが出る「要求された場所にアイテムを作成できません。フォルダーが存在していること、そのフォルダーで編集する権限があることを確認してください。」

⇒コピー先の階層は本当に存在していますか?途中の階層のフォルダは作成済みですか?自動で作成してくれないので、ファイルを置く階層までは手動でフォルダを作成しましょう。また、コピー先のフォルダに対してアイテムの作成権限があるか確認しましょう。

●From、To画面で入力して実行したいんですけど!?

⇒もうしょうがないなー特別ですよ。スクリプトエディタのスペニットに張り付けて使ってね。※動かなかったらごめんなさい。自己責任でお願いします。

<script type="text/javascript">
function myCopyFile() {
    var from = document.getElementById("txtFrom").value;
    var to = document.getElementById("txtTo").value;
    var ctx = SP.ClientContext.get_current();
    SP.MoveCopyUtil.copyFile(ctx, from, to);
    ctx.executeQueryAsync(
        function () {document.getElementById("result").innerHTML = "SUCCESS"},
        function (sender, args) { document.getElementById("result").innerHTML = args.get_message();}
    );
}
</script>
<div>From:<input id="txtFrom" type="text"/></div>
<div>to:<input id="txtTo" type="text"/></div>
<div><input id="btnRun" type="button" value="RUN" onclick="myCopyFile()"/></div>
<div id="result"></div>

というわけで、最近SharePointをほとんど知らない人や開発経験の浅い人に教える機会が多く、ちょろっと操作するだけで感心してもらえることもあり、SharePointって結構簡単に色んなことできるんだぜ!ってのを伝えたかったんですが…難しいですね。

お粗末様でした。