Skelta Workflow.NET 2004 Help
Implementation examples of new Skelta Workflow.NET 2004 Interfaces

This topic provides implementation examples of the new interfaces added in the current release of Skelta Workflow.NET 2004.

I. Sample Implementation of IDBConnectionString Interface

This implementation example shows the use of the IDBConnectionString Interface.

public class GetConnectionString:IDBConnectionString
     {
          public GetConnectionString()
          {

          }
          public GetConnectionString(string ParamAttributeFromConfigFile)
          {
          }
          #region IDBConnectionString Members
          public string GetConnectionString(string AppName,object InnerTextValueFromDataSourceNode)
          {
             return"server=localhost;database=skelta;uid=sa;pwd=;";
          }
          #endregion
     }

<<Back

II. Sample Implementation of Interface for maintaining status at application level

This implementation example shows the use of the Interface for maintaining status at application level.

public class ActivityMapClass: IActivityMap
     {
      IDataHandler dbHandler;

      public ActivityMapClass()
       {

       }
      object param;
      public object Parameter
       {
         get
          {
            return param;
          }
         set
         {
           param = value;
         } 
       }
      public void BeginTransaction()
       {
         dbHandler = GetDBHandler();
         dbHandler.BeginTransaction();
       }
      public void Commit()
       {
         dbHandler.Commit();
         if(dbHandler != null)
           dbHandler.Dispose();
         dbHandler =null;
       }
      public void RollBackTransaction()
       {
         dbHandler.Rollback();
         if(dbHandler != null)
            dbHandler.Dispose();
         dbHandler =null;
       }
      public void AddActivity(int ExecutionDetailsId,int ActivityId,object UserId, Workflow.NET.Action CurrentAction,
Workflow.NET.Engine.Context CurrentContext,Workflow.NET.PropertyTypes.PropertyActivityCustomField.CustomFieldList CustomFields)
      {

      try
        {
           //This table doesn't; exist
           DataTable table=new DataTable("SkeltaMappingTable");
           DataColumn col=table.Columns.Add("ActionName");
           col=table.Columns.Add("ActionType");
           col=table.Columns.Add("ActivityId");
           col=table.Columns.Add("ExecutionId");
           col=table.Columns.Add("Status");
           col=table.Columns.Add("UserId");
           col=table.Columns.Add("LastUpdatedDateTime",typeof(DateTime));


           DataRow row=table.NewRow();
           row["ActionName"]=CurrentAction.ActionDisplayName;
           row["ActionType"]=CurrentAction.ActionType;
           row["ActivityId"]=ActivityId;
           row["ExecutionId"]=CurrentContext.ExecutionID;
           row["UserId"]=UserId;
           row["Status"]="awaiting";
           row["LastUpdatedDateTime"]=DateTime.Now;
           dbHandler.ExecuteInsert(row).ToString();
        }
       catch(Exception exceptionOccured)
        {
          logger.LogError(exceptionOccured,"Error while adding to activity mapping table");
          throw exceptionOccured;
         }
         logger.LogInformation("Data has been inserted to skelta mapping table.");
      }
     public void UpdateActivity(int ActivityId,Workflow.NET.Engine.ActivityContext ActivityContext, Workflow.NET.PropertyTypes.PropertyActivityCustomField.CustomFieldList CustomFields, string UpdateStatus,bool CompletionMaker,string Data, object OnBehalfUser)
     {
      //throw new System.Exception("Helloooo");
     }
    public void PauseActivity(int ExecutionDetailsID, int ActivityId, Workflow.NET.Engine.Context CurrentContext, Workflow.NET.Action CurrentAction, Workflow.NET.PropertyTypes.PropertyActivityCustomField.CustomFieldList CustomFields, string Status)
     {
     }
    public void ResumeActivity(int ExecutionDetailsID, int ActivityId, Workflow.NET.Engine.Context CurrentContext, Workflow.NET.Action CurrentAction, Workflow.NET.PropertyTypes.PropertyActivityCustomField.CustomFieldList CustomFields, string Status)
    {
    }
   public void AbortActivity(int ExecutionDetailsID, Workflow.NET.Engine.Context CurrentContext, Workflow.NET.Action CurrentAction, Workflow.NET.PropertyTypes.PropertyActivityCustomField.CustomFieldList CustomFields, string Status)
    {
    }
   public void TimeoutAction(int ExecutionDetailsId,Workflow.NET.Engine.ActivityContext ActivityContext, Workflow.NET.PropertyTypes.PropertyActivityCustomField.CustomFieldList CustomFields, string TimeoutType)
    {
    }
   public void ActionCompletion(int ExecutionDetailsId,Workflow.NET.Engine.ActivityContext ActivityContext, Workflow.NET.PropertyTypes.PropertyActivityCustomField.CustomFieldList CustomFields, string ActionOutput)
    {
    }
   public void ForwardActivity(int ActivityId,Workflow.NET.Engine.ActivityContext ActivityContext, Workflow.NET.PropertyTypes.PropertyActivityCustomField.CustomFieldList CustomFields,object FromResourceIdentifier, object ToResourceIdentifier)
    {
    }
   private IDataHandlerGetDBHandler()
   {
    IDataHandlerdbHandler=Workflow.NET.Storage.DataHandlerFactory.GetDataHandler("server=localhost;database=test;uid=sa;pwd=test","sql server");
     return dbHandler;
    }
}

<<Back

III. Sample Implementation of Interface for getting Action/Workflow status change information

This implementation example shows the use of the Interface for getting Action/Workflow status change information from Engine.

public class ExecutionInfo:IWorkflowInformation
     {
        Log logger = new Log();
        public ExecutionInfo()
        {
            logger.MachineName="";
            logger.ModuleName="WFExecutionInfo";
            logger.Source="";
            logger.FileName="";
        }

        public void OnActionExecutedWithErrors(int ExecutionId, int ExecutionDetailsID, string ActionName, Exception ObjException)
        {
            // TODO: Add ExecutionInfo.OnActionExecutedWithErrors implementation
logger.LogInformation("Action executed with errors for ExecutionId:"+ ExecutionId +", ExecutionDetailsID:"+ ExecutionDetailsID +", ActionName:"+ ActionName +", Exception:"+ObjException.Message);
        }

        public void OnWorkflowCompletedSuccessfully(int ExecutionId)
        {
           // TODO: Add ExecutionInfo.OnWorkflowCompletedSuccessfully implementation
logger.LogInformation("Workflow completed successfully for ExecutionId:"+ ExecutionId);
        }

        public string ApplicationName
        {
           get
           {
                // TODO: Add ExecutionInfo.ApplicationName getter implementation
return null;
           }
           set
           {
                logger.LogInformation("Application Name:"+ value);
           }
        }

        public void OnActionStatusUpdate(int ExecutionId, int ExecutionDetailsID, string ActionName, string Status)
        {
           // TODO: Add ExecutionInfo.OnActionStatusUpdate implementation
logger.LogInformation("Action status updated for ExecutionId:"+ ExecutionId +", ExecutionDetailsID:"+ ExecutionDetailsID +", ActionName:"+ ActionName +", Status:"+Status);
        }

        public void OnWorkflowCompletedWithErrors(int ExecutionId)
        {
           // TODO: Add ExecutionInfo.OnWorkflowCompletedWithErrors implementation
logger.LogInformation("Workflow completed with errors for ExecutionId:"+ ExecutionId);
        }

        public void OnWorkflowStatusUpdate(int ExecutionId, string Status)
        {
           // TODO: Add ExecutionInfo.OnWorkflowStatusUpdate implementation
logger.LogInformation("Workflow status updated for ExecutionId:"+ ExecutionId +", Status:"+ Status);
        }

        public void OnWorkflowStarted(int ExecutionId)
        {
           // TODO: Add ExecutionInfo.OnWorkflowStarted implementation
logger.LogInformation("Workflow started for Application:"+ ApplicationName +", ExecutionId:"+ ExecutionId );
        }

    }

<<Back

IV. Sample Implementation of IValidateWFRequest Interface

This implementation example shows the use of the IValidateWFRequest Interface.

public class ValidateHttpClient:IValidateWFRequest
    {
       object paramData;
       public ValidateHttpClient()
       {

       }
       public ValidateHttpClient(object ParamAttributeFromConfigFile)
       {
          //Application level validation
          this.paramData = ParamAttributeFromConfigFile;
       }
       #region IValidateWFRequest Members

       public bool IsValidWorkflowRequest(string ApplicationName, string WorkflowName, object ClientObject, object  Parameters)
       {
          bool retValue = false;
          try
          {
              //Get the hhtpRequest.
              HttpRequest request = (HttpRequest)ClientObject;

             //If Parameters is null, then application level vaildation will be performed.
             if( Parameters == null || Parameters.ToString() == "") 
                 Parameters = paramData;

             //Extract multiple applications which has access to worklfow request.
             string[] ApplicationArray = Parameters.ToString().Split(',');
             string requestFromApp = request.ApplicationPath.ToLower();
             foreach(string application in ApplicationArray)
             {
                 if("/"+application.ToLower() == requestFromApp)
                 {
                    retValue = true;
                    break;
                 }
             }
          }
          catch(Exception e)
          {
             Workflow.NET.Log logger = new Workflow.NET.Log();
             logger.LogError(e,"Could not validate the request object");
             logger.Close();
          }
          return retValue;
       }

       #endregion
   }

<<Back




  Skelta - A BPM Workflow Software Company