How to read value of columns WorkflowTaskId and WorkflowListId from SharePoint Task List using C#?
-
08-02-2021 - |
Domanda
I am trying to read WorkflowTaskId
and WorkflowListId
fields from SharePoint Workflow Task List using SSOM C# but it says column doesn't exist
While I can see both columns are displayed with values in U2U CAML Builder.
Query:
SPQuery qry = new SPQuery();
qry.Query = Query = @"<Where><Eq><FieldRef Name='ID' /><Value Type='Counter'>3118</Value></Eq></Where>";
DataTable dt = new DataTable();
dt = spList.GetItems(qry).GetDataTable();
Code to read:
for(int i=0 ; i < dt.Rows.Count; i++)
{
DataRow row = dt.Rows[i];
string WorkflowListId = row["WorkflowListId"].ToString();
string WorkflowTaskId = row["WorkflowTaskId"].ToString();
}
Thanks in advance.
Soluzione
I suggest to use SPListItemCollection
class instead of DataTable
.
Please try:
using (SPSite site = new SPSite("YOUR SITE URL"))
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists.TryGetList("Workflow Tasks");
var query = new SPQuery
{
Query = String.Format("<Where><Eq><FieldRef Name='{0}' /><Value Type='Counter'>{1}</Value></Eq></Where>",
"ID", 3118)
};
var items = list.GetItems(query);
SPListItem item = items[0];
string WorkflowListId = item["WorkflowListId"].ToString();
string WorkflowTaskId = item["WorkflowTaskId"].ToString();
}
Then you can create DataTable
and populate row data from variables(WorkflowListId
, WorkflowTaskId
).
Also you can set ViewFields
property to your query.
This code is working for me:
using (SPSite site = new SPSite("YOUR SITE URL"))
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists.TryGetList("Workflow Tasks");
var query = new SPQuery
{
Query = String.Format("<Where><Eq><FieldRef Name='{0}' /><Value Type='Counter'>{1}</Value></Eq></Where>",
"ID", 3118)
};
query.ViewFields = string.Concat(
"<FieldRef Name='Title' />",
"<FieldRef Name='WorkflowListId' />",
"<FieldRef Name='WorkflowTaskId' />");
var items = list.GetItems(query);
DataTable dt = new DataTable();
dt = items.GetDataTable();
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow row = dt.Rows[i];
string WorkflowListId = row["WorkflowListId"].ToString();
Console.WriteLine(WorkflowListId);
}
}
Altri suggerimenti
We can add ViewFields in SPQuery to solve this issue. The following code for your reference.
using (SPSite site = new SPSite("http://sp2013/sites/team"))
{
using (SPWeb web = site.OpenWeb())
{
SPList spList = web.Lists.TryGetList("Workflow Tasks");
SPQuery qry = new SPQuery();
qry.Query = @"<Where><Eq><FieldRef Name='ID' /><Value Type='Counter'>3118</Value></Eq></Where>";
qry.ViewFields = string.Concat(
"<FieldRef Name='Title' />",
"<FieldRef Name='WorkflowListId' />",
"<FieldRef Name='WorkflowTaskId' />");
DataTable dt = new DataTable();
dt = spList.GetItems(qry).GetDataTable();
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow row = dt.Rows[i];
string WorkflowListId = row["WorkflowListId"].ToString();
string WorkflowTaskId = row["WorkflowTaskId"].ToString();
}
}
}
If you want to get list item by ID, I suggest you use the code below to achieve it.
using (SPSite site = new SPSite("http://sp2013/sites/team"))
{
using (SPWeb web = site.OpenWeb())
{
SPList spList = web.Lists.TryGetList("Workflow Tasks");
SPQuery qry = new SPQuery();
SPListItem item = spList.GetItemById(3118);
string WorkflowListId = item["WorkflowListId"].ToString();
string WorkflowTaskId = item["WorkflowTaskId"].ToString();
}
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange