Wednesday, 21 May 2014

Stupid Things i used to do in SharePoint


Reading URL from from picture or hyperlink filed Using SPFieldUrlValue.

var newsLink = item.GetValueByInternalName("NewsLink").ToString();
newsLink = newsLink.Split(new char[] { ',' })[0];
objNewsInfo.NewsLink = newsLink;

you have to read it using  objNewsInfo.NewsLink = new SPFieldUrlValue(newsLink).Url;


Tuesday, 20 May 2014

Understanding elevated privileges in Sharepoint

Understanding elevated privileges:

 If your code runs in a farm solution within the SharePoint context, your code is executed by an IIS worker process (w3wp.exe).This process runs using the application pool identity associated with the SharePoint web application. ASP.NET applications, including SharePoint, use impersonation by default. This means that the application pool identity will impersonate the current user to execute code. As a result, your code can only perform actions that are permitted by the permission set of the current user.

When you use SPSecurity.RunWithElevatedPrivileges to invoke code, the worker process reverts to executing code using the application pool identity, rather than the identity of the current user. The application pool identity has full-trust permissions on the SharePoint web application. Consequently, your code is no longer restricted by the permission set of the current user.


Running code with elevated privileges is only applicable to code that runs within the SharePoint context. Code that runs without a SharePoint context—for example, code within a timer job—runs under a process identity rather than a user identity. In these scenarios, elevating privileges would have no effect, because the process is not impersonating the identity of a user. 


Note:

 You code run with elevated privileges only in farm solution,
 sandbox solution is executed withing isolated worker process.



many developer make a big mistake (me as well) and use SPSite object and SPWeb object from current context (SPContext) in elevated method , if you do so the elevated code will revert to running under the identity of current user.




Use SPSecurity.RunWithElevatedPrivileges to run code using the system account:


var dolegaDPO = New SPSecurity.CodeToRunElevated(DoPrivilegedOperation); 

SPSecurity.RunWithElevatedPrivileges(dolegaLODPO ); 
private void DoPrivilegedOperation()
{
  //type your code here
}

OR 



SPSocurity.RunWithElovatodPrivilogos( delegate() {

 //type your code here


});






Friday, 3 January 2014

Using OAuth Providers with MVC 4 to Get Extra Data like Email Gender Bithdate


I follow step by step this  article
http://www.asp.net/mvc/tutorials/security/using-oauth-providers-with-mvc

but unfortunately i was not able to get Facebook email  , birthday and gender.

after heavy search i found out you can solve this  problem by adjusting Facebook App
permission that user will be asked for by default.

okay i will tell you how.

by default when you create an App on Facebook they will not return email and gender they just will return
 basic info (name , link ...)


if you want get  extra data like gender and birthdate you have to change the permission for the application



     after i have changed permissions in Facebook  i got the data i want from Facebook


 



Wednesday, 25 December 2013

Paging With SPDataSource - best paging ever


Paging With SPDataSource (Very Easy)


I give up from SPListItemCollectionPosition and how it works and you have to pay too much attention to last item id and .... even i wrote an article about it you can see it here (paging with splistitemcollectionposition) but not now.


Now i am gonna show you an easy way for paging in very simple steps using SPDataSource


Add Visual Web Part (Contracts)  and on code behind add

 protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);
            if (gvContracts != null)
            {
                gvContracts.PagerTemplate = null;
            }
        }

Add SPGridView

  <SharePoint:SPGridView ID="gvContracts" DataSourceID="dsContracts" GridLines="None"
               AutoGenerateColumns="false" 
                 AllowPaging="true" PageSize="2" OnPageIndexChanging="gvContracts_PageIndexChanging"
                    runat="server" ShowHeader="false" OnRowDataBound="gvContracts_RowDataBound">                         <PagerStyle CssClass="gvfooter" />
                    <Columns>
                        <%# Eval("Title")%>
                    </Columns>
                 <PagerSettings Mode="NumericFirstLast" Position="Bottom" />
                </SharePoint:SPGridView>

Add SPDataSource

 <SharePoint:SPDataSource runat="server" ID="dsContracts" DataSourceMode="List">  <SelectParameters>
   <asp:Parameter Name="WebUrl" DefaultValue="/Arabic//TendersAndContracts" />
                        <asp:Parameter Name="ListName" DefaultValue="Contracts" />
                    </SelectParameters>
                </SharePoint:SPDataSource>


run your application and see 

Notes:
you can use it in more complex situations i already did it before.
wothout this line of code (  gvContracts.PagerTemplate = null;)
the pager  will not shown.


this sample image show paging for public portal using this paging with complex search






You are welcomed for any question, just drop me comment.











Wednesday, 23 October 2013

Useful links

ASP.NET Web Pages (Razor) API Quick Reference

http://www.asp.net/web-pages/overview/more-resources/asp-net-web-pages-api-reference#Helpers




Download Companion Content for Microsoft Official Courses (MOC)

Download companion content for MOC from this page. Each course may have two related files: a zipped (.zip) file that contains content in .pdf and .xps formats, and an executable (.exe) file that contains other supplemental content.


  1. Core Solutions of Microsoft SharePoint Server 2013(20331B)
  2. Advanced Solutions of Microsoft SharePoint Server 2013 (20332B)
  3. Developing Microsoft SharePoint Server 2013 Core Solutions (20488B)
  4. Developing Microsoft SharePoint Server 2013 Advanced Solutions (20489B)
  5. Configuring and Administering Microsoft SharePoint 2010
  6. Configuring and Administering Microsoft SharePoint 2010
  7. Designing a Microsoft SharePoint 2010 Infrastructure
  8. Designing and Developing Microsoft SharePoint Server 2010 Applications

Wednesday, 19 June 2013

Common SharePoint 2010 Errors And Solutions



Common SharePoint 2010 Errors And Solutions

Error :
Restore-SPSite : Your backup is from a different version of Microsoft SharePoin
t Foundation and cannot be restored to a server running the current version. Th
e backup file should be restored to a server with version '1162887508.196608.17
694860.0' or later.
At line:1 char:15
+ Restore-SPSite <<<<  -Identity http://yousite  -Path D:\.....\....bak   -Force
    + CategoryInfo          : InvalidData: (Microsoft.Share...dletRestoreSite:
   SPCmdletRestoreSite) [Restore-SPSite], SPException
    + FullyQualifiedErrorId : Microsoft.SharePoint.PowerShell.SPCmdletRestoreS
   ite

Solution:
 make sure that your backup file is not  SQL Backup  it must be SharePoint Backup

_________________________________________________________________________________

Error:
Invalid file name.


The file name you specified could not be used.  It may be the name of an existing file or directory, or you may not have permission to access the file.<nativehr>0x81020030</nativehr><nativestack></nativestack>
((

Creating Custom List template and Custom List in Sharepoint 2010 )))




Solution:

make sure the item name (File Name) for List Definition has the same name for Name property in List Template node :
 <ListTemplate  Name="RegistrationTemplate" ... />

_________________________________________________________________________________


Error:
GetUserListSchema(): Failed to get the list schema XML for feature '...', template '...': hr=0x81072101.



Solution:

feature id in list instance is wrong it should be the feature id where list is defined.
so for example if you create ListInstance (Categories) from Custom List (out of the box)
you will get this XML.
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <ListInstance Title="Categories"
                OnQuickLaunch="TRUE"
                TemplateType="100"
                FeatureId="00bfea71-de22-43b2-a848-c05709900100"
                Url="Lists/Categories"
                RootWebOnly="TRUE"
                Description="">
 </ListInstance>

if for any reason you changed the  FeatureId="00bfea71-de22-43b2-a848-c05709900100" to 
 FeatureId="xxxx" you will get this error
GetUserListSchema(): Failed to get the list schema XML for feature '', template '100': hr=0x81072101.




Monday, 3 June 2013

SharePoint Error : Configure managed accounts - object reference not set to an instance of an object

When I hit the configure managed accounts link in central admin all I get is the error:

Error

SharePoint 2010 configure managed accounts Object reference not set to an instance of an object.


The Reasons for this according to the cases i faced are :
  1. Password mismatch between active directory and SharePoint ( You can use power shell command       Set-SPManagedAccount ) >>>>> powershell-script-to-change-managed-account-password
  2. There seemed to be multiple entries for the same account , this was confirmed by running power shell command Get-SPManagedAccount (Please make sure that no multiple entries for the same account ,in case there is multiple entries try to remove one of theme using Power Shell command Remove-SPManagedAccount  >>>>  Item has already been added. Key in dictionary: 'domain\account' Key being added: 'domain\account'


Please drop me a comment if you found any new reason and i will update the Post accordingly.