Thứ Hai, 15 tháng 6, 2009

InfoPath: Drop-Down List Changed, Switch View

Web know, switch available in Button rule. Sometime, we need to switch view when InfoPath form data changed like Drop-Down List Changed Event. What’re We going to do?

We must implement FormEvents.ContextChanged and DropDown Changed. In FormEvents.ContextChanged we call

ViewInfos.SwitchView(viewname);

Here is my code:

   1: public void InternalStartup()
   2:         {          
   3:             EventManager.FormEvents.ContextChanged += new ContextChangedEventHandler(FormEvents_ContextChanged);
   4:             EventManager.XmlEvents["/my:DoanhNghieps/my:loaiHinhHoatDong"].Changed += new XmlChangedEventHandler(loaiHinhHoatDong_Changed);
   5:         } 
   6:  
   7:         public void FormEvents_ContextChanged(object sender, ContextChangedEventArgs e)
   8:         {           
   9:             if (canRedirect) 
  10:             { 
  11:                 canRedirect = false; 
  12:                 ViewInfos.SwitchView("CN"); 
  13:             }
  14:         }
  15:         private bool canRedirect = false;
  16:         public void loaiHinhHoatDong_Changed(object sender, XmlEventArgs e)
  17:         {
  18:             // Write your code here to change the main data source.
  19:             canRedirect = true;            
  20:         }

Thứ Sáu, 12 tháng 6, 2009

SharePoint EventHandler: Set Item Level Permission Programmatically

Sometime, we need to set item permission dynamically for SharePoint List item or SharePoint Document. To do that, we create Item event handler then implement extension method for setting permission to the item.

the code as following:

   1: public static SPListItem SetItemLevelPermission(this SPListItem listItem, SPPrincipal userOrGroup, SPRoleType roleType)
   2:         {
   3:             SPListItem item = listItem;
   4:             Guid listId = listItem.ParentList.ID;
   5:             Guid itemId = listItem.UniqueId;
   6:             SPUserToken token = item.Web.Site.SystemAccount.UserToken;
   7:             SPSecurity.RunWithElevatedPrivileges(
   8:                 delegate()
   9:                 {
  10:                     using (SPSite site = new SPSite(item.Web.Site.ID, token))
  11:                     {
  12:                         site.AllowUnsafeUpdates = true;
  13:                         using (SPWeb web = site.OpenWeb(item.Web.ID))
  14:                         {
  15:                             web.AllowUnsafeUpdates = true;
  16:                             SPWebApplication webApp = web.Site.WebApplication;
  17:                             webApp.FormDigestSettings.Enabled = false;
  18:                             item = web.Lists[listId].Items[itemId];
  19:                             item.BreakRoleInheritance(false);
  20:                             web.AllowUnsafeUpdates = true; 
  21:  
  22:                             SPRoleDefinition roleDefinition = web.RoleDefinitions.GetByType(roleType);
  23:                             SPRoleAssignment roleAssignment; 
  24:  
  25:                             roleAssignment = new SPRoleAssignment(userOrGroup);
  26:                             roleAssignment.RoleDefinitionBindings.Add(roleDefinition);
  27:                             item.RoleAssignments.Add(roleAssignment); 
  28:  
  29:                             item.Update(); // call this function before finished 
  30:                             webApp.FormDigestSettings.Enabled = true;
  31:                             web.AllowUnsafeUpdates = false;
  32:                         }
  33:                     }
  34:                 }
  35:                 );
  36:             return item;
  37:         }



In the ItemAdding or ItemAdded Event, We use:






   1: public override void ItemAdded(SPItemEventProperties properties)
   2:        {
   3:            SPWeb currentWeb = properties.ListItem.Web;
   4:            SPUser currentUser = currentWeb.CurrentUser;
   5:            properties.ListItem.SetItemLevelPermission(currentUser, SPRoleType.Contributor);
   6:        }