In one of your project we have to attach "Sharepoint approval workflow" to list when feature is activated on the web.
Prerequisite :
{
web.AllowUnsafeUpdates = true;
string workflowAssocName = string.Format("{0} - Sharepoint Approval", listName);
SPWorkflowTemplate workflowTemplate = web.WorkflowTemplates.GetTemplateByName("Approval - SharePoint 2010",
System.Globalization.CultureInfo.CurrentCulture);
SPList myList = web.Lists[listName];
// Try to get workflow history and task list
SPList historyList = web.Lists["Workflow History"];
SPList taskList = web.Lists["Tasks"];
// Create workflow association
SPWorkflowAssociation workflowAssociation = SPWorkflowAssociation.CreateListAssociation(
workflowTemplate, workflowAssocName, taskList, historyList);
// Set workflow parameters
workflowAssociation.AllowManual = false;
workflowAssociation.AutoStartCreate = true;
workflowAssociation.AutoStartChange = false;
workflowAssociation.ContentTypePushDown = false;
// The AssociationData property represents for the settings that user see in 2nd screen when creating workflow in SharePoint UI
var associationDataXml = XElement.Parse(workflowAssociation.AssociationData);
// Update modifed xml segment back to WorkflowAssociation object
workflowAssociation.AssociationData = Add_Association_Data(web.ParentWeb, associationDataXml);
// Add workflow association to my list
myList.WorkflowAssociations.Add(workflowAssociation);
// Enable workflow
workflowAssociation.Enabled = true;
myList.Update();
web.Update();
web.AllowUnsafeUpdates = false;
}
private String Add_Association_Data(SPWeb oWeb, XElement associationDataXml)
{
String sDate = String.Empty;
XNamespace dNamespace = @"http://schemas.microsoft.com/office/infopath/2009/WSSList/dataFields";
XNamespace pcNamespace = @"http://schemas.microsoft.com/office/infopath/2007/PartnerControls";
XNamespace dfsNamespace = @"http://schemas.microsoft.com/office/infopath/2003/dataFormSolution";
XNamespace MyNamespace = @"http://schemas.microsoft.com/office/infopath/2003/myXSD";
XNamespace XsiNamespace = @"http://www.w3.org/2001/XMLSchema-instance";
XElement propertiesWrapper = associationDataXml.Element(dfsNamespace + "dataFields").Element(dNamespace + "SharePointListItem_RW");
propertiesWrapper.SetElementValue(dNamespace + WORKFLOW_SETTINGS_CANCELONREJECTION, true);
propertiesWrapper.SetElementValue(dNamespace + WORKFLOW_SETTINGS_CANCELONCHANGE, true);
propertiesWrapper.SetElementValue(dNamespace + WORKFLOW_SETTINGS_APPROVEWHENCOMPLETE, true);
propertiesWrapper.SetElementValue(dNamespace + WORKFLOW_SETTINGS_ENABLECONTENTAPPROVAL, true);
propertiesWrapper.SetElementValue(dNamespace + WORKFLOW_SETTINGS_EXPANDGROUPS, false);
// Reviewers is Approvers in UI
XElement xAssignement
= associationDataXml.Element(dfsNamespace + "dataFields").Element(dNamespace + "SharePointListItem_RW").
Element(dNamespace + "Approvers").Element(dNamespace + "Assignment");
string ApprovalGroup = "Managers";
xAssignement.Element(dNamespace + "Assignee").Add(
new XElement(pcNamespace + "Person",
new XElement(pcNamespace + "DisplayName", ApprovalGroup),
new XElement(pcNamespace + "AccountId", ApprovalGroup),
new XElement(pcNamespace + "AccountType", "SharePointGroup")
)
);
return associationDataXml.ToString();
}
Hope this will work for you also.............
Prerequisite :
- SharePoint 2007 Workflows activated on site collection level
- Task list of content type Task, for storing task created to users.
{
web.AllowUnsafeUpdates = true;
string workflowAssocName = string.Format("{0} - Sharepoint Approval", listName);
SPWorkflowTemplate workflowTemplate = web.WorkflowTemplates.GetTemplateByName("Approval - SharePoint 2010",
System.Globalization.CultureInfo.CurrentCulture);
SPList myList = web.Lists[listName];
// Try to get workflow history and task list
SPList historyList = web.Lists["Workflow History"];
SPList taskList = web.Lists["Tasks"];
// Create workflow association
SPWorkflowAssociation workflowAssociation = SPWorkflowAssociation.CreateListAssociation(
workflowTemplate, workflowAssocName, taskList, historyList);
// Set workflow parameters
workflowAssociation.AllowManual = false;
workflowAssociation.AutoStartCreate = true;
workflowAssociation.AutoStartChange = false;
workflowAssociation.ContentTypePushDown = false;
// The AssociationData property represents for the settings that user see in 2nd screen when creating workflow in SharePoint UI
var associationDataXml = XElement.Parse(workflowAssociation.AssociationData);
// Update modifed xml segment back to WorkflowAssociation object
workflowAssociation.AssociationData = Add_Association_Data(web.ParentWeb, associationDataXml);
// Add workflow association to my list
myList.WorkflowAssociations.Add(workflowAssociation);
// Enable workflow
workflowAssociation.Enabled = true;
myList.Update();
web.Update();
web.AllowUnsafeUpdates = false;
}
private String Add_Association_Data(SPWeb oWeb, XElement associationDataXml)
{
String sDate = String.Empty;
XNamespace dNamespace = @"http://schemas.microsoft.com/office/infopath/2009/WSSList/dataFields";
XNamespace pcNamespace = @"http://schemas.microsoft.com/office/infopath/2007/PartnerControls";
XNamespace dfsNamespace = @"http://schemas.microsoft.com/office/infopath/2003/dataFormSolution";
XNamespace MyNamespace = @"http://schemas.microsoft.com/office/infopath/2003/myXSD";
XNamespace XsiNamespace = @"http://www.w3.org/2001/XMLSchema-instance";
XElement propertiesWrapper = associationDataXml.Element(dfsNamespace + "dataFields").Element(dNamespace + "SharePointListItem_RW");
propertiesWrapper.SetElementValue(dNamespace + WORKFLOW_SETTINGS_CANCELONREJECTION, true);
propertiesWrapper.SetElementValue(dNamespace + WORKFLOW_SETTINGS_CANCELONCHANGE, true);
propertiesWrapper.SetElementValue(dNamespace + WORKFLOW_SETTINGS_APPROVEWHENCOMPLETE, true);
propertiesWrapper.SetElementValue(dNamespace + WORKFLOW_SETTINGS_ENABLECONTENTAPPROVAL, true);
propertiesWrapper.SetElementValue(dNamespace + WORKFLOW_SETTINGS_EXPANDGROUPS, false);
// Reviewers is Approvers in UI
XElement xAssignement
= associationDataXml.Element(dfsNamespace + "dataFields").Element(dNamespace + "SharePointListItem_RW").
Element(dNamespace + "Approvers").Element(dNamespace + "Assignment");
string ApprovalGroup = "Managers";
xAssignement.Element(dNamespace + "Assignee").Add(
new XElement(pcNamespace + "Person",
new XElement(pcNamespace + "DisplayName", ApprovalGroup),
new XElement(pcNamespace + "AccountId", ApprovalGroup),
new XElement(pcNamespace + "AccountType", "SharePointGroup")
)
);
return associationDataXml.ToString();
}
Hope this will work for you also.............
No comments:
Post a Comment