public void OnIncomingMessage(MessageBusEventArgs message) { _ai.TrackEvent("Incoming message", new Dictionary <string, string> { ["SourcePlugin"] = message.SourcePlugin }); var param = message.TargetArgument as IDictionary <string, object>; if (param == null) { var xml = message.TargetArgument as string; param = new Dictionary <string, object>(); param["FetchXml"] = xml; param["ConvertOnly"] = false; } if (_objectExplorer.SelectedConnection == null) { return; } var con = _objectExplorer.SelectedConnection; var metadata = _metadata[con]; var fetch = DeserializeFetchXml((string)param["FetchXml"]); var options = new FetchXml2SqlOptions(); if ((bool)param["ConvertOnly"]) { options.PreserveFetchXmlOperatorsAsFunctions = false; } var sql = FetchXml2Sql.Convert(con.ServiceClient, metadata, fetch, options, out _); if ((bool)param["ConvertOnly"]) { param["Sql"] = sql; OnOutgoingMessage(this, new MessageBusEventArgs(message.SourcePlugin) { TargetArgument = null }); } else { CreateQuery(con, "-- Imported from " + message.SourcePlugin + "\r\n\r\n" + sql, message.SourcePlugin == "FetchXML Builder" ? null : message.SourcePlugin); } }
public void OnIncomingMessage(MessageBusEventArgs message) { _ai.TrackEvent("Incoming message", new Dictionary <string, string> { ["SourcePlugin"] = message.SourcePlugin, ["Source"] = "XrmToolBox" }); var param = message.TargetArgument as IDictionary <string, object>; if (param == null) { var str = message.TargetArgument as string; param = new Dictionary <string, object>(); if (str.StartsWith("<")) { param["FetchXml"] = str; } else { param["SQL"] = str; } param["ConvertOnly"] = false; } if (_objectExplorer.SelectedConnection == null) { return; } var con = _objectExplorer.SelectedConnection; var metadata = _dataSources[con.ConnectionName].Metadata; if (param.TryGetValue("FetchXml", out var xml) && xml is string xmlStr && !String.IsNullOrEmpty(xmlStr)) { var fetch = DeserializeFetchXml(xmlStr); var options = new FetchXml2SqlOptions(); if ((bool)param["ConvertOnly"]) { options.ConvertFetchXmlOperatorsTo = FetchXmlOperatorConversion.SqlCalculations; } _ai.TrackEvent("Convert", new Dictionary <string, string> { ["QueryType"] = "FetchXML", ["Source"] = "XrmToolBox" }); string sql; if (Settings.Instance.UseNativeSqlConversion) { try { var convertReq = new OrganizationRequest("FetchXMLToSQL") { ["FetchXml"] = xmlStr, ["SubqueryCompatible"] = true }; var convertResp = con.ServiceClient.Execute(convertReq); sql = (string)convertResp["Response"]; } catch { sql = FetchXml2Sql.Convert(con.ServiceClient, metadata, fetch, options, out _); } } else { sql = FetchXml2Sql.Convert(con.ServiceClient, metadata, fetch, options, out _); } if ((bool)param["ConvertOnly"]) { param["Sql"] = sql; OnOutgoingMessage(this, new MessageBusEventArgs(message.SourcePlugin) { TargetArgument = null }); } else { CreateQuery(con, "-- Imported from " + message.SourcePlugin + "\r\n\r\n" + sql); } }