Solved

SPContext.Current.Web returns nothing (NullReferenceException)

Posted on 2014-09-11
5
1,592 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

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…
These days socially coordinated efforts have turned into a critical requirement for enterprises.
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …

756 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