Code Sample - File Watcher Initiated Workflow
- Last UpdatedSep 11, 2024
- 12 minute read
The below is the Aspx file for the File Watcher initiated WorkFlow
<%@ Page Language="C#" AutoEventWireup="true" Inherits="Skelta.Repository.CodeBehind.NewFileWatcherWorkflow" %>
<%@ Register Assembly="Skelta.Forms.Web" Namespace="Skelta.Forms.Web" TagPrefix="cc1" %>
<%@ Register Assembly="RadAjax.Net2" Namespace="Telerik.WebControls" TagPrefix="radAjax" %>
<%@ Register Assembly="RadInput.Net2" Namespace="Telerik.WebControls" TagPrefix="radInput" %>
<%@ Register Assembly="RadCombobox.Net2" Namespace="Telerik.WebControls" TagPrefix="radC" %>
<%@ Register Assembly="RadWindow.Net2" Namespace="Telerik.WebControls" TagPrefix="radW" %>
<%@ Register Assembly="RadCalendar.Net2" Namespace="Telerik.WebControls" TagPrefix="radCln" %>
<%=_docType %>
<link href="<%=cssPath2%>Common/StyleSheet/Global.css" rel="stylesheet" type="text/css" />
<html>
<head id="Head1">
<title>
<%=rs.GetString("ec_filewatcher_Workflow")%>
</title>
<script language="javascript" type="text/javascript">
function OpenRadWindowOverDue()
{
var WorkflowName = document.getElementById("<%=hidWorkflow.ClientID%>").value;
var ApplicationName = document.getElementById("<%=hidApplication.ClientID%>").value;
var oWindow1 = radopen("../EventProvider/BAMOverDueLookup.aspx?ApplicationName=" +ApplicationName+"&WorkflowName=" + WorkflowName, null);
oWindow1.SetModal(true);
oWindow1.SetSize(465,408);
oWindow1.IconUrl="..\images\Icon-ListExplorer.png";
oWindow1.ClientCallBackFunction = fillOverDue;
}
function OpenRadWindowKpi()
{
var WorkflowName = document.getElementById("<%=hidWorkflow.ClientID%>").value;
var ApplicationName = document.getElementById("<%=hidApplication.ClientID%>").value;
var oWindow1 = radopen("../EventProvider/BAMKpiLookup.aspx?ApplicationName=" +ApplicationName+"&WorkflowName=" + WorkflowName, null);
oWindow1.SetModal(true);
oWindow1.SetSize(455,400);
oWindow1.IconUrl="..\images\Icon-ListExplorer.png";
oWindow1.ClientCallBackFunction = fillKpi;
}
function fillOverDue(radWindow, returnlistid)
{
var hidSlots = document.getElementById("<%=hidSlots.ClientID%>");
hidSlots.value = returnlistid;
}
function fillKpi(radWindow, returnlistid)
{
var hidKpis = document.getElementById("<%=hidKpis.ClientID%>");
hidKpis.value = returnlistid;
}
function ReloadPage()
{
}
function SizeToFit()
{
var oWnd = GetRadWindow();
oWnd.SetSize(700,580);
}
function GetRadWindow()
{
var oWindow = null;
oWindow = window.frameElement.radWindow;
return oWindow;
}
</script>
</head>
<body style="margin: 0; left: 0; overflow: hidden; height: 100%" onload="ReloadPage()">
<form id="form1" runat="server">
<div id="ParentDiv">
<br />
<asp:Panel ID="Panel1" runat="server" Height="100%">
<div id="HeaderDiv">
<table width="94%" align="center" border="0">
<tr>
<td colspan="3">
<img src="<%=cssPath2%>/Repository/ListControl/images/icons-ribbon/icon-FileWatcher-Workflow.png"
hspace="4" align="absmiddle" />
<span class="pagetitle">
<%=rs.GetString("ec_filewatcher_NewWorkflow", true)%>
</span>
<br />
<span class="description" colspan="2">
<%= rs.GetString("ec_filewatcher_desc_new", true)%>
</span>
</td>
</tr>
</table>
</div>
<br />
<div id="BodyDiv" style="overflow: hidden;">
<table width="94%" cellpadding="7" cellspacing="1" border="0" class="tablebg" width="94%"
align="center">
<tr>
<td class="lefttdbg" width="50%">
<span class="subtitle">
<%=rs.GetString("ec_filewatcher_PlcTitle", true)%>
<img runat="server" id="imgMandatory" src="<%$ReplaceTemplateExpn:Skeltaforms/Images/mandatoryicon.PNG%>"
visible="true" hspace="2" align="top" />
<asp:RequiredFieldValidator ID="ReqSiteUrl" runat="server" ControlToValidate="WorkflowNameInput"
Display="Dynamic" Enabled="true">
<img id="imgsiteUrlerror" alt="" runat="server" src="<%$ ReplaceTemplateExpn:Skeltaforms/Images/erroricon.png%>"
hspace="2" align="top" visible="true" />
</asp:RequiredFieldValidator>
<asp:CustomValidator ID="WorkflowNameValidator" runat="server" ControlToValidate="WorkflowNameInput"
SetFocusOnError="true" Display="Dynamic" ValidateEmptyText="true" OnServerValidate="WorkflowNameValidator_ServerValidate"
Enabled="true">
<img id="imgCustom" alt="" runat="server" src="<%$ ReplaceTemplateExpn:Skeltaforms/Images/erroricon.png%>"
hspace="2" align="top" visible="true" />
</asp:CustomValidator>
</span>
<br />
<span class="description">
<%=rs.GetString("ec_filewatcher_EnterWfName", true)%>
</span>
</td>
<td class="righttdbg" width="50%">
<radInput:RadTextBox ID="WorkflowNameInput" runat="server" Skin="SkeltaInput" CausesValidation="true"
MaxLength="100" Width="50%" RadControlsDir="<%$ReplaceTemplateExpn:telerik/radcontrols/%>">
</radInput:RadTextBox>
</td>
</tr>
<tr>
<td class="lefttdbg" width="50%">
<span class="subtitle">
<%=rs.GetString("ec_filewatcher_PlcDesc", true)%>
</span>
<br />
<span class="description">
<%=rs.GetString("ec_filewatcher_EnterWfDesc", true)%>
</span>
</td>
<td class="righttdbg" width="50%">
<radInput:RadTextBox ID="WorkflowDescriptionInput" Skin="SkeltaInput" runat="server"
TextMode="MultiLine" Width="99%" Height="55px" RadControlsDir="<%$ReplaceTemplateExpn:telerik/radcontrols/%>">
</radInput:RadTextBox>
</td>
</tr>
</table>
<table width="94%" align="center" border="0">
<tr>
<td width="50%">
<img src="<%=imgPath2%>/icon-associate-events.png" hspace="4" align="absmiddle" /><span
class="pagetitle">
<%=rs.GetString("ec_filewatcher_Associate", true)%>
</span>
<br />
<span class="description" colspan="2">
<%= rs.GetString("ec_filewatcher_new_desc", true)%>
</td>
</tr>
</table>
<radW:RadWindowManager runat="server" Behavior="Default" SingleNonMinimizedWindow="true"
RadControlsDir="<%$ReplaceTemplateExpn:telerik/radcontrols/%>" ID="RadWindowManager1"
Skin="SkeltaWindow" VisibleStatusbar="true" IconUrl="..\images\Icon-ListExplorer.png">
</radW:RadWindowManager>
<table width="94%" cellpadding="7" cellspacing="1" border="0" class="tablebg" width="94%"
align="center">
<tr>
<td class="lefttdbg" width="50%">
<span class="subtitle">
<%=rs.GetString("ec_filewatcher_Comboeventtype",true )%>
</span>
<img id="imgType" alt="" runat="server" src="<%$ ReplaceTemplateExpn:Skeltaforms/Images/erroricon.png%>"
hspace="2" align="top" visible="false" />
</td>
<td class="righttdbg" width="50%">
<asp:DropDownList ID="cmbEventType" runat="server" AutoPostBack="false" CssClass="inputselect"
Width="200px">
</asp:DropDownList>
</td>
</tr>
<tr>
<td class="lefttdbg" width="50%">
<span class="subtitle">
<%=rs.GetString("ec_filewatcher_Comboeventfolder")%>
</span>
<img id="imgFolder" alt="" runat="server" src="<%$ ReplaceTemplateExpn:Skeltaforms/Images/erroricon.png%>"
hspace="2" align="top" visible="false" />
</td>
<td class="righttdbg" width="50%">
<radC:RadComboBox ID="cmbFolderList" runat="server" Skin="SkeltaCombobox" RadControlsDir="<%$ReplaceTemplateExpn:telerik/radcontrols/%>"
MaxLength="100" DropDownWidth="283px" Height="100px" NoWrap="false" AutoPostBack="false">
</radC:RadComboBox>
</td>
</tr>
<tr>
<td class="lefttdbg" width="50%">
<span class="subtitle">
<%=rs.GetString("ec_filewatcher_filefullpath")%>
</span>
<br />
<span class="description">
<%=rs.GetString("ec_filewatcher_Pattern")%>
</span>
</td>
<td class="righttdbg" width="50%">
<asp:TextBox ID="txtFilePattern" runat="server" CssClass="inputtext" Width="50%"></asp:TextBox>
<br />
<span class="description"></span>
</td>
</tr>
<tr id="TrSharePointEventsNote" runat="server">
<td class="lefttdbg" colspan="3">
<img id="Img1" runat="server" src="<%$ ReplaceTemplateExpn:/Common/Images/icon-note.png%>"
align="absmiddle">
<span class="note">
<%=rs.GetString("_NewWFForm_EvtNoteTitle", true)%>
<%=rs.GetString("_NewWFForm_EvtNotes", true)%>
</span>
</td>
</tr>
<input type="hidden" id="hidApplication" runat="server" />
<input type="hidden" id="hidSlots" runat="server" />
<input type="hidden" id="hidWorkflow" runat="server" />
<input type="hidden" id="hidKpis" runat="server" />
</table>
</div>
<div id="FooterDiv">
<table width="98%" border="0" cellpadding="3">
<tr>
<td colspan="1" align="right" valign="top">
<asp:Button ID="SaveButton" runat="server" CssClass="inputbutton" />
</td>
</tr>
<tr>
<td height="50px">
</td>
</tr>
</table>
</div>
</asp:Panel>
</div>
</form>
</body>
</html>
<script type="text/javascript">
function AddEventHandler(elementObject, eventName, functionObject)
{
if(document.addEventListener)
elementObject.addEventListener(eventName, functionObject, false);
else
if(document.attachEvent)
elementObject.attachEvent("on" + eventName, functionObject);
}
AddEventHandler(window,"resize",resizefunction);
AddEventHandler(window,"load",resizefunction);
function resizefunction()
{
var bodydiv = document.getElementById('BodyDiv');
var headerdiv = document.getElementById('HeaderDiv');
var footerdiv = document.getElementById('FooterDiv');
var parentdiv = document.getElementById('ParentDiv');
if (parentdiv.offsetParent==document.body)
document.body.style.height = '100%';
var parentdivheight = parentdiv.offsetParent.offsetHeight;
parentdiv.style.height = parentdivheight ;
try{bodydiv.style.height = parentdivheight - headerdiv.offsetHeight - footerdiv.offsetHeight ;}catch(e){}//headerdiv.offsetHeight -
bodydiv.style.width = '100px';
bodydiv.style.width = parentdiv.clientWidth;
bodydiv.style.overflow = 'auto';
parentdiv.style.overflow = 'hidden';
}
</script>
The below is the code file for the File watcher initiated WF aspx file.
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Skelta.Forms.Core.Controls;
using Skelta.Repository.Web.List;
using Skelta.Repository.List;
using Skelta.Repository.List.Action;
using Skelta.Core;
using Workflow.NET;
using Telerik.WebControls;
using System.Collections.Generic;
using Workflow.NET.PropertyTypes;
using Skelta.Events;
using Skelta.Events.Interfaces;
using System.Text.RegularExpressions;
using Workflow.NET.Interfaces;
using Workflow.NET.Storage;
using System.Text;
using System.Xml;
using System.Xml.Schema;
using System.IO;
using Skelta.Repository.List.EventProvider;
using Skelta.Repository.Security;
public partial class NewWorkflowForm : System.Web.UI.Page
{
protected string TemplateDirectory;
protected SkeltaResourceSet rs = new SkeltaResourceSetManager().GlobalResourceSet;
protected string _docType = string.Empty;
protected string eventsComboId = string.Empty;
protected Workflow.NET.Config objConfig = new Config();
int _ItemTemplateWidth = 0;
string alertMessage = string.Empty;
protected Guid eventBindId;
protected Skelta.Repository.List.ListDefinition associationList;
protected Skelta.Repository.List.ListItem associationItem;
string _applicationName = string.Empty;
string workflowName = string.Empty;
string _LoggedInUser = string.Empty;
string versionStamp = string.Empty;
string _ListName = string.Empty;
string effectiveFromDate = string.Empty;
string effectiveToDate = string.Empty;
Guid parentItemId = Guid.Empty;
Guid listGuid = Guid.Empty;
protected Guid stPort;
string listName = string.Empty;
const string workflowListName = "Workflow";
const string workflowAssociationListName = "Event Associations";
public string error;
string EventType;
string FullPath = string.Empty;
protected Skelta.Repository.List.ListItemCollection licollection = null;
protected Skelta.Repository.List.ListDefinition listdefinition = null;
Skelta.Repository.List.ListItemCollection _menuItems;
ListDefinition _List;
ListDefinition List;
Hashtable columnNames = new Hashtable();
//Themes Implementation changes
protected string cssPath1 = "";
protected string cssPath2 = "";
protected string imgPath1 = "";
protected string imgPath2 = "";
protected object styleUrl1 = Workflow.NET.TemplateExpressionBuilder.GetUrl("SkeltaForms/StyleSheet");
protected object styleUrl2 = Workflow.NET.TemplateExpressionBuilder.GetUrl("Repository/Site/styles");
protected object imgUrl=Workflow.NET.TemplateExpressionBuilder.GetUrl("SkeltaForms/Images");
public enum FileEventType
{
Created = 0,
Changed = 1,
Renamed = 2,
Deleted = 3
}
protected void Page_Load(object sender, EventArgs e)
{
if ((this.Request.Browser.Browser.ToString().ToLowerInvariant() == "firefox") && (this.Request.Browser.Version.ToString() == "1.5"))
_docType = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">";
else
_docType = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">";
//Themes Implementation changes
cssPath1 = styleUrl1.ToString();
cssPath2 = styleUrl2.ToString();
imgPath1=imgUrl.ToString();
imgPath2 = imgUrl.ToString();
WorkflowNameInput.EmptyMessage = rs.GetString("_NewWFForm_WorkflowNameInput_EmptyMsg");
SaveButton.Text = rs.GetString("_NewWFForm_SaveButton_Text");
Guid itemGuid = Guid.Empty;
ListPageParameters listParams = new ListPageParameters();
listParams.ResolveCurrentUri();
_LoggedInUser = listParams.LoggedInUserId;
_ListName = listParams.ListName;
_applicationName = listParams.ApplicationName;
LoadEventTypes();
cmbEventType.Width = 100;
cmbFolderList.Width = 300;
if (!this.Page.IsPostBack)
{
listGuid = listParams.ListId;
parentItemId = listParams.ParentItemId;
_applicationName = listParams.ApplicationName;
versionStamp = listParams.VersionStamp;
ViewState["itemGuid"] = itemGuid;
ViewState["listGuid"] = listGuid;
ViewState["parentItemId"] = parentItemId;
ViewState["ApplicationName"] = _applicationName;
InitializeComponent();
// LoadPorts();
List = new ListDefinition(new Skelta.Core.ApplicationObject(_applicationName), "FileWatcher List");
LoadSecurityEnblePorts();
}
else
{
itemGuid = (Guid)ViewState["itemGuid"];
listGuid = (Guid)ViewState["listGuid"];
parentItemId = (Guid)ViewState["parentItemId"];
_applicationName = ViewState["ApplicationName"].ToString();
}
_List = new ListDefinition(new Skelta.Core.ApplicationObject(_applicationName), listGuid);
workflowName = Request["WorkflowName"];
workflowName = (workflowName == null) ? "" : workflowName.ToString();
SaveButton.Click += new EventHandler(SaveButton_Click);
}
private void LoadEventTypes()
{
string EventTypesSelectedValue = cmbEventType.SelectedValue;
this.cmbEventType.DataSource = Enum.GetNames(typeof(FileEventType));
this.cmbEventType.DataBind();
cmbEventType.Items.Insert(0, "--Select--");
if (EventTypesSelectedValue != null && EventTypesSelectedValue != string.Empty)
this.cmbEventType.SelectedValue = EventTypesSelectedValue;
}
void Alert(string message)
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "alertwindow", "<script>alert('" + message.Replace("'", "\\'") + "');</script>");
}
private void InitializeComponent()
{
try
{
string applicationName = "";
string workflowname = "";
Guid ListItemId = Guid.Empty;
ListPageParameters listParams = new ListPageParameters();
listParams.ResolveCurrentUri();
applicationName = listParams.ApplicationName;
if (listParams.ListName.ToLower() == "workflow")
ListItemId = listParams.ListItemId;
ListDataHandler ObjListDataHandler = new ListDataHandler(listParams.ApplicationName, "Workflow");
Skelta.Repository.List.ListItem wfitem;
ViewState["ApplicationName"] = applicationName;
ViewState["UserId"] = listParams.LoggedInUserId;
objConfig = new Config(ViewState["ApplicationName"].ToString().Trim());
}
catch (Exception)
{
}
}
protected string GetLangSpecText(string keyName)
{
SkeltaResourceSetManager resManager = new SkeltaResourceSetManager();
return resManager.GlobalResourceSet.GetString(keyName);
}
protected void WorkflowNameValidator_ServerValidate(object source, ServerValidateEventArgs args)
{
WorkflowNameValidator.ErrorMessage = string.Empty;
if (WorkflowNameInput.Text == string.Empty)
{
args.IsValid = false;
WorkflowNameValidator.ErrorMessage = rs.GetString("_NewWFForm_WorkflowNameInput_EmptyMsg");
}
else
{
string patternMatch = @"[#~&+\\""'<>|]";
Regex reg = new Regex(patternMatch, RegexOptions.CultureInvariant);
if (Regex.IsMatch(args.Value, patternMatch))
{
args.IsValid = false;
WorkflowNameValidator.ErrorMessage = GetLangSpecText("ec_filewatcher_Workflow_Name");
}
else
{
args.IsValid = true;
}
}
}
/// <summary>
/// Method to load filewatcher ports
/// </summary>
private void LoadPorts()
{
Dictionary<string, IEventPort> eventPorts = GetAllEventPorts(_applicationName, "FileWatcher");
Telerik.WebControls.RadComboBoxItem lstIt = new Telerik.WebControls.RadComboBoxItem();
lstIt.Text = GetLangSpecText("ec_filewatcher_option");
lstIt.Value = "0";
cmbFolderList.Items.Add(lstIt);
foreach (string portGuid in eventPorts.Keys)
{
Telerik.WebControls.RadComboBoxItem lst = new Telerik.WebControls.RadComboBoxItem();
lst.Text = eventPorts[portGuid].PortName;
lst.Value = eventPorts[portGuid].PortGuid.ToString();
cmbFolderList.Items.Add(lst);
}
}
/// <summary>
/// New Method to load all filewatcher ports which secuity enabled.
/// </summary>
private void LoadSecurityEnblePorts()
{
DataTable dtTable = null;
Skelta.Repository.List.ListItemCollection objSecPorts = new Skelta.Repository.List.ListItemCollection(List);
dtTable = objSecPorts.GetRecordsForConsume(_LoggedInUser, Skelta.Repository.Display.AllItems);
if (dtTable.Rows.Count > 0)
LoadPorts();
}
/// <summary>
/// Check whether the events are selected or not. If it is not selected eventbinding table saving part skiped.
/// </summary>
/// <returns></returns>
private bool EventsSelected()
{
bool flag = false;
try
{
if (cmbEventType.SelectedIndex != 0 && cmbFolderList.SelectedIndex != 0)
{
flag = true;
}
else if ((cmbEventType.SelectedIndex != 0 && cmbFolderList.SelectedIndex == 0) || (cmbEventType.SelectedIndex == 0 && cmbFolderList.SelectedIndex != 0))
{
flag = false;
error = GetLangSpecText("ec_filewatcher_portnotempty");
}
else
{
flag = true;
}
}
catch (Exception)
{
}
return flag;
}
/// <summary>
/// Method to get all filewatcher folders
/// </summary>
/// <param name="_applicationName"></param>
/// <param name="eventProviderName"></param>
/// <returns></returns>
private Dictionary<string, IEventPort> GetAllEventPorts(string _applicationName, string eventProviderName)
{
//If it is not given here, for every serviceprovider class, geteventports method should be implemented.
Dictionary<string, IEventPort> colEventPorts = new Dictionary<string, IEventPort>();
if (_applicationName != string.Empty)
{
EventServicePortCollection colEventServicePorts = new EventServicePortCollection(new ApplicationObject(_applicationName), eventProviderName);
foreach (EventServicePort evntPort in colEventServicePorts.Items)
colEventPorts.Add(evntPort.Name, evntPort.EventPort);
}
return colEventPorts;
}
/// <summary>
/// Button click event
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void SaveButton_Click(object sender, EventArgs e)
{
string err = WorkflowNameValidator.ErrorMessage.ToString().Trim();
if (cmbEventType.SelectedValue == "--Select--" && cmbFolderList.SelectedValue != "0")
{
error = GetLangSpecText("ec_filewatcher_event");
err = "Error";
return;
}
if (cmbEventType.SelectedValue != "--Select--" && cmbFolderList.SelectedValue == "0")
{
error = GetLangSpecText("ec_filewatcher_Port");
err = "Error";
return;
}
if (err == string.Empty)
{
Skelta.Repository.List.ListItem item = new Skelta.Repository.List.ListItem(_List, "<Workflow Title=\"" + WorkflowNameInput.Text.ToString().Trim() + "\" Description=\"" + WorkflowDescriptionInput.Text.ToString().Trim() + "\" />");
item.ParentItemId = parentItemId;
item.LoggedInUserId = _LoggedInUser;
item.ItemType = 5;
try
{
item.Save();
}
catch (Exception ex)
{
err = item.LastSaveError;
Alert(err.Trim());
return;
}
//if any exeception there at creating the item it will be stored in LastSaveError property of ListItem Object.it may not throw any exception hence check for this
if (item.LastSaveError != null)
{
err = item.LastSaveError;
Alert(err.Trim());
return;
}
Guid WFId = item.Id;
string workflowName = WorkflowNameInput.Text.ToString().Trim();
versionStamp = item.CurrentVersion.VersionStamp;
if (string.IsNullOrEmpty(versionStamp))
{
versionStamp = "1";
}
ListPageParameters listParams = new ListPageParameters();
listParams.ListId = listGuid;
listParams.ApplicationName = _applicationName;
listParams.ListName = _ListName;
listParams.ListItemId = WFId;
listParams.LoggedInUserId = _LoggedInUser;
string uri = listParams.GetSecuredUri();
bool blAssociate = false;
if (EventsSelected() == true)
{
if (HasSecurityRights() == true)
{
SaveEventBinding();
}
else
{
return;
}
}
else
{
return;
}
CreateXMLVaribale();
if (item.LastSaveError == null)
{
Response.Redirect("../../../Repository/Site/WorkflowTasks.aspx?" + uri + "&WFName=" + workflowName, true);
}
Page.ClientScript.RegisterStartupScript(typeof(NewWorkflowForm), "", "<script>this.close();</script>");
}
}
private bool HasSecurityRights()
{
bool blRight = true;
try
{
//Check whether it is required to check for event association
//Save the Event Bindings here
ListDataHandler ldh = new ListDataHandler(_applicationName, "Workflow");
Skelta.Repository.List.ListItem _ListItem = ldh.GetListItem(WorkflowNameInput.Text.Trim());
_ListItem.LoggedInUserId = _LoggedInUser;
//Commented by Hemanth to get SecuityFlag Information from SecurityManager class
//Skelta.FarmManager.Repository repository = new Skelta.FarmManager.Repository(_applicationName);
bool securityflag = SecurityManager.GetSecurityFlag(_applicationName);
if (securityflag == true) //repository.Properties["enablesecurity"].ToLowerInvariant()
{
//Checking whether the user has rights to add an item in association list in workflow list
Skelta.Repository.List.ListDefinition skWorkflowList = new Skelta.Repository.List.ListDefinition(new Skelta.Core.ApplicationObject(_applicationName), "Workflow");
Skelta.Repository.Security.SecurityManager securityMgr = new Skelta.Repository.Security.SecurityManager(skWorkflowList, _LoggedInUser);
if ((securityMgr.GetValueForRightCode("ActionCreateAssociations", Skelta.Repository.EntityType.ListItem, _ListItem.Id)).ToUpperInvariant() != "TRUE")
{
blRight = false;
SecurityRightsHandler SecurityHandler = new SecurityRightsHandler(_applicationName);
ListAction action = _ListItem.List.Operations.GetActionById("_sys_delete");
SecurityHandler.ExecuteAction(action, _ListItem, ListItemEvents.OnDelete);
Alert("You dont have permission to create the associations.");
// return;
}
bool blRightProvider = true;
if (blRight)
{
Skelta.Repository.List.ListDefinition eventProvidersList = new Skelta.Repository.List.ListDefinition(new Skelta.Core.ApplicationObject(_applicationName), "Event Providers");
Skelta.Repository.List.ListItemCollection eventProvidersCollection = new Skelta.Repository.List.ListItemCollection(eventProvidersList);
System.Data.DataTable providersTable = eventProvidersCollection.GetRecordsForConsume("Title", "FileWatcher", Skelta.Repository.Display.MainItems, _LoggedInUser);
if (providersTable.Rows.Count == 0)
{
blRight = false;
SecurityRightsHandler SecurityHandler = new SecurityRightsHandler(_applicationName);
ListAction action = _ListItem.List.Operations.GetActionById("_sys_delete");
SecurityHandler.ExecuteAction(action, _ListItem, ListItemEvents.OnDelete);
Alert("You dont have permission to consume the File Watcher Event Provider. So cannot create association.");
// return;
}
}
}
}
catch (Exception Ex)
{
throw Ex;
}
return blRight;
}
/// <summary>
/// Method to save the entry to the event binding table
/// </summary>
private void SaveEventBinding()
{
try
{
string filename;
string filepath;
String eventtype;
FullPath = txtFilePattern.Text;
EventType = cmbEventType.SelectedItem.Text;
ListDataHandler wfhandler = new ListDataHandler(_applicationName, "Workflow");
Skelta.Repository.List.ListItem wfitem;
wfitem = wfhandler.GetListItem(WorkflowNameInput.Text);
workflowName = WorkflowNameInput.Text.Trim();
EventBinding eventBind;
eventBind = new EventBinding(new Skelta.Core.ApplicationObject(_applicationName));
eventBind.BindingType = EventBindingType.Workflow;
eventBind.Disabled = false;
eventBind.Disable_After_Expiry = false;
eventBind.NoofEvents = 0;
eventBind.EventName = "FileWatcher";
eventBind.Alert_ApplicationName = _applicationName;
eventBind.Alert_Workflow = workflowName;//the current list item
eventBind.Alert_Version = versionStamp;
eventBind.Alert_UserId = _LoggedInUser;
int flag = 0;
if (cmbFolderList.SelectedValue != "0")
{
bool chkFolder = true;
string strPort = cmbFolderList.SelectedItem.Text;
DirectoryInfo drInfo = new DirectoryInfo(strPort);
if (!drInfo.Exists)
{
string[] strFolders = strPort.Split('\\');
if (strFolders.Length > 0)
{
for (int i = 0; i < strFolders.Length; ++i)
{
if (strFolders[i] == "DESKTOP")
{
chkFolder = true;
break;
}
}
if (strFolders[0] == string.Empty)
{
chkFolder = true;
}
}
}
if (chkFolder == true)
{
stPort = new Guid(cmbFolderList.SelectedValue);
eventBind.PortGuid = stPort;
flag = 1;
}
else
{
error = GetLangSpecText("ec_filewatcher_portRemoved");
}
}
else
{
error = GetLangSpecText("ec_filewatcher_portnotempty");
}
if (flag == 1)
{
string[] strFileType = txtFilePattern.Text.Split('.');
if (strFileType.Length > 1)
{
if (strFileType[0] == string.Empty && strFileType[1] != string.Empty)
{
eventBind.str2 = strFileType[1].ToString();
}
if (strFileType[0] != string.Empty && strFileType[1] != string.Empty)
{
if (strFileType[0] == "*" && strFileType[1] == "*")
{
}
else if (strFileType[0] == "*" && strFileType[1] != string.Empty)
{
eventBind.str2 = strFileType[1];
}
else
{
eventBind.str1 = txtFilePattern.Text;
}
}
}
else if (strFileType[0] != string.Empty)
{
eventBind.str1 = strFileType[0];
}
eventBind.str3 = EventType;
//
eventBind.Save();
eventBindId = eventBind.Id;
filename = txtFilePattern.Text;
filepath = cmbFolderList.SelectedItem.Text;
eventtype = EventType;
alertMessage = filepath + " " + filename + " " + eventtype;
StringBuilder eventXml = new StringBuilder();
eventXml.Append("<EventBind id=\"" + eventBindId + "\">");
eventXml.Append("<ApplicationName>" + _applicationName + "</ApplicationName>");
eventXml.Append("<Workflow>");
eventXml.Append("<WorkflowName>" + workflowName + "</WorkflowName>");
eventXml.Append("<WorkflowAlert>" + alertMessage + "</WorkflowAlert>");
eventXml.Append("<WorkflowEffectiveFrom>" + effectiveFromDate + "</WorkflowEffectiveFrom>");
eventXml.Append("<WorkflowEffectiveTo>" + effectiveToDate + "</WorkflowEffectiveTo>");
eventXml.Append("</Workflow>");
eventXml.Append("<Parameters>");
eventXml.Append("<File FileName=\"" + filename + "\" name=\"" + listName + "\"></File>");
eventXml.Append("<File FilePath=\"" + filepath + "\" name=\"" + listName + "\"></File>");
eventXml.Append("<File EventType=\"" + eventtype + "\" name=\"" + listName + "\"></File>");
eventXml.Append("</Parameters>");
eventXml.Append("</EventBind>");
SaveAssociationList(eventXml.ToString());
}
}
catch (Exception)
{
}
}
/// <summary>
/// Method to add the eventassociation table entry
/// </summary>
/// <param name="eventXml"></param>
private void SaveAssociationList(string eventXml)
{
if (associationList == null)
{
associationList = new ListDefinition(new Skelta.Core.ApplicationObject(_applicationName), "Event Associations");
}
if (associationList != null)
{
//Get the reference id from the main list []
Guid webApplicationItemReferenceId = Guid.Empty;
ListDefinition webApplicationList = new ListDefinition(new Skelta.Core.ApplicationObject(_applicationName), "Event Associations");
//File association details Details
Skelta.Repository.List.ListItemCollection webApplicationListItems = new Skelta.Repository.List.ListItemCollection(webApplicationList);
Hashtable webApplicationTableColumnNames = new Hashtable();
SortedDictionary<string, Skelta.Forms.Core.Controls.BaseDataControl> fields = webApplicationListItems.GetRecordsFieldMapping();
foreach (KeyValuePair<string, Skelta.Forms.Core.Controls.BaseDataControl> info in fields)
{
webApplicationTableColumnNames.Add(info.Value.Name, info.Key);
}
//Create a new record If web application does not exist on that list
Skelta.Repository.List.ListItem webApplicationListItem = null;
if (webApplicationItemReferenceId == Guid.Empty)
webApplicationListItem = new Skelta.Repository.List.ListItem(webApplicationList);
else
webApplicationListItem = new Skelta.Repository.List.ListItem(webApplicationList, webApplicationItemReferenceId);
if (webApplicationListItem != null)
{
if (associationItem == null)
{
associationItem = new Skelta.Repository.List.ListItem(associationList);
}
ListMainForm associationMainForm = (ListMainForm)associationItem.ListForm.Records[0];
((ListTextDataItem)associationMainForm.FindControlByID("_sys_sk_evntass_evntbndxml")).Value = eventXml;
((ListTextDataItem)associationMainForm.FindControlByID("_sys_sk_evntass_wrkflwname")).Value = workflowName;
((ListTextDataItem)associationMainForm.FindControlByID("_sys_sk_evntass_evntprvdrname")).Value = "FileWatcher";
((ListTextDataItem)associationMainForm.FindControlByID("_sys_sk_evntass_evnttype")).Value = "FileWatcher";
((ListTextDataItem)associationMainForm.FindControlByID("_sys_sk_evntass_evntstatus")).Value = "New";
((ListTextDataItem)associationMainForm.FindControlByID("_sys_sk_evntass_desc")).Value = alertMessage;
((ListTextDataItem)associationMainForm.FindControlByID("_sys_sk_evntass_title")).Value = EventType;
((ListGuidDataItem)associationMainForm.FindControlByID("_sys_sk_evntassbnd_id")).Value = eventBindId;
associationItem.LoggedInUserId = _LoggedInUser;
associationItem.Save(ListItemVersionStatus.Published);
Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "regJs", "<script>alert('File association saved successfully');</script>");
}
else
{
throw new Exception("Not able to fetch main Reference Id");
}
}
}
private void CreateXMLVaribale()
{
try
{
workflowName = WorkflowNameInput.Text.Trim();
Skelta.Core.AddInProvider provider = new Skelta.Core.AddInProvider(new Skelta.Core.ApplicationObject(_applicationName), GetProviderId("XmlDocument", _applicationName));
Workflow.NET.Interfaces.IXmlStorageType storageHandler = (Workflow.NET.Interfaces.IXmlStorageType)provider.CreateInstance(true);
Workflow.NET.Web.Designer.ProcessDesigner pd = new Workflow.NET.Web.Designer.ProcessDesigner();
pd.ID = "pd";
pd.ApplicationName = _applicationName;
pd.WorkflowName = workflowName;
pd.FileName = "1";
pd.UseTopmostWindowForRenderingOnClientSide = false;
pd.Height = System.Web.UI.WebControls.Unit.Percentage(100);
pd.Width = System.Web.UI.WebControls.Unit.Percentage(100);
pd.InitializeValues();
Workflow.NET.Diagram _diagram = Workflow.NET.Diagram.GetDiagramCreateIfNotFound(_applicationName, workflowName, versionStamp);
_diagram.PreProcessDiagaram();
bool flag = true;
foreach (XmlVariable var in _diagram.XmlVariables.Values)
{
if (var.Name.Equals("FileWatcherXMLData"))
{
flag = false;
}
}
if (flag)
{
Workflow.NET.XmlVariable XVariable = new Workflow.NET.XmlVariable();
XVariable.Name = "FileWatcherXMLData";
XVariable.Description = "File watcher XML Data";
XVariable.StorageType = "XmlDocument";
string eventdataFilePath = System.Web.HttpContext.Current.Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath + "/" + Workflow.NET.Config.GetTemplateDirectoryFromWebConfig() + "Default/XMLSchemas/FileWatcherEventData.xml");
XVariable.Schema = ParseXMLForData(eventdataFilePath);
XVariable.StorageHandler = storageHandler;
((Workflow.NET.XmlStorageType.XmlDocument)(XVariable.StorageHandler)).StorageData = "variables";
_diagram.XmlVariables.Add(XVariable.Name, XVariable);
commonFunctions.WriteDiagram(_diagram, _applicationName, workflowName, versionStamp);
_diagram.Dispose();
Workflow.NET.Designer workflowDesigner = new Workflow.NET.Designer(_applicationName, workflowName, "1");
workflowDesigner = new Workflow.NET.Designer(_applicationName, workflowName, "1");
Workflow.NET.XmlVariable eventDataVariable = Skelta.Events.SKEventData.GetXmlVariable(_applicationName, workflowName, "1");
workflowDesigner.XMLVariables.Add(eventDataVariable.Name, eventDataVariable);
workflowDesigner.WriteToDefinition();
}
}
catch (Exception)
{
}
}
private Guid GetProviderId(string storageType, string applicationName)
{
Skelta.Core.AddInProviderCollection _Provider = new Skelta.Core.AddInProviderCollection(new Skelta.Core.ApplicationObject(_applicationName));
string FilterExp = "where Type =@Type and Name=@Name";
Skelta.Core.DS.SkeltaParameter param1 = new Skelta.Core.DS.SkeltaParameter("@Type", "XmlStorageType");
Skelta.Core.DS.SkeltaParameter param2 = new Skelta.Core.DS.SkeltaParameter("@Name", storageType);
System.Data.DataSet DsProvider = _Provider.GetMatchingRecords(FilterExp, param1, param2);
string s = "";
if (DsProvider.Tables[0].Rows.Count > 0)
{
s = DsProvider.Tables[0].Rows[0].ItemArray.GetValue(0).ToString();
}
return new Guid(s);
}
private string ParseXMLForData(string file)
{
TextWriter txt = new StringWriter();
StreamReader sReader = new System.IO.StreamReader(file);
System.Xml.XmlTextReader reader = new System.Xml.XmlTextReader(sReader);
XmlDocument XDoc = new XmlDocument();
XDoc.Load(reader);
reader.Close();
sReader.Close();
StringReader stringReader1 = new StringReader(this.AddNameSpacePrefixIntoHolder(XDoc));
XmlTextReader xmlTextReader1 = new XmlTextReader(((TextReader)stringReader1));
XmlSchemaSet schemaSet = new XmlSchemaSet();
XmlSchemaInference schema = new XmlSchemaInference();
schemaSet = schema.InferSchema(xmlTextReader1);
foreach (XmlSchema s in schemaSet.Schemas())
{
s.Write(txt);
}
string xsdstring = txt.ToString();
return xsdstring;
}
private string AddNameSpacePrefixIntoHolder(XmlDocument oxmlDoc)
{
foreach (XmlNode xmlNode1 in oxmlDoc.ChildNodes)
{
if (xmlNode1.NamespaceURI.Length > 0)
{
this.AddNameSpaceHolder(xmlNode1.NamespaceURI, xmlNode1.Prefix);
}
if (xmlNode1.ChildNodes.Count > 0)
{
string string2 = this.FindNextNode(oxmlDoc, xmlNode1);
}
}
return oxmlDoc.OuterXml;
}
private string FindNextNode(XmlDocument oxmlDoc, XmlNode oNode)
{
string string1 = null;
foreach (XmlNode xmlNode1 in oNode.ChildNodes)
{
if (xmlNode1.NamespaceURI.Length > 0)
{
this.AddNameSpaceHolder(xmlNode1.NamespaceURI, xmlNode1.Prefix);
if (xmlNode1.ChildNodes.Count > 0)
{
string string2 = this.FindNextNode(oxmlDoc, xmlNode1);
}
}
else
{
if (xmlNode1.ChildNodes.Count > 0)
{
string string3 = this.FindNextNode(oxmlDoc, xmlNode1);
}
continue;
}
}
return string1;
}
public void AddNameSpaceHolder(string NameSpaceURI, string Prefix)
{
Hashtable nameSpaceHolder = new Hashtable();
bool b1 = false;
NameSpaceInfo nameSpacePrefix1 = null;
Exception exception1 = null;
IEnumerator iEnumerator1 = null;
try
{
b1 = false;
if (nameSpaceHolder.Count <= 0)
{
nameSpacePrefix1 = new NameSpaceInfo();
nameSpacePrefix1.NameSpaceURI = NameSpaceURI;
nameSpacePrefix1.NameSpacePrefix = Prefix;
nameSpaceHolder.Add(Prefix, nameSpacePrefix1);
goto L_00DA;
}
try
{
iEnumerator1 = nameSpaceHolder.Values.GetEnumerator();
while (iEnumerator1.MoveNext())
{
nameSpacePrefix1 = ((NameSpaceInfo)iEnumerator1.Current);
//if (StringType.StrCmp(nameSpacePrefix1.NameSpaceURI.Trim().ToUpperInvariant(), NameSpaceURI.Trim().ToUpperInvariant(), false) == 0)
//{
// b1 = true;
//goto L_0093;
//}
}
}
finally
{
if (iEnumerator1 is IDisposable)
{
((IDisposable)iEnumerator1).Dispose();
}
}
L_0093:
{
}
if (b1)
{
return;
}
nameSpacePrefix1 = new NameSpaceInfo();
nameSpacePrefix1.NameSpaceURI = NameSpaceURI;
nameSpacePrefix1.NameSpacePrefix = Prefix;
if (!nameSpaceHolder.Contains(Prefix))
nameSpaceHolder.Add(Prefix, nameSpacePrefix1);
return;
L_00DA:
{
}
}
catch (Exception exception2)
{
exception1 = exception2;
throw new Exception(exception1.Message);
}
}
}