var items = SP.ListOperation.Selection.getSelectedItems(ctx);
Tag: Sharepoint
Secure application pages in Sharepoint applications
We have to secure them manually by code, one way is to check in Page_Load and disable controls if necessary.
protected void Page_Load(object sender, EventArgs e)
{
if (!UserIsAuthorized)
{
//hide the form
//show an error message
}
}
Make sure to check if user is authorized in critical methods.
To check if user is authorized:
protected UserIsAuthorized
{
get
{
SPUser user = SPContext.Current.Web.CurrentUser;
if(user==null) return false;//anonymous/public users
//check if user belongs to authorized groups
string[] validGroups = new string[] { “Group A”, “Group B };
SPGroupCollection groups = user.Groups;
foreach (SPGroup group in groups)
if (validGroups.Contains(group.Name))
return true;
//check if user is System Account
if (user.ID == SPContext.Current.Web.Site.SystemAccount.ID)
return true;
return false;//user is not authorized;
}
}
When migrating data between Sharepoint farms, use impersonation
Calculated field with hyper link
UpdatePanel in Sharepoint
To get it to work, you have to jump through hoops by downloading the SharePoint guidance library thingy as some source code and build it yourself, then deploy it to the GAC of your environment, then add reference to Microsoft.Practice.SPG.AjaxSupport.dll, then use a SafeScriptManager in the usercontrol of your SharePoint webpart.
Maybe it’s better to build the thing using pure HTML and javascript?
Delete workflow auto generated column
Use SharePoint Manager to get the column’s GUID
Then write a console app to remove this column. Multiple column of the same name will break code.
Cannot get workflow to trigger event receiver
Another way is to actually update the list item inside the workflow, usually assigning the same value to the field will work and results in no change to the list item.
Please note that workflow status is set asynchronously, meaning if you make the workflow trigger the event receiver and inside event receiver you read the workflow status, the workflow status is not guaranteed to be correct at the time as the update happens asynchronously.
The best way to read the eventual workflow status is to write it to a list item’s field and read from there in the event receiver.
Allow ASP.NET form to be used after downloading a file in SharePoint webpart
runat=”server” Text=”Export”
OnClick=”lbExport_Click”
OnClientClick=”_spFormOnSubmitCalled=false;_spSuppressFormOnSubmitWrapper=true;”/>
Solution:
Add this code to the .ascx file
<script type=”text/javascript”>
function setFormSubmitToFalse() {
setTimeout(function () { _spFormOnSubmitCalled = false; }, 3000);
return true;
}
</script>
Then, for the download button, add the code to call this function after user clicks it
OnClientClick=”setFormSubmitToFalse”
Another way is to refresh the page on client after certain time
onclientclick="timedRefresh(2000)" then in your html.. <script type="text/JavaScript"> <!-- function timedRefresh(timeoutPeriod) { setTimeout("location.reload(true);",timeoutPeriod); } // -->
SharePoint timer service
EventReceiver cheat sheet
List | BeforeProperties | AfterProperties | properties.ListItem |
ItemAdding | No value | New value | Null |
ItemAdded | No value | New value | New value |
ItemUpdating | No value | Changed value | Original value |
ItemUpdated | No value | Changed value | Changed value |
ItemDeleting | No value | No value | Original value |
ItemDeleted | No value | No value | Null |
Library | BeforeProperties | AfterProperties | properties.ListItem |
ItemAdding | No value | No value | Null |
ItemAdded | No value | No value | New value |
ItemUpdating | Original value | Changed value | Original value |
ItemUpdated | Original value | Changed value | Changed value |
ItemDeleting | No value | No value | Original value |
ItemDeleted | No value | No value | Null |