Solved

SPContext.Current.Web returns nothing (NullReferenceException)

Posted on 2014-09-11
5
1,575 Views
Last Modified: 2014-09-17
Dear experts.
I am trying to write a workflow in C# in VS 2013 for Sharepoint 2010. I never did it before nor am I a programmer, so I need to kindly ask for a bigger explanation.
The workflow is running each time the new item is created in the list. I am trying to retrieve an item from some other list which exists in the same site. The web page I am following is following:
http://msdn.microsoft.com/en-us/library/office/ms456030(v=office.14).aspx

It is pretty clear from the referenced MSDN site, how you retrieve such items from lists. However because I am missing some really basic programming knowledge I stopped at the first most important line:
SPWeb web = SPContext.Current.Web;

Open in new window

While debugging NullReferenceException has been thrown. How am I able to use aforementioned statement successfully, so the object web won't be empty (of value null)? Why is the object web empty?
Please don't hesitate to ask if you need more information. I don't know what information is helpful for solving my issue.
0
Comment
Question by:scientiasro
  • 3
  • 2
5 Comments
 
LVL 12

Expert Comment

by:Ramkisan Jagtap
ID: 40318529
I am not sure where you are trying to get your SPcontext,
 if it is coming null with
SPWeb currentWeb = SPContext.Current.Web;
Please try to get it with
SPWeb currentWeb =new SPWeb("your web URL");

If you are trying to get it in the workflow code then it will definitely be null as workflow runs in different thread to current context. In this case you can use WorkflowContext.

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.workflowactions.workflowcontext_properties.aspx

Or you can get the current web as stated above with using web URL.

Hope this will help you.
0
 

Author Comment

by:scientiasro
ID: 40318836
Hello Ramkisan.
I don't know what is helpful. Therefore I encouraged everybody to ask. So your question would be "where did I try to get SPcontext".
I tried to get it from within the workflow, so I guess you are right and it will be null because of the reason it is different thread. Could you please post an example how can I use it within a code in respect to msdn site I've posted, so I am able to use the code they suggest for retrieving items from a list? It would really help me because I am not a programmer.
I've tried this without success:
WorkflowContext wflowcont = new WorkflowContext();
string weburl = wflowcont.CurrentWebUrl;
SPWeb currentWeb =new SPWeb(weburl);

Open in new window

Visual Studio says "'Microsoft.Sharepoint.SPWeb' does not contain a constructor that takes 1 arguments"

Thank you.
Michal
0
 
LVL 12

Assisted Solution

by:Ramkisan Jagtap
Ramkisan Jagtap earned 500 total points
ID: 40318874
Hi
Do you have work flow properties  in your code?

Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties WorkflowProperties =new Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties();

if yes, you can access all the properties you want

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.workflow.spworkflowactivationproperties_members.aspx
0
 

Accepted Solution

by:
scientiasro earned 0 total points
ID: 40319139
Hi,
yes that was the answer :-) I will paste the whole application of the solution.

At the beginning of the .cs file should be included references:
using Microsoft.SharePoint.Workflow;
using Microsoft.SharePoint.WorkflowActions;

Open in new window

Then further in the code:
public SPWorkflowActivationProperties workflowProperties = new SPWorkflowActivationProperties();

Open in new window

The code is running when the workflow is activated:
private void onWorkflowActivated1_Invoked(object sender, ExternalDataEventArgs e)
        {
         // workflowProperties.SiteUrl and .WebId returns not null value like SPContext.Current.Web
         using (SPSite site = new SPSite(workflowProperties.SiteUrl))
            {
                using (SPWeb web = site.OpenWeb(workflowProperties.WebId))
                {
                  // place your code here
                }
            }
        }

Open in new window

The code inside aforementioned snippet can be used finally with the help of MSDN web pages where they are using "SPWeb web = SPContext.Current.Web;".
For example it can be used for retrieving lists on the same site as the workflow runs in: http://msdn.microsoft.com/en-us/library/office/ms456030(v=office.14).aspx

Thank you for helping to sorted it out.
Michal
0
 

Author Closing Comment

by:scientiasro
ID: 40327532
My solution is more complete.
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Microsoft SharePoint Foundation 2010 and Microsoft SharePoint Server 2010 do not offer the option to configure the location of the SharePoint diagnostic trace log files during installation.  This can, however, be configured through Central Administr…
Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
Two types of users will appreciate AOMEI Backupper Pro: 1 - Those with PCIe drives (and haven't found cloning software that works on them). 2 - Those who want a fast clone of their boot drive (no re-boots needed) and it can clone your drive wh…
This video shows how to quickly and easily add an email signature for all users on Exchange 2016. The resulting signature is applied on a server level by Exchange Online. The email signature template has been downloaded from: www.mail-signatures…

803 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question