SharePointで、サイトコレクションの機能をアクティブ化するのに失敗する場合

SharePointで、サイトコレクションの機能をアクティブ化しようとすると

機能 'NintexWorkflowContentTypeUpgrade' (ID: 86c83d16-605d-41b4-bfdd-c75947899ac7) を範囲 'http://dionysos/sites/itservice' でアクティブ化できませんでした。

というメッセージが出て失敗した。

どうも権限周りで問題がある場合に発生するようだ。
http://archive.sharepoint.orivers.jp/forums/thread/1055.aspxの下の方にある

海外のサイトで書かれていた方法を試したところ、うまくいきました。
Xaval様のおっしゃる方法と根本は同じですが、 お手軽な方法です。

アプリケーションプールのアカウントはいじらずに、Web アプリケーションが側のアプリケーションプールを
一時的に [SharePoint Central Administration v3] に変更してアクティブ化するという方法です。

利点は「戻すのが楽」です w

のように、一時的にiisの管理ツール上でSharePoint-80のアプリケーションプール(Webサイトのプロパティ→ホームディレクトリで設定)をSharePoint Central Administration v3に設定すると問題なくアクティブ化することができた。

SharePointで承認されるまで公開しない方法

SharePointではドキュメントのバージョン管理を利用して下書き(未承認状態)のドキュメントを、読み取り権限しかないユーザには公開しないよう制限することができる(作成者および承認権限を持つユーザにのみ閲覧できるようにすることもできる)。

ドキュメントのバージョンはメジャー(承認済のもの)とマイナー(未承認のもの)に分けて管理することができ、読み取り権限しかないユーザにはメジャーのものだけを公開することによって上記を実現している。

設定方法

設定するドキュメントライブラリの「設定」→「フォーム、ライブラリの設定」→「全般設定>バージョン設定」

ここで、

  • 「コンテンツの承認」→「はい」
  • 「ドキュメントのバージョン履歴」→「メジャーとマイナーバージョンを作成する」
  • 「下書きアイテムのセキュリティ」→「アイテムを編集できるユーザー」(「アイテムの作成者およびアイテムを承認できるユーザー」)

とすればよい。
「ドキュメントのバージョン履歴」は「バージョンを管理しない」にしてもOK。


Nintex workflow 2007のRequest approvalタスク実行時のエラー

SharePointのシステムアカウント(SHAREPOINT\system)でNintex workflowのRequest approvalのタスクを実行(承認or却下)すると下記のエラーが発生する。

Nintex Workflow; Build: 11000 (http://dev-003.stratecht.local/sites/itservice/_layouts/NintexWorkflow/preview.aspx?ListId=65bdf310-d176-46cc-86c5-b2cdc62dba8b&ItemId=9&InstanceId=ee0f8bfc-9dd1-4769-8dd1-29065da6225c)
Error in request approval action.
System.ArgumentNullException: 値を Null にすることはできません。
パラメータ名: String
   場所 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   場所 System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   場所 Nintex.Workflow.Activities.ApprovalActivityInternal2.ChildCompleted(Object sender, ReplicatorChildEventArgs e)
   場所 System.Workflow.ComponentModel.Activity.RaiseGenericEvent[T](DependencyProperty dependencyEvent, Object sender, T e)
   場所 System.Workflow.Activities.ReplicatorActivity.HandleStatusChange(ActivityExecutionContext executionContext, ActivityExecutionStatusChangedEventArgs e, ReplicatorSubscriber subscriber)
   場所 System.Workflow.ComponentModel.ActivityExecutorDelegateInfo`1.ActivityExecutorDelegateOperation.Run(IWorkflowCoreRuntime workflowCoreRuntime)
   場所 System.Workflow.Runtime.Scheduler.Run()


原因は操作ユーザがシステムアカウントであること。
他のユーザであれば問題なく実行できる。なぜシステムアカウントだけダメなのかは不明。
権限の問題ではなかった。同時に下記のエラーが発生するため、メールアドレスの設定に問題があるのかもしれない。
システムアカウントにメールアドレスを設定する方法が分からなかったため、そちらについては調査していない。

Nintex Workflow; Build: 11000
WorkflowHistoryEventReceiver failed.
System.ArgumentException: Workflow initiator has no email address.
   場所 Nintex.Workflow.Features.WorkflowHistoryEventReciever.ItemAdded(SPItemEventProperties properties)

SharePointでログインユーザがシステムアカウントとして認識される

atword.jp - このウェブサイトは販売用です! - レンタル テンプレート 無料ブログ ワードプレス サーバ リソースおよび情報によると、

  • アプリケーションプールアカウントに登録したユーザ
  • ファームを構築したユーザ
  • BUILTIN\administrator

の場合、普通のドメインユーザでSharePointにログインしてもシステムアカウント(SharePoint\system)として認識される。

そのユーザをシステムアカウントから外すためには下記の方法で別のアカウントをシステムアカウントとして登録すればよい。
http://malcan.com/EN/Lists/Tips%20and%20tricks/DispForm.aspx?ID=16
Plan for administrative and service accounts in SharePoint Server | Microsoft Docs

AquaSKK IMK版でクエスチョンマークや句読点を全角にする

~/Library/Application Support/AquaSKK/kana-rule.confに下記を追加する。

kana-rule.confがまだない場合は、リポジトリからコピーして作成。

?,?,?,?
!,!,!,!<,<,<,

(,(,(,(
),),),)

iPhone SDKレシピ3:UIProgressViewの使い方

ポイント

UIProgressViewのprogressプロパティは、ある処理をしているスレッド中で変更しても、その処理が終了するまで画面に反映されない。
そこで、performSelectorInBackground:withObject:メソッドを利用して、バックグラウンドでprogressプロパティを変更する。

ソース

// tmpViewController.h
#import <UIKit/UIKit.h>

@interface tmpViewController : UIViewController {
	IBOutlet UIProgressView *progressBar;
}

@property(nonatomic, retain) IBOutlet UIProgressView *progressBar;

- (IBAction)start;
- (void) progress:(NSNumber *)amount;

@end


// tmpViewController.m
#import "tmpViewController.h"

@implementation tmpViewController
@synthesize progressBar;

- (IBAction)start {
	progressBar.progress = 0;
	for (int i=0; i<100; i++) {
		[self performSelectorInBackground:@selector(progress:) withObject:[NSNumber numberWithFloat:0.01f]];
		[NSThread sleepForTimeInterval:0.1f];
	}
}

// バックグラウンドでprogressを変更
- (void)progress:(NSNumber *)amount {
	progressBar.progress += [amount floatValue];
}

- (void)dealloc {
	[progressBar release];
    [super dealloc];
}

@end