What is the better way to modify SharePoint item level permission programmatically? - sharepoint-2010

In my custom application I'm creating list document programmatically now I want to modify newly created item security along with it. For example, When item is created only current user and some admins will be in item level permission. My question is should I add code in my current module ( which does not run in event receivers) or do I need to add separate event receiver for the same ( like Itemadded )?

How are you creating the document?
You say programatically, which to me sounds like you're running .net code which creates a new SPListItem through someList.AddItem(), in which case you can just set the permissions using item.BreakRoleInheritance(false) and item.RoleAssignments.

Related

Share Outlook task manager custom view with user defined columns

I have created a task manager view in Microsoft Outlook which contains user defined fields as well as other Pre-defined fields in the view. I am trying to share this task manager with the rest of my team however, I cannot get it to show all of the columns as they appear on my screen on their screens. I am able to share the task manager but many of the columns are missing. It seems to be because the custom view I created isn't being shared with the other users. On my computer, the custom view is displayed and selected above "Simple list" under the Current View menu on the left and the others do no seem to have that as an option. Does anyone know how I can share the view? The tasks are already being shared I just need the View to be shared so my team can see all the columns properly. Thanks for any input you may have to offer.
Views are defined and customized using the View object's XML property. The XML property allows you to create and set a customized XML schema that defines the various features of a view.
Use the CurrentView property of the Explorer or Folder classes to customize the View in Outlook. An XML definition of the view can be exported and transferred to another PC.
Ok essentially what I did was I went to view - current view - define views and created a new view selecting Table and This folder, visible to everyone. Then I found pre-definied columns that weren't user defined columns that allowed free text typing like subject, milage, and billing information. Once finished adding all the columns I needed I applied the view. Then I went and changed the name of the columns by right clicking each column header in the task manager and selecting format column. there you chan change the label name to whatever you want the column to be titled. This way you did not have to worry with using user defined columns that can be tricky to share. After that I went back to view - current view - define views, and made a copy of the view I created selecting this folder, visible to everyone. Then you will want to right on the tasks manager name you created under the My Tasks list and select properties. Make sure to give everyone your sharing it with full permissions as owners so that they can all edit the task manager as they finish each task. Then I shared this task manager by right clicking on the name of my newly created tasks manager (listed under the My Tasks menu) and selecting "share". I checked the box in the email stating recipient can add, edit, and delete items in this tasks folder. Now everyone can see all information displayed in each column and edit it as well hope this helps.

How to create click event for dynamically created custom control?

Let say that I'm creating thousands of custom controls, each control has own data assigned to it (like name, id, etc.), now I would like to add
click event for each of these custom controls
access from software any of these dynamically created controls
So I would like to show MsgBox if user click control #452, which will be returning values assigned to object in custom control class (passed during creation of new control on user form)
Second thing is that I would like to access at any time any of these objects and read values assigned to object in control....
How to do it ? Each control has name assigned like "Example1", "Example2", "Example3" but I don't know how to access it from code as any of these exists during writing...
Also I were trying to find how to create and rise events but it seems that all solutions are for statically created controls and I need to rise events for dynamically crated custom controls....
Thanks in advance for any tips/help how to solve it.
I'm using VB.NET
Ok I figured it out !
It is very simple actually.
If any one will be looking for an answer :
To access dynamically created control first we are going to name it :
Dim Control as new CustomControl
Control.Name = "Name" & Counter
Next after we've created new controls we are going to access it using:
Dim _Control as new CustomControl
_Control = Ctype(Me.Panel1.Controls("Name1"), CustomControl)
MsgBox(_Control.Name.ToString)
Viola
I still not sure about custom events for all controls on custom control (so where ever user click, there should be override event which returns something back, now I can only either click panel container (not labels/pictureboxes) from code inside user class, or event per control on custom control (but issue is that I want to pass data from custom control to user class).

Setting up recycle bin functionality in Archer GRC

When deleting records within the platform, this action is not reversible via the front end. Is there a way to allow users to remove a record from their view without actually deleting the record?
You can simulate recycle bin functionality within Archer GRC by adding a record permission field that grants read access to "Everyone". If read access is no longer required then an editor of the record can go in and change "Everyone" to a group called "Recycle Bin."
Please note that if there are other record permission fields in the application, users or groups may still have access if they are selected in those fields. Perhaps You can set up a dropdown status field for the user to select "Recycle Bin" and use this condition for automatic record permissions to revoke permission to the record depending on the requirements or workflow of the application.
Solution shared by Igritte might be somewhat confusing for end users.
End user will see greyed out "Delete" button in the top toolbar, but he has to select "Recycle Bin" in the form. This solution was not accepted by my business owner at some point.
As a work around for "Soft delete", I wrote a custom object overriding "Delete" button functionality.
1. User doesn't have delete access to the record, so JavaScript code will make "Delete" button look like active and available.
2. Once the button is clicked, custom object will populate value in the
hidden value list and simulate the click on the "Save" button.
Update: Note that Custom object needs to hide the value list first once the page is loaded. Here you will need to use a JavaScript and do the following: [a] locate the value list DOM object and [b] set display attribute to none. I used jQuery library to do both. This way your value list is not displayed, but you still can use it to control data driven events.
3. With hidden value populated and submitted, record permission will hide this record from the end user.
Note that custom object hides one value list on the layout as well.
If for some reason JavaScript doesn't load properly, user simply will not be able to click on the grayed out "Delete" button.
Update: Hidden value list can be populated by custom object using JavaScript code as well. You need to identify the form tag "input" in HTML code of the page and set attribute "value" to the desired state. I used jQuery library to do this as well.
I have this solution in production working fine with IE11, FF and Chrome.
I can't share the code, but with WC3Schools JavaScript guides and 4 hours you can write and test it yourself with very little JavaScript skills.
Sometimes you have to use custom objects when you want to get a user-friendly solution of not available functionality.
Good luck!

How to populate active directory data into a sharepoint list form

I have one custom list with fields like(IDs, Name, Phone no) . when i add a new item to the list a new item form will be opened. While filling the form by entering the first field( IDs), i want other fields to be auto-populated from active directory.
Can it be possible through Browser(UI) or from sharepoint designer.
Please Help me out ...
Yes this is possible I have implemented something very similar.But this is only possible through event receiver in a custom list.Following was my approach,
Add a ItemAdding event receiver, only field entered by the user will be the UseraName field through people picker.
Internally,fetch the details of the user entered from AD.This can be done through code in this way,
http://www.aspdotnet-suresh.com/2011/03/how-to-get-userdetails-from-active.html
Then you can assign the user properties to their respective columns and update the list item.
If its not a custom list,you can always use User Profile Synchronisation by Mapping additional required AD properties so that they will show up in the user information list of that sitecollection.
You can use sharepoint user profile. So instead of going back to AD related stuffs SP profile will get automatically synced with AD. Its very easy to manage also.
If it's a different AD than the one you use for user profiles, then you will need to develop a custom WebPart and write server code to connect to the AD and check for user's info & auto-populate them.
If it's the same AD used for user profiles, then you already have different users properties on the SharePoint side and no need to reach out to the AD... this is assuming that you already have a User Profile Service Application setup and it's synced with AD (as #samh above suggested).

ECT External Content Type (using Infopath External Item Picker) with List

I would like to create a list with some External Data fields (and other fields) and customize it in Infopath, but it's not working.. InfoPath says:
The following fields in the SharepPoint list are not supported because
of their data type and will not be available in InfoPath Designer:
-field_1 (BusinessData)
-field_2 (BusinessData)
Is it possible to use an External Content Type (WCF Service) with a list in Infopath?
I mean, use an External Item Picker in a Infopath form that connects to a list. Or is it only possible with a Form Library?
Any ideas on how to solve this or a suggestion to another approach?
Thanks in advance.
It is possible to create the scenario you're referring to... if I understand you correctly, you want to use the External Item Picker to create a pick list within an external list against another list.
You would have to associate the two external lists (ECTs) within your BCS model. This association must be a foreign key based association. That done, SharePoint will automatically create an External Item Picker in the default list form.
I'm currently doing the same thing and it works for me in Sharepoint. However, when I modify the form in Infopath, I start to get errors whenever I select an item in the External Item Picker. As long as I don't use InfoPath to modify the form, it works fine in SharePoint.
I hope this answers your question.
Cheers!