using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Web.Services.Protocols; using System.Xml; //using BatchProcessor.Crm.Sdk; //using BatchProcessor.Crm.Sdk.Discovery; //using BatchProcessor.CrmSdk.Discovery; using Microsoft.Crm.Sdk; using Microsoft.Crm.Sdk.Query; using Microsoft.Crm.SdkTypeProxy; enum _TreeImages { Blank = 0, Tick, Cross, NoEntryCross, NoEntry, Face_Smiley, Face_Unimpressed, Face_Sad, Exclimation, QuestionMark, Error, Information, Code }; namespace BatchProcessor { public partial class Processor : Form { public Processor() { InitializeComponent(); } private void CRM_TestConnection_Click(object sender, EventArgs e) { //ClearAllLogs(); //Tabs.SelectTab("tabCRMConnection"); //TreeNode connectiontestnode = AppendToLog(CRMConnectionLog, "CRM Connection Test"); //TestCRMConnection(connectiontestnode); //TreeNode connectionlognode = AppendToLog(AllLog, "CRM Connection Log"); //TreeNode clonednode = (TreeNode)CRMConnectionLog.TopNode.Clone(); //connectionlognode.Nodes.Add(clonednode); bgWorkerCRMTestConnection.RunWorkerAsync(); } private void DB_TestConnection_Click(object sender, EventArgs e) { ClearAllLogs(); Tabs.SelectTab("tabDBConnection"); TreeNode connectiontestnode = AppendToLog(DBConnectionLog, "DB Connection Test"); TestDBConnection(connectiontestnode); TreeNode connectionlognode = AppendToLog(AllLog, "DB Connection Log"); TreeNode clonednode = (TreeNode)DBConnectionLog.TopNode.Clone(); connectionlognode.Nodes.Add(clonednode); } #region "Connection Tests" private void TestCRMConnection(TreeNode lognode) { try { AppendToLog(lognode, "Connecting to CRM Server via Webservices...", _TreeImages.QuestionMark); CrmAuthentication crmservices = new CrmAuthentication(CRM_Hostname.Text, CRM_Port.Text, CRM_Username.Text, CRM_Password.Text, CRM_Domain.Text, CRM_OrganisationName.Text); AppendToLog(lognode, "Connected to CRM Server, retrieving Batch Templates", _TreeImages.Tick); try { QueryExpression query = new QueryExpression(); ColumnSet cols = new ColumnSet(); cols.AddColumn("dmu_description"); cols.AddColumn("dmu_batchstatus"); cols.AddColumn("dmu_startwhen"); cols.AddColumn("dmu_endwhen"); //cols.AddColumn("createdon"); //query.Criteria.AddCondition("description", ConditionOperator.Equal, "Test"); query.EntityName = "dmu_batchtemplate"; query.ColumnSet = cols; // = new AllColumns(); query.AddOrder("dmu_description", OrderType.Descending); RetrieveMultipleRequest request = new RetrieveMultipleRequest(); request.Query = query; request.ReturnDynamicEntities = true; RetrieveMultipleResponse result = (RetrieveMultipleResponse)crmservices.Service.Execute(request); TreeNode templatenode = AppendToLog(lognode, result.BusinessEntityCollection.BusinessEntities.Count.ToString() + " instances of " + query.EntityName + " found...", (result.BusinessEntityCollection.BusinessEntities.Count == 0 ? _TreeImages.Face_Unimpressed : _TreeImages.Face_Smiley)); foreach (DynamicEntity instance in result.BusinessEntityCollection.BusinessEntities) { Picklist picklist = (Picklist)instance.Properties["dmu_batchstatus"]; string batchstatus = picklist.name; _TreeImages batchstatusimg = GetTreeImageFromBatchStatus(batchstatus); TreeNode instancenode = AppendToLog(templatenode, instance.Properties["dmu_description"].ToString() + " : " + picklist.name, batchstatusimg); foreach (Property prop in instance.Properties) AppendToLog(instancenode, prop.Name.ToString() + " - " + GetPropertyValuePreviewAsString(prop), _TreeImages.Information, false); } AppendToLog(lognode, "Connection test completed successfully!", _TreeImages.Tick); } catch (System.Web.Services.Protocols.SoapException ex) { TreeNode errornode = AppendToLog(lognode, "Problem Retrieving Batches - " + ex.Message, _TreeImages.Error); if (ex.Detail != null) AppendToLog(errornode, ex.Detail.InnerText.Replace("\n", " - "), _TreeImages.Exclimation); if (ex.InnerException != null) AppendToLog(errornode, ex.InnerException.Message, _TreeImages.Exclimation); } } catch (InvalidOperationException ex) { TreeNode errornode = AppendToLog(lognode, "Invalid Operation Authenticating with server - " + ex.Message, _TreeImages.Error); errornode.ImageIndex = (int)_TreeImages.NoEntryCross; if (ex.InnerException != null) AppendToLog(errornode, ex.InnerException.Message, _TreeImages.Exclimation); } catch (Exception ex) { TreeNode errornode = AppendToLog(lognode, "Error Authenticating with server - " + ex.Message, _TreeImages.Error); if (ex.InnerException != null) AppendToLog(errornode, ex.InnerException.Message, _TreeImages.Exclimation); } } private void TestDBConnection(TreeNode lognode) { TreeView logroot = DBConnectionLog; try { TreeNode connectingnode = AppendToLog(lognode, "Connecting to CRM Server via DB...", _TreeImages.QuestionMark); DBAuthentication dbservices = new DBAuthentication(DB_Hostname.Text, DB_Database.Text); AppendToLog(connectingnode, "Using connection string " + dbservices.ConnectionString, _TreeImages.Information, false); dbservices.TestConnection(); AppendToLog(lognode, "Connected to DB Server, retrieving Batch Templates", _TreeImages.Tick); try { using (SqlConnection conn = new SqlConnection(dbservices.ConnectionString)) { string query = @"SELECT * FROM dbo.FilteredDMU_batchtemplate ORDER BY dmu_description"; SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = new SqlCommand(query, conn); da.SelectCommand.CommandType = CommandType.Text; DataSet ds = new DataSet(); da.Fill(ds); DataTable dt = ds.Tables[0]; TreeNode templatenode = AppendToLog(lognode, dt.Rows.Count.ToString() + " instances of dmu_description found...", (dt.Rows.Count == 0 ? _TreeImages.Face_Unimpressed : _TreeImages.Face_Smiley)); foreach (DataRow dr in ds.Tables[0].Rows) { string batchstatusname = (string)dr["dmu_batchstatusname"]; int batchstatus = (int)dr["dmu_batchstatus"]; _TreeImages batchstatusimg = GetTreeImageFromBatchStatus(batchstatusname); TreeNode instancenode = AppendToLog(templatenode, dr["dmu_description"] + " : " + batchstatusname, batchstatusimg); foreach (DataColumn dc in dt.Columns) AppendToLog(instancenode, dc.ColumnName + " - " + dr[dc].ToString(), _TreeImages.Information, false); } } } catch (System.Web.Services.Protocols.SoapException ex) { TreeNode errornode = AppendToLog(lognode, "Problem Retrieving Batches - " + ex.Message, _TreeImages.Error); if (ex.Detail != null) AppendToLog(errornode, ex.Detail.InnerText.Replace("\n", " - "), _TreeImages.Exclimation); if (ex.InnerException != null) AppendToLog(errornode, ex.InnerException.Message, _TreeImages.Exclimation); } } catch (InvalidOperationException ex) { TreeNode errornode = AppendToLog(lognode, "Invalid Operation Authenticating with server - " + ex.Message, _TreeImages.Error); errornode.ImageIndex = (int)_TreeImages.NoEntryCross; if (ex.InnerException != null) AppendToLog(errornode, ex.InnerException.Message, _TreeImages.Exclimation); } catch (Exception ex) { TreeNode errornode = AppendToLog(lognode, "Error Authenticating with server - " + ex.Message, _TreeImages.Error); if (ex.InnerException != null) AppendToLog(errornode, ex.InnerException.Message, _TreeImages.Exclimation); } } #endregion "Connection Tests" #region "Images" private _TreeImages GetTreeImageFromBatchStatus(string batchstatus) { batchstatus = batchstatus.ToLower(); switch (batchstatus) { case "live": return _TreeImages.Tick; case "completed": return _TreeImages.Exclimation; case "problem": return _TreeImages.NoEntry; default: if (batchstatus.EndsWith("block")) return _TreeImages.NoEntryCross; else return _TreeImages.Cross; } } #endregion "Images" #region "Dynamic Entities" private string GetPropertyValuePreviewAsString(Property property) { string result; switch (property.GetType().ToString()) { case "Microsoft.Crm.Sdk.StringProperty": StringProperty s = (StringProperty)property; result = s.Value; break; case "Microsoft.Crm.Sdk.PicklistProperty": PicklistProperty p = (PicklistProperty)property; result = p.Value.name.ToString() + "/" + p.Value.Value; break; case "Microsoft.Crm.Sdk.CrmDateTimeProperty": CrmDateTimeProperty dt = (CrmDateTimeProperty)property; result = dt.Value.Value.ToString(); break; case "Microsoft.Crm.Sdk.KeyProperty": KeyProperty k = (KeyProperty)property; result = k.Value.Value.ToString(); break; default: result = "Unknown Property Type " + property.GetType().ToString(); break; } return "[" + result + "]"; } private static Property GetProperty(DynamicEntity entity, string propertyName) { // Loop through each property until the requested one is found. foreach (Property entityProperty in entity.Properties) { if (entityProperty.Name == propertyName) { return entityProperty; } } // Not found? return null; } #endregion "Dynamic Entities" #region "Log" private void UpdateGeneralLog(StringBuilder sb) { GeneralLog.Text = sb.ToString(); GeneralLog.Refresh(); } private TreeNode AppendToLog(TreeView log, string text) { TreeNode node = log.Nodes.Add(text); log.Refresh(); return node; } private TreeNode AppendToLog(TreeNode parent, string text, _TreeImages imageindex) { return AppendToLog(parent, text, imageindex, true); } private TreeNode AppendToLog(TreeNode parent, string text, _TreeImages imageindex, bool expandparent) { TreeNode node = parent.Nodes.Add(text); node.ImageIndex = (int)imageindex; node.SelectedImageIndex = (int)imageindex; if (expandparent == true) parent.Expand(); //parent.TreeView.Refresh(); Application.DoEvents(); return node; } private TreeNode AppendToLog(string text, TreeNode parent) { TreeNode node = parent.Nodes.Add(text); parent.Expand(); parent.TreeView.Refresh(); return node; } private void ClearAllLogs() { ClearLog(AllLog); ClearLog(CRMConnectionLog); ClearLog(DBConnectionLog); } private void ClearLog(TreeView log_treeview) { log_treeview.Nodes.Clear(); } private void ClearConnectionLog() { } #endregion "Log" #region "Application Settings" private void ManualSaveSettings_Click(object sender, EventArgs e) { Properties.Settings.Default.Save(); } private void ManualLoadSettings_Click(object sender, EventArgs e) { Properties.Settings.Default.Reload(); } #endregion "Application Settings" private void ClockTimer_Tick(object sender, EventArgs e) { Clock.Text = String.Format("{0:dd/MM/yyyy HH:mm:ss}", DateTime.Now); } private void DB_Database_DoubleClick(object sender, EventArgs e) { DB_Database.Text = CRM_OrganisationName.Text + "_MSCRM"; } private void DB_Database_TextChanged(object sender, EventArgs e) { } //private void bgWorkerCRMTestConnection_DoWork(object sender, DoWorkEventArgs e) //{ // if (InvokeRequired) Invoke(new MethodInvoker(() => // { // ClearAllLogs(); // this.Tabs.SelectTab("tabCRMConnection"); // TreeNode connectiontestnode = AppendToLog(CRMConnectionLog, "CRM Connection Test"); // CRMConnectionLog.Invoke(new TestCRMConnection(connectiontestnode)); // TreeNode connectionlognode = AppendToLog(AllLog, "CRM Connection Log"); // TreeNode clonednode = (TreeNode)CRMConnectionLog.TopNode.Clone(); // connectionlognode.Nodes.Add(clonednode); // })); //} } }