Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

SPContext.Current.Web returns nothing (NullReferenceException)

Posted on 2014-09-11
5
Medium Priority
?
1,727 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 2000 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

Veeam and MySQL: How to Perform Backup & Recovery

MySQL and the MariaDB variant are among the most used databases in Linux environments, and many critical applications support their data on them. Watch this recorded webinar to find out how Veeam Backup & Replication allows you to get consistent backups of MySQL databases.

Question has a verified solution.

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

Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
Performance in games development is paramount: every microsecond counts to be able to do everything in less than 33ms (aiming at 16ms). C# foreach statement is one of the worst performance killers, and here I explain why.
Please read the paragraph below before following the instructions in the video — there are important caveats in the paragraph that I did not mention in the video. If your PaperPort 12 or PaperPort 14 is failing to start, or crashing, or hanging, …
Loops Section Overview
Suggested Courses

886 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