SSブログ

イルミネーション - (2) - [こーひーぶれいく]

昨日購入した3Dイルミネーションを飾りました。

本来は庭に設置するのでしょうが、庭においてもよく見えないのでウッドデッキに設置しました。しばらくは布団を干すときに要注意です。

あと、庭木にもイルミネーションを追加しました。これで庭木2つと3Dイルミネーションのクリスマスイルミネーションが完成です。

夜になるとなかなかきれいです。(自画自賛)機関車が思ったよりも明るくて、片付けないと変なところまで見えちゃいそうですが。

これで安心してクリスマスを迎えられるかな?


イルミネーション [こーひーぶれいく]

あと1ヶ月ほどでクリスマスですね。クリスマスと言えばイルミネーション。近くの住宅街では毎年競うように電飾を飾っていてとてもきれいです。

去年の我が家は地味に庭の木に電飾を1つだけ飾りました。それでも子供は大喜びでしたが。

今年はもう少し電飾を増やそうと本日お店に見に行きました。
そこで新作の機関車3Dイルミネーションを発見!機関車のイルミネーションは去年もあったのですが電球だったので消費電力が500Wもあり、ちょっと手がでない代物でした。

今年のはLEDで消費電力が少なく、しかもメッシュや磨り硝子風のアクリル板で面が構成されていてとてもきれいです。店員さんに聞いたところ、3Dイルミネーションは電化製品の分類ではなく、玩具に当たるため、メーカー保証は無し。値段も高いのでさんざん悩みましたが、結局機関車の3Dイルミネーションを買ってしまいました。

明日は設置を行います。設置できたら写真でも掲載しますね。

 


新 サブサイト→トップレベルサイト -(3)- ユーザーとクロスサイトグループのコピー [技術情報]

今回はユーザーとクロスサイトグループに関してです。

ユーザーとクロスサイトグループはロールと密接につながっているようです。

ユーザーを追加する際は下記の命令で実装できます。

NewRole.AddUser(ログイン名 as string 、メールアドレス as string 、
                          ユーザー名 as string 、備考 as string )

クロスサイトグループを追加する際は下記の命令で実装できます。

NewRole.AddGroup(グループ as SPGroup)

そこで下記のように実装してみました。前回作成したNewRoleに対してユーザーとクロスサイトグループを追加しています。

 '--- Target Role Users
For Each TargetUser In TargetRole.Users
 '--- Flag Initialed
 Flg = False
 '--- New Role Users
 For Each NewUser In NewRole.Users
  '--- Target Role Check
  If TargetUser.LoginName = NewUser.LoginName Then
   Flg = True
  Exit For
 End If
Next
'--- Flag Check
If Flg = False Then
 '--- Role Add
 NewRole.AddUser(TargetUser.LoginName, TargetUser.Email, TargetUser.Name, TargetUser.Notes)
End If
 

For Each TargetGroup In TargetRole.Groups
 '--- Flag Initialed
 Flg = False
 '--- New Role Groups
 For Each NewGroup In NewRole.Groups
  '--- Target Role Check
  If TargetGroup.Name = NewGroup.Name Then
   Flg = True
  Exit For
 End If
Next
'--- Flag Check
If Flg = False Then
 '--- Role Add
 NewRole.AddGroup(TargetGroup)
End If
 

うーん、美しくないですねぇ。誰かもっと美しい方法があれば教えてください。

とりあえずはこれでユーザーとクロスサイトグループをコピーすることができました。

次回はやっかいなリストに入ります


新 サブサイト→トップレベルサイト -(2)- サブサイト作成とロールのコピー [技術情報]

前回までのプログラムで新しいコンテンツDBの作成と新しいサイトコレクション+トップレベルサイトまで作成できました。

今回から複数回に分けてサブサイトをコピーしようと思います。

仕様としてサブサイトは階層構造で作成されていますので、コピーする部分は再帰的に呼ばれてもいいように考慮する必要性があります。私の場合はFunctionを使用して再帰的に呼ばれるようにしました。

前提(パラメータ)
 RootWeb … コピー先ルートサイト
 TargetWeb … コピー元サブサイト
戻り値
 コピー後サブサイト

Public Function CopyNewWeb(ByVal RootWeb As SPWeb, _
ByVal TargetWeb As SPWeb) As SPWeb

まず、コピー先ルートサイト配下に新規のサイトを作成します。

Dim strWebUrl As String '-- コピー先サイトURL
strWebUrl = TargetWeb.Url.Split("/")(TargetWeb.Url.Split("/").Length - 1)
CopyNewWeb = RootWeb.Webs.Add( _
strWebUrl, TargetWeb.Title, TargetWeb.Description, _
TargetWeb.Language, TargetWeb.WebTemplate, _
TargetWeb.HasUniquePerm, False)

次にRoleをコピーします。が、そこで注意です。SharePointの標準的なロールには管理者、Webデザイナ、投稿者、閲覧者、ゲストが存在します。しかし、ゲストはサイト自体に権限がない状態でリストやドキュメントライブラリに権限を付与した際に使用されるロールでこのロールは作成することができないようです。そこでゲストロールは省きます。ゲストロールかの判断はSPRoleType.Guestの値を使用します。

Dim TargetRole as SPRole
For Each TargetRole In TargetWeb.Roles
'--- Guestは対象外
If TargetRole.Type <> SPRoleType.Guest Then
 '--- 当該ロールが存在した場合にTrueにする
 Flg = False                           
 '--- コピー先サイトのロール
 For Each NewRole In NewWeb.Roles
  '--- Guestは対象外
  If NewRole.Type <> SPRoleType.Guest Then
   '--- ロールの比較
   If TargetRole.Name = NewRole.Name Then
    Flg = True
    Exit For
   End If
  End If
 Next
 '--- 該当ロールが存在しなかった場合は追加する
 If Flg = False Then
  '--- ロールの追加
  NewWeb.Roles.Add(TargetRole.Name,
    _ TargetRole.Description, TargetRole.PermissionMask)
 End If
End If
Next

次回はユーザーとクロスサイトグループの追加をしようと思います。


新 サブサイト→トップレベルサイト - (1) - [技術情報]

ご無沙汰してます。

しばらく更新してませんでしたがまた徐々に更新をしていきたいと思います。

まずはおわびから。一番最初に書いた記事について間違いがありました。(http://blog.so-net.ne.jp/SharePoint_Programing/2007-05-15) この方法ではワークスペースが移行できなかったり、エラーになる場合があり、実際の現場では使えませんでした。不完全な記事を掲載してしまい申し訳ありません。

そこで、できるかはわかりませんがサブサイト→トップレベルサイトの移行ツールを作成してみようと思います。(懲りもせず自分で試行錯誤の末、完成させようと考えています。間違っている可能性も多々あるとは思いますがご容赦ください) m(_ _)m

まずは要件として大きすぎるコンテンツDBのサブサイトを別のコンテンツDBに移行するというものを考えます。実現方法は自分が得意とするWindowsAPPで実現しようと思います。WSSではトップレベルサイトはSPSite、サブサイトはSPWebのオブジェクトになるため、移行先にはダミーでトップレベルサイトを作成し、サブサイト同士でオブジェクトをコピーしようと思います。

まずはコンテンツDBの作成です。

Dim MySPGlobalAdmin as New SPGlobalAdmin
Dim MySPVirtualServer As SPVirtualServer _
        = MySPGlobalAdmin.OpenVirtualServer(VirtualServerUri)
Dim strDatabaseServer as string _
        = MySPVirtualServer.ContentsDB(0).Server
Dim MySPLanguage as SPLanguage = MySPGlobalAdmin.ServerLanguage
Dim strDatabaseName as string = "NewConDB"
Dim strUserName as string = nothing
Dim strPassword as string = nothing
Dim nWarningSiteCount as integer = 1
Dim nMaximumSiteCount as integer = 1
Dim nStatus = 0
Dim strSiteUrl as string = "Site Url"
Dim strTitle as string ="テスト"
Dim strDescription as string = "サイトコレクション作成のテスト"
Dim nLCID as System.Uint32 = Convert.ToUInt32(MySPLanguage.LCID)
Dim strWebTemplate as string = "STS#0"
Dim strOwnerLogin as string = "オーナーログイン名"
Dim strOwnerName as string = "オーナー名"
Dim strOwnerEmail as string = "オーナーメールアドレス"
'--- コンテンツDB作成
MySPVirtualServer.ContentDatabases.Add( _
    strDatabaseServer, strDatabaseName, strUsername, _
    strPassword, nWarningSiteCount, nMaximumSiteCount, nStatus)
'--- サイトコレクション作成
Dim NewSite As SPSite = MySPVirtualServer.Sites.Add( strSiteUrl, strTitle, _
      strDescription, nLCID, strWebTemplate, strOwnerLogin, strOwnerName, _
      strOwnerEmail)

次回はサブサイトのコピーを考えます。

 


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。