SharePoint2010のカレンダーをカテゴリ別に色分けする

PlanetWilson SharePoint Blogにあるカレンダーのカラー化スクリプト
http://planetwilson.blogspot.com/2011/07/sharepoint-2010-colour-calendar-post.html
をちょこっと改造して、文字も変更できるようにしました。
背景と文字はセットで変えないと表現の範囲が狭くなりますからね。


ってことで、変更点を・・・
の前に言っておきますが、私はプログラミングは素人なので、
効率が悪かったり、間違った記述かもしれません。その辺は許してください。

---オリジナル---
function ColourCalendar() {
  if(jQuery('a:contains(' + SEPARATOR + ')') != null)
  {             
    jQuery('a:contains(' + SEPARATOR + ')').each(function (i) {
      $box = jQuery(this).parents('div[title]');
      var colour = GetColourCodeFromCategory(GetCategory(this.innerHTML));
      this.innerHTML = GetActualText(this.innerHTML);
      jQuery($box).attr("title", GetActualText(jQuery($box).attr("title")));
      $box.css('background-color', colour);
    });        
  }   
}   
---変更後---
function ColourCalendar() {
  if(jQuery('a:contains(' + SEPARATOR + ')') != null) {
    jQuery('a:contains(' + SEPARATOR + ')').each(function (i) {
      $box = jQuery(this).parents('div[title]');
      var colour = GetColourCodeFromCategory(GetCategory(this.innerHTML);
      this.innerHTML = GetActualText(this.innerHTML);
      jQuery($box).attr("title", GetActualText(jQuery($box).attr("title")));
      $box.css('background-color', colour[0]);
      jQuery(this).css('cssText','color: ' + colour[1] + ' !important');
    });
  }
}
------------
まず、ColourCalendar()ですが、$box.css('background-color'で変数colourを代入しますが、これを配列にしています。
次に、文字の色を指定する行を追加します。
ここでのポイントは「!important」を指定すること。

jQuery(this).css('cssText','color: ' + colour[1] + ' !important');


あとは、カテゴリーの条件を指定します。

---オリジナル---
function GetColourCodeFromCategory(category) {
  var colour = null;     
  switch (category.trim().toLowerCase()) {
    case 'meeting':         
      colour = '#4FDB51';
      break;       
  }     
  return colour;   
}
---変更後---
function GetColourCodeFromCategory(category) {
  var colour = null;
  var textc  = null;
  switch (category.trim().toLowerCase()) {
    case 'meeting':         
      colour = '#4FDB51';
      textc  = '#000000';
      break;       
  }     
  return [colour,textc];   
}
------------
ただ単に、戻り値を配列に変更しただけです。

こんな感じかなぁ~


バルス

久々に参加できました。
それにしても毎回サーバーを落とすこのイベントですが、運営側も落ちないサーバーを準備していますね。
一応、瞬間最大風速は世界一なので、バルスに耐えられれば処理能力的には問題ないってことですね。

前回は、バルスの前に処理遅延が発生していたけどね。

ラピュタとかって四半世紀前アニメなんだけど、未だに楽しめるよね。すげぇー

SCCM2007ライセンスのインポート

ふ~~ん 意外としっかりしてた・・・

まぁ、ちゃんと調べてないから?とかが原因なんだろうけどね。

System Center Configuration Manager 2007の資産インテリジェンスではMicrosoft以外のライセンスも管理できます。
で、どうやって管理するかというと、定義ファイルを読み込んで、レポートで集計するのですが、この定義ファイルが面倒だなぁ~って思ってたの。
だって、ブログラム名、バージョン名(本当は前方一致)を一致させないとダメじゃん?
勝手にバージョンも完全一致だと思い込んでいたので、運用に乗るわけないじゃん!!って勝手に思ってたんだけど、読み込みエラーでうまくいかないものがあったので、何度か試してみると、どうやら前方一致っぽい感じがしたので、確認すると前方一致でした。

エラーのパターン
Name,Publisher,Version,
hoge,age,8,,,,
hoge,age,8.1,,,,
hoge,age,8.2,,,,

この場合、バージョンが8の行を消しても成功し、8.xの行を消しても成功する。
で、8を残した場合、8.1と8.2の合計数が表示されるのね。

こういう動きって当たり前なんだけど、バージョン列まで完全一致だと思い込んでいたので、気が付かなくて勝手に評価を下げていたの。
ごめんね。

あと、日本語を扱うにはunicodeってのも常識だね。


入力補助機能を追加したい

jQueryなんかでinputタグに文字列を入力したり取得するとき、
inputタグを特定するためにnameやid属性を利用するのですが、
SharePointではnameやid属性はソースでは「ff1{$Pos}」ってかんじの
短い値なのですが、実際に表示されると
ctl00$m$g_cafe866b_6e5b_416a_bf46_5bad614998d9$ff11$ctl00$ctl00$TextField
みたいな感じで長~い文字列になってしまって、あれれ~~って感じになります。


でも、該当の<SharePoint:FormField>タグを<div id="hoge">で囲んで、
<div id="hoge">内の<input>を選択するようにすれば楽勝ですね。


jQueryでいえば $("#hoge input") で見事にinputタグを特定できます。
これを使えば、入力補助機能が簡単に作れたりしそうですね。


これに気が付くのにだいぶかかってしまいましたが・・・
初めは長いid値に$ff11って文字列があるので、これを部分一致で検索すれば~って着手したら、
ff1{$Pos}なら$ff11だけど、ff20{$Pos}の場合$ff20_1になったりと一桁と二桁だと動きが違う。
3ケタの場合は確認してないけど、この方法はだめだなってね。


たぶん<asp:><SharePoint:>のidとnameはシステム側で競合を防ぐ処理が動くんだろうね。



Viva ラーニングのSharePointコンテンツで既定の言語がまじめに動き出した?

相変わらず挙動が安定しないVivaラーニングさん。 既定の言語設定がまじめに仕事を始めたのかもしれません。 ちょっと確認したいことがあってラーニングを開くとコンテンツが一つだけになってしまいました。すべてのコンテンツが表示された状態から何も操作していないのに表示コンテンツ数が変わ...