Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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);
                }
            }