私は見て回って解決策をまだ見つけていません。解決策を見つけるためにコードスニペットをこことそこに取りました。リストアイテム複数のユーザーのアクセス許可をプログラムで(Sharepoint)
フィールド「割り当て先」に「ドキュメント共同作業」というDoc Libraryがあります。これは[People/Groups]フィールドです。これらの人々は、特定の文書(リスト項目の許可)に取り組むことができます。今では、最初は隠されたアクセス権を持っていますが、ドキュメントに追加すると、それを見て貢献することができますし、電子メール通知も受け取ります。私は以下の完全なコードを添付しました。
私はVS10デバッグを行ってもエラーは表示されません。しかし、電子メールを送信したり、権限を設定したりすることはありません。どうしましたか?あなたのコードで、あなたが持っている問題の
using System;
using System.IO;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Security;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.Workflow;
namespace ARDT.Notifications
{
/// <summary>
/// List Item Events
/// </summary>
public class Notifications : SPItemEventReceiver
{
/// <summary>
/// An item was checked in
/// </summary>
public override void ItemCheckedIn(SPItemEventProperties properties)
{
SPSite site = new SPSite("http://sp2010dev/ardt");
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists["Document Collaboration"];
SPListItem listItem = properties.ListItem;
SPUser userName = null;
String toAddress = null;
//EMail initializations
bool appendHtmlTag = false;
bool htmlEncode = false;
string subject = "Subject";
string message = "Message text";
//get usernames
string[] userNameArray = listItem.Fields["Assigned to"].ToString().Split(';');
for (int i = 0; i <= userNameArray.Length - 1; i++)
{
userName = web.AllUsers[userNameArray[i]];
toAddress = userName.Email;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
//EMAIL USER
bool result = SPUtility.SendEmail(web, appendHtmlTag, htmlEncode, toAddress, subject, message);
//PERMISSIONS
//remove permissions first
web.AllowUnsafeUpdates = true;
listItem.BreakRoleInheritance(false);
SPRoleAssignmentCollection raCollection = listItem.RoleAssignments;
//remove exisiting permissions one by one
for (int a = raCollection.Count - 1; i > -0; i--)
{
raCollection.Remove(a);
}
//grant permissions for specific list item
SPRoleDefinition roleDefintion = web.RoleDefinitions.GetByType(SPRoleType.Contributor);
SPRoleAssignment roleAssignment = new SPRoleAssignment(userName);
roleAssignment.RoleDefinitionBindings.Add(roleDefintion);
listItem.RoleAssignments.Add(roleAssignment);
listItem.Update();
});
}
}
base.ItemCheckedIn(properties);
}
}
}
いや、私はまた、代わりに、更新のチェックインさtheresの下に置くの単純なミスを犯しました更新するときに関数が複数回実行されるのを回避するには、リスト内の "updateContributors"という列を作成し、デフォルト値のTrue /はい – Shankeith