SharePoint Designer 2007 : 無償ダウンロード化
Expression Web と機能が結構かぶってるよなーと思ってたらこうくるとは
これが社内での SharePoint の活用につながれば…?まぁ、さしあたっては少し便利な HTML エディタゲットといったところか。
Word 文書からきれいな HTML とはてな記法で出力する - はじめに
社内向けページに情報を載せるときに、すでに Word で作成されている文書を HTML に変換することがしばしば。
すでにあるページのスタイルに合わせつつ HTML を生成するのはなかなか手間がかかる。Word の HTML 生成は非常に汚いソースになるしその後の整形が必要、かといって自前ではじめから HTML を作ると人によってフォーマットが変わる余地があったりとあまり美しくない。
そこで VSTO の勉強がてら、Word の文書をきれいな HTML に変換するアプリを作ってみる。
- 組み込みスタイルの「見出し1」だと、<h1> で、見出し2なら <h2> のようにスタイルでの指定を原則とする(色指定その他も)
- 貼り付けられている画像は適切なサイズにリサイズして HTML と併せて出力する
- 表もそれなりに処理する
- 半角全角の統一処理などを行う(参考:Windows Azureクラウド・サービス+.NETクライアントの例 − @IT)
- ついでにはてな記法でも出力できるようにする
- 図形や SmartArt その他はとりあえず無視
さて、いつ頃できるかな…
後で試す:SharePoint 関連ツール
便利そうな CodePlex にあった SharePoint 関係のツールメモ、後で試して書き直す。
SharePoint Content Deployment Wizard
下記について、エクスポートとインポートができるツール?
- site collections
- webs
- lists
- folders
- list items (including files)
SharePoint Solution Installer
Setup.exe.config をちょっと編集するだけで wsp パッケージのインストーラが作れるツール。名前の通りインストーラだった。作成したパッケージを本番環境へ展開する際に使ったり?(4/4更新)
SharePoint SmartTemplates for Visual Studio
Visual Studio 向けのプロジェクトテンプレートで、ASCX(Web User Parts) を作成すると、WSP の作成と SharePoint Solution Installer を使ったインストーラ一式の作成までが自動化できる。触った感じでは VSeWSS でいいような気がする。(インストーラを作成してくれるのは便利だけど) (4/4更新)
Community Kit for SharePoint
Blog, Wiki, ディスカッションなどを強化するソリューションパッケージ、デフォルトであるなんちゃって Blog が Blog へ昇格か。
WSPBuilder
WSP パッケージを作成するためのツール?
SharePointにJavaScriptでTickerを実装する - まとめ
まとめると、
- SharePoint Web Service を使えばいろいろできそう(がんばれば SharePoint Designer でできることは全部?)
- jQuery は便利
- jQuery のプラグイン作成はそんなに難しくない
ということで。
SharePoint Manager
リストのIDや既定ビュー、ビューのIDの確認用に使えそうなのでメモ。
SharePointにJavaScriptでTickerを実装する - Tickerの作成(2)
Ticker を表示させる jQuery プラグインを探していた際に見つけた、jQuery liScroll - a jQuery News Ticker を参考にしながら目的の動作を実装してみる。
////////////////////////////////////////////////////////////////////////////////
// jQuery Plugin - dl Ticker (by Kz)
jQuery.fn.dlTicker = function ( settings ) {
settings = jQuery.extend({
moveDuration: 1000,
showDuration: 5000,
hoverTip: true
}, settings);
return this.each ( function() {
var dl = $(this);
dl.addClass('dlTicker_base'); // <dl class="dlTicker_base">***</dl>へ
dl.wrap('<div class="dlTikcer_mask"></div>'); // <div class="dlTikcer_mask"><dl>***</dl></div>へ
dl.parent().wrap('<div class="dlTicker_container"></div>'); // <div class="dlTicker_container"><div class="dlTikcer_mask"><dl>***</dl></div></div>へ
var containerWidth = dl.parent().parent().width(); // dlTikcer_maskのwidth
if ( settings.hoverTip ) {
dl.parent().parent().parent().append('<div class="dlTicker_tips" id="dlTicker_tips" style="left: -9000; top: -9000;"></div>');
$('#dlTicker_tips').html($('dd:eq(0)', dl).html());
$('#dlTicker_tips').hide();
}
dl.find('dt').hide();
dl.find('dd').hide();
$('dt:eq(0)', dl).show();
dl.width(containerWidth);
var itemCount = 0;
var eventTimer = null
function endAnimate() {
eventTimer = null;
var oldItemCount = itemCount;
if ( (++itemCount) >= dl.find('dt').length ) {
itemCount = 0;
}
$('dt:eq(' + oldItemCount + ')', dl).hide();
$('dt:eq(' + itemCount + ')', dl).show();
$('#dlTicker_tips').html($('dd:eq(' + itemCount + ')', dl).html());
//dl.animate({left: '-'+containerWidth}, 'fast');
dl.css('left', containerWidth);
scroll();
}
function scroll() {
dl.animate(
{ left: 0 },
settings.moveDuration,
'swing',
function() { // アニメーションが終わったら
eventTimer = setTimeout(endAnimate, settings.showDuration);
}
);
}
scroll();
if ( settings.hoverTip ) {
dl.hover(
function() {
var pos = dl.offset();
var height = dl.height();
$('#dlTicker_tips').css('left', pos.left).css('top', pos.top + height);
$('#dlTicker_tips').fadeIn('normal');
if ( eventTimer ) {
clearTimeout(eventTimer);
eventTimer = null;
}
},
function() {
$('#dlTicker_tips').fadeOut('normal');
$('#dlTicker_tips').css('left', -9000).css('top', -9000);
$('#dlTicker_tips').hide();
eventTimer = setTimeout(endAnimate, settings.showDuration);
}
);
}
});
};
んで、↓のように使う。setInterval を使って定期的に dl を再構築していく。
<div id="tickerPlace" />
<script type="text/javascript">1:
2: <!--
3: setInterval('createTicker()', 30 * 60 * 1000);4: function createTicker()5: {
6: MOSS.Lists.getListItems({
7: listName: '{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}',8: query: '<Query><OrderBy><FieldRef Name="Modified" Ascending="FALSE"></FieldRef></OrderBy></Query>',9: fields: '<ViewFields><FieldRef Name="ID" /><FieldRef Name="Title" /><FieldRef Name="Body" /><FieldRef Name="ServerUrl" /><FieldRef Name="Modified" /></ViewFields>',10: rowLimit: '5',11: callback: function(result) {12: if ( result.error ) {13: alert('Code : ' + result.error.code + '\nReason : ' + result.error.reason + '\nDetail' + result.error.detail);14: }
15: var html = '<dl id="ticker">';16: for ( var i = 0; i < result.rows.length; i++ )17: {
18: var r = result.rows[i];19: var vals = r.getAttribute('ows_ServerUrl').split('/'); vals.pop();20: var url = vals.join("/") + '/DispForm.aspx?ID=' + r.getAttribute('ows_ID'); // アイテムへのリンク21: html += '<dt><a href="' + url + '">' + r.getAttribute('ows_Title') +22: '</a><span>(' + r.getAttribute('ows_Modified') + ')</span></dt>'23: html += '<dd>' + r.getAttribute('ows_Body') + '</dd>';24: }
25: html += '</dl>';26: $('#tickerPlace').html(html);27: $('#ticker').dlTicker();28: }});
29: }
30: //--></script>
<style type="text/css">
.dlTicker_container
{
border: 1px slolid #000;
background-color: #fff;
width: 738px;
height: 30px;
margin: 0;
padding: 0;
overflow: hidden;
}
.dlTikcer_mask
{
position: relative;
left: 10px;
top: 8px;
width: 718px;
overflow: hidden;
}
.dlTicker_base
{
position: relative;
left: 750px;
list-style-type: none;
margin: 0px;
padding: 0px;
}
.dlTicker_tips
{
display: block;
overflow: auto;
position: absolute;
border: 1px #000 solid;
background-color: #eee;
padding: 5px 10px 5px 10px;
color: #000;
width: 500px;
max-height: 200px;
}
</style>