カスタムフォームでのSharePoint 2007の添付ファイル
なんだかんだ早く帰れた(帰された;;)。
身体的にも精神的にも今週も疲れてたので助かった。
急に早く帰れたので、何をしていいのか考えちゃう。
まあ、テレビ観て寝るけどね。
と言う事で、たまには役に立ちそうな事を書いてみることにしよう。ほんとうに役立つかは知らないけど、自分メモでもいいから良しとしよう。
SharePoint Designer 2007でリストのカスタムフォームを作成すると、あら不思議、添付ファイルのリンクをクリックすると
このフォーム カスタマイズされた添付ファイルで動作していません
と言われる。
この修正はSP2以降で行われており、マイクロソフトのこちらからパッチをダウンロードできる。
ただ、大規模で使っている場合や、複数の会社で開発している場合、更にはクローズドで使われている場合など、単発パッチを入れるのがなかなか難しい場合がある。また、そのパッチによって他の問題を引き起こす可能性もあるので、「パッチ適用後の不具合は御社で対応してください」とか言われるのは当たり前。辛いよね。
でぇ、一応マイクロソフトでも添付ファイルを動作させる情報もこちらに出てます。
但し、テンプレートを修正せずに加工すると、リストテンプレートとして保存して、それを使ってリストを追加するとあら不思議、新規作成も出来ない罠。
この現象が起きる理由は、元々あるウェブパーツが無くなる事に起因してリンク関係がおかしくなってしまうためです。part1てIDが2個あたりしますからね、消しちゃう罠。そのまま使う分には問題はないんですけどね。
じゃあ、残せばいいじゃんと思うでしょうが、残っていると添付ファイルの保存のみ失敗します。
ただ、テンプレートを書き換えるのはってのが人情ですよね。
じゃあどうすれってよって事になるわけですが、元々のウェブパーツのプロパティで非表示とウェブパーツを閉じるにチェックを入れてマイクロソフトのサイトにある情報通りに書き加えると添付ファイルが添付できるようになります(テンプレートは未加工)。
javascriptを使いツールバーなどを含むtableタグをspanタグでくくります。jQueryだと簡単にできますね。IEの開発者ツールやFirfoxのfirebugなどで出来上がるHTMLを見れば構成が見やすいので、見ながらspanタグを挿入してtableタグ以下をすべてspanタグの中に入れちゃいます。
<span id="part1">
<table>
[ code ]
</table>
</span>
後は、元のコードにspanタグなどで
<SharePoint:AttachmentUpload runat="server" ControlMode="XXX"/ >
<SharePoint:ItemHiddenVersion runat="server" ControlMode="XXX"/ >
を囲んでおいて、上記処理後にpart1のspanタグの次に来るように移動してあげれば出来上がり。XXXはそれぞれの画面に応じてNewやEditを入れてください。
こうしてやれば、テンプレートの改造に失敗とか他の人に迷惑を掛けずに自分だけで完結して添付ファイルが出来るようになります。
詳しくコードを見せろって言われそうだけど、いろいろ事情があるわけですよ。HTMLが理解できていてjavascriptでDOMを操作できる方であれば、マイクロソフトのサンプルだけで、なるほろって感じになると思います。
SharePoint自体が、IISにリクエストを出して入力値のチェックなどを行うので、jQuery入れてクライアントでチェックできる所はした方が利用者にとって優しいと思う。だって、添付ファイルを設定して保存したらエラーで入力画面に戻るんだけど、添付ファイルを再選択しなきゃいけないとか面倒極まりない。
あまり役に立たない情報ばかり垂れ流してますが、この位で勘弁してちょ。
どっかのブログだかで書かれてましたが、決して元々存在するウェブパーツは削除しないように。リストテンプレートで保存しても使いもにならなくなりますからね。プロパティで非表示と閉じるにチェックですよ!
ついでに、IDに{generate-id}が表示されることありますよね。これが出るとjavascriptでエラーが出るので要注意。一括置換で{generate-id}を消して保存すれば消えるはずです(IDが重複していない限り)。
ただ、{generate-id}はIDが重複しなくても出てくることあるので注意してください。