internal void Run()
        {
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "START ", CliLog.ColorMagenta, LOG);
            CliLog.WriteLine(CliLog.ColorWhite, "|");

            if (!IsValid())
            {
                return;
            }
            var solution = string.Empty;

            if (json.solutiontype.ToLower() == "Both".ToLower())
            {
                solution = GetSolutionFromCrmBoth();
            }
            else
            {
                solution = GetSolutionFromCrm();
            }
            Packger(solution);

            CliLog.WriteLine(CliLog.ColorWhite, "|");
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "END ", CliLog.ColorMagenta, LOG);
            CliLog.WriteLine(CliLog.ColorWhite, "|");
        }
        private void GeneratorLateBound(string entity, int i, int count)
        {
            var lateBound       = new CSharpLateBound();
            var rootNameSpace   = json.rootnamespace;
            var sharedNameSpace = GetSharedNameSpace(json.rootnamespace);
            var crmVersionName  = (CrmVersionName)int.Parse(json.crmversion);
            var generated       = lateBound.Go(XrmHelper.GetIOrganizationService(crmServiceClient), crmVersionName, entity, rootNameSpace, sharedNameSpace);
            var file            = $"{currentDirectory}\\{json.rootfolder}\\{entity}.generated.cs";
            var old             = string.Empty;

            if (File.Exists(file))
            {
                old = File.ReadAllText(file).Replace("\r\n", string.Empty).Replace("\t", string.Empty);
            }
            var @new = generated.Replace(" ", string.Empty).Replace("\r\n", string.Empty).Replace("\t", string.Empty);

            if (old != @new)
            {
                File.WriteAllText(file, generated, System.Text.Encoding.UTF8);
                CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, string.Format("{0,0}{1," + count.ToString().Length + "}", "", i) + ": ", CliLog.ColorMagenta, "Processing ", CliLog.ColorGreen, entity, ".generated.cs");
            }
            else
            {
                CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, string.Format("{0,0}{1," + count.ToString().Length + "}", "", i) + ": ", CliLog.ColorMagenta, "No change ", CliLog.ColorGreen, entity, ".generated.cs");
            }
        }
Пример #3
0
        private void RunProxyType()
        {
            var command = CreateCommandArgs();
            var path    = "\"" + GetParentFolder(currentDirectory) + $@"\packages\Microsoft.CrmSdk.CoreTools.{arguments.Version}\content\bin\coretools\CrmSvcUtil.exe" + "\"";

            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "Executing CrmSvcUtil");
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorCyan, "\t" + path);
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorCyan, "\t" + HidePassword(command));
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "");
            var process = new Process
            {
                StartInfo = new ProcessStartInfo(path)
                {
                    Arguments              = $"{command}",
                    UseShellExecute        = false,
                    RedirectStandardOutput = true,
                    RedirectStandardError  = true,
                    CreateNoWindow         = true
                }
            };

            process.Start();
            while (!process.StandardOutput.EndOfStream)
            {
                var line = process.StandardOutput.ReadLine();
                CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorWhite, line);
            }
            process.WaitForExit();
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "Executed CrmSvcUtil");
        }
Пример #4
0
        private Guid RegisterPluginType(Entity pluginEntity, TypeInfo plugin)
        {
            var fetchData = new
            {
                typename = plugin.FullName
            };
            var fetchXml = $@"
<fetch>
  <entity name='plugintype'>
    <attribute name='plugintypeid' />
    <filter type='and'>
      <condition attribute='typename' operator='eq' value='{fetchData.typename}'/>
    </filter>
  </entity>
</fetch>";
            var rows     = crmServiceClient.RetrieveMultiple(new FetchExpression(fetchXml));

            if (rows.Entities.Count == 0)
            {
                var pluginType = new Entity("plugintype")
                {
                    ["name"]             = plugin.FullName,
                    ["pluginassemblyid"] = new EntityReference("pluginassembly", Guid.Parse(pluginEntity["pluginassemblyid"].ToString())),
                    ["typename"]         = plugin.FullName,
                    ["friendlyname"]     = plugin.FullName
                };
                CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorRed, " Registering", CliLog.ColorGreen, " Type: ", CliLog.ColorCyan, $"{plugin.FullName}");
                return(crmServiceClient.Create(pluginType));
            }
            else
            {
                return(rows.Entities[0].Id);
            }
        }
        private void UpdateEntityDisplayName()
        {
            var i = 1;

            foreach (var entity in Entities)
            {
                try
                {
                    var retrieveRequest = new RetrieveEntityRequest {
                        LogicalName = entity, EntityFilters = EntityFilters.Entity
                    };
                    var retrieveResponse = (RetrieveEntityResponse)service.Execute(retrieveRequest);
                    var update           = retrieveResponse.EntityMetadata;
                    if (update.DisplayName.UserLocalizedLabel.Label.StartsWith(NOT_USE))
                    {
                        continue;
                    }
                    update.DisplayName = new Microsoft.Xrm.Sdk.Label($"{NOT_USE}{update.DisplayName.UserLocalizedLabel.Label}", 1033);
                    var updateRequest = new UpdateEntityRequest
                    {
                        Entity = update,
                    };
                    service.Execute(updateRequest);
                    CliLog.WriteLine(CliLog.ColorWhite, i, " UpdateEntityDisplayName - ", entity);
                }
                catch
                {
                    CliLog.WriteLine(CliLog.ColorRed, i, " UpdateEntityDisplayName - ", entity);
                }
                i++;
            }
        }
        private void Packger(string solutionFile)
        {
            var command = CreateCommandArgs(solutionFile);
            var path    = "\"" + GetParentFolder(currentDirectory) + $@"\packages\Microsoft.CrmSdk.CoreTools.{arguments.Version}\content\bin\coretools\SolutionPackager.exe" + "\"";

            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "Executing ", CliLog.ColorRed, "Solution Packager");
            CliLog.WriteLine();
            CliLog.WriteLine(CliLog.ColorWhite, " " + path + " " + command);
            CliLog.WriteLine();
            var process = new Process
            {
                StartInfo = new ProcessStartInfo(path)
                {
                    Arguments              = $"{command}",
                    UseShellExecute        = false,
                    RedirectStandardOutput = true,
                    RedirectStandardError  = true,
                    CreateNoWindow         = true
                }
            };

            process.Start();
            while (!process.StandardOutput.EndOfStream)
            {
                var line = process.StandardOutput.ReadLine();
                CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorWhite, line);
            }
            process.WaitForExit();
        }
Пример #7
0
        public void Run()
        {
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "START ", CliLog.ColorMagenta, "DATA-SOURCE");
            CliLog.WriteLine(CliLog.ColorWhite, "|");

            //json.name = json.name.ToLower();

            if (!IsValid())
            {
                return;
            }

            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorRed, "Creating", CliLog.ColorGreen, " Data Source: ", CliLog.ColorCyan, $"{DataSourceName}");
            CliLog.WriteLine(CliLog.ColorWhite, "| ");
            CliLog.Write(CliLog.ColorWhite, "| ");
            var wait = new Thread(ThreadWork.Dot);

            wait.Start();

            RegisterDataSource();

            wait.Abort();

            CliLog.WriteLine();
            CliLog.WriteLine(CliLog.ColorWhite, "| ");
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorRed, "Created", CliLog.ColorGreen, " Data Source: ", CliLog.ColorCyan, $"{DataSourceName}");
            CliLog.WriteLine(CliLog.ColorWhite, "|");
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "END ", CliLog.ColorMagenta, "DATA-SOURCE");
        }
Пример #8
0
        private void RunProxyType()
        {
            var path = "\"" + GetParentFolder(currentDirectory) + $@"\packages\Microsoft.CrmSdk.CoreTools.{arguments.Version}\content\bin\coretools\CrmSvcUtil.exe" + "\"";

            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "Executing CrmSvcUtil");
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorCyan, "\t" + path);
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorCyan, "\t" + CreateCommandArgsLog());
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "");
            var process = new Process
            {
                StartInfo = new ProcessStartInfo(path)
                {
                    Arguments              = CreateCommandArgs(),
                    UseShellExecute        = false,
                    RedirectStandardOutput = true,
                    RedirectStandardError  = true,
                    CreateNoWindow         = true
                }
            };

            if (json.entities != null && json.entities.Length > 0)
            {
                process.StartInfo.EnvironmentVariables.Add(ENVIRONMENT_ENTITIES, string.Join(",", json.entities));
            }
            process.Start();
            while (!process.StandardOutput.EndOfStream)
            {
                var line = process.StandardOutput.ReadLine();
                CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorWhite, line);
            }
            process.WaitForExit();
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "Executed CrmSvcUtil");
        }
Пример #9
0
        internal void Run()
        {
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "START ", CliLog.ColorMagenta, "DOWNLOAD-WEBRESOURCES");

            if (!IsValid())
            {
                return;
            }

            var list     = DownloadWebResources();
            var jsonFile = Path.Combine(currentDirectory, arguments.Json);

            var all             = SimpleJson.DeserializeObject <Json>(File.ReadAllText(jsonFile));
            var jsonWebResource = all.webresources.FirstOrDefault(x => x.profile == arguments.Profile);

            if (jsonWebResource != null)
            {
                foreach (var item in list)
                {
                    if (!jsonWebResource.includefiles.Contains(item))
                    {
                        jsonWebResource.includefiles.Add(item);
                    }
                }
                jsonWebResource.dependencies = GetUpdateDependencies(jsonWebResource.dependencies);
                var updateJson = SimpleJson.SerializeObject(all);
                updateJson = updateJson.Replace("[entity]", "__entity__");
                updateJson = Utility.FormatJson(updateJson);
                updateJson = updateJson.Replace("__entity__", "[entity]");
                Utility.ForceWriteAllText(jsonFile, updateJson);
            }
            AddProjectItemGroup(list);

            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "END ", CliLog.ColorMagenta, "DOWNLOAD-WEBRESOURCES");
        }
        private Entity RegisterAssembly(FileSystemInfo assemblyFilePath, Assembly assembly, IEnumerable <Type> plugins)
        {
            var assemblyProperties = assembly.GetName().FullName
                                     .Split(",= ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
            var assemblyName = assembly.GetName().Name;
            var fetchData    = new
            {
                name = assemblyProperties[0]
            };
            var fetchXml         = $@"
<fetch>
  <entity name='pluginassembly'>
    <attribute name='pluginassemblyid' />
    <attribute name='content' />
    <filter type='and'>
      <condition attribute='name' operator='eq' value='{fetchData.name}'/>
    </filter>
  </entity>
</fetch>";
            var rows             = crmServiceClient.RetrieveMultiple(new FetchExpression(fetchXml));
            var pluginAssemblyId = Guid.Empty;
            var existingContent  = string.Empty;

            if (rows.Entities.Count > 0)
            {
                var entity = rows.Entities[0];
                pluginAssemblyId = entity.Id;
                existingContent  = entity.GetAttributeValue <string>("content");
            }
            var content = Convert.ToBase64String(File.ReadAllBytes(assemblyFilePath.FullName));

            if (content == existingContent)
            {
                return(null);
            }
            var plugin = new Entity("pluginassembly")
            {
                ["content"]        = content,
                ["name"]           = assemblyProperties[0],
                ["culture"]        = assemblyProperties[4],
                ["version"]        = assemblyProperties[2],
                ["publickeytoken"] = assemblyProperties[6],
                ["sourcetype"]     = new OptionSetValue(0), /* 0 = database */
                ["isolationmode"]  = new OptionSetValue(2)  /* 2 = sandbox */
            };

            if (pluginAssemblyId == Guid.Empty)
            {
                CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "Registering Assembly: ", CliLog.ColorCyan, $"{assemblyProperties[0]}");
                pluginAssemblyId           = crmServiceClient.Create(plugin);
                plugin["pluginassemblyid"] = pluginAssemblyId;
            }
            else
            {
                CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorBlue, "Updating Assembly: ", CliLog.ColorCyan, $"{assemblyProperties[0]}");
                plugin["pluginassemblyid"] = pluginAssemblyId;
                crmServiceClient.Update(plugin);
            }
            return(plugin);
        }
Пример #11
0
        private static void CrmCli(CommandLineArgs arguments)
        {
#if DEBUG
            CliLog.WriteLine(CliLog.ColorRed, new string('█', CliLog.StarLength + 10));
            CliLog.WriteLine(CliLog.ColorRed, " DEBUG MODE");
            CliLog.WriteLine(CliLog.ColorRed, new string('█', CliLog.StarLength + 10));
#endif
            CliLog.WriteLine(CliLog.ColorGreen, " ____                              _           ____                  ____             _  ___ _     ____ _ _ ");
            CliLog.WriteLine(CliLog.ColorGreen, "|  _ \\ _   _ _ __   __ _ _ __ ___ (_) ___ ___ / ___|_ __ _ __ ___   |  _ \\  _____   _| |/ (_) |_  / ___| (_)");
            CliLog.WriteLine(CliLog.ColorGreen, "| | | | | | | '_ \\ / _` | '_ ` _ \\| |/ __/ __| |   | '__| '_ ` _ \\  | | | |/ _ \\ \\ / / ' /| | __|| |   | | |");
            CliLog.WriteLine(CliLog.ColorGreen, "| |_| | |_| | | | | (_| | | | | | | | (__\\__ \\ |___| |  | | | | | |_| |_| |  __/\\ V /| . \\| | |_ | |___| | |");
            CliLog.WriteLine(CliLog.ColorGreen, "|____/ \\__, |_| |_|\\__,_|_| |_| |_|_|\\___|___/\\____|_|  |_| |_| |_(_)____/ \\___| \\_/ |_|\\_\\_|\\__(_)____|_|_|");
            CliLog.WriteLine(CliLog.ColorGreen, "       |___/                        ", CliLog.ColorWhite, "https://github.com/phuocle/Dynamics-Crm-DevKit", CliLog.ColorBlue, $" {Const.Version}", CliLog.ColorWhite, " Build: ", CliLog.ColorBlue, Const.BuildDate);
            CliLog.WriteLine();
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "Current directory path: ", CliLog.ColorWhite, CurrentDirectory);
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "DynamicsCrm.DevKit.Cli.exe path: ", CliLog.ColorWhite, Assembly.GetExecutingAssembly().Location);
#if !DEBUG
            try
            {
#endif
            var jsonFile     = Path.Combine(CurrentDirectory, arguments.Json);
            var jsonFileInfo = new FileInfo(jsonFile);
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "DynamicsCrm.DevKit.Cli.json path: ", CliLog.ColorWhite, jsonFileInfo.FullName);
            if (arguments.SdkLogin.Length > 0 && arguments.SdkLogin.ToLower() == "yes")
            {
                CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "Arguments: ",
                                 CliLog.ColorMagenta, "/sdklogin:"******"\"yes\"", " ",
                                 CliLog.ColorMagenta, "/json:", CliLog.ColorWhite, "\"" + arguments.Json, "\" ",
                                 CliLog.ColorMagenta, "/type:", CliLog.ColorWhite, "\"" + arguments.Type, "\" ",
                                 CliLog.ColorMagenta, "/profile:", CliLog.ColorWhite, "\"" + arguments.Profile + "\""
                                 );
            }
            else
            {
                CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "Arguments: ",
                                 CliLog.ColorMagenta, "/conn:", CliLog.ColorWhite, "\"" + XrmHelper.BuildConnectionStringLog2(arguments.Connection), "\" ",
                                 CliLog.ColorMagenta, "/json:", CliLog.ColorWhite, "\"" + arguments.Json, "\" ",
                                 CliLog.ColorMagenta, "/type:", CliLog.ColorWhite, "\"" + arguments.Type, "\" ",
                                 CliLog.ColorMagenta, "/profile:", CliLog.ColorWhite, "\"" + arguments.Profile + "\""
                                 );
            }

            Run(arguments);
#if DEBUG
            CliLog.WriteLine(CliLog.ColorRed, new string('█', CliLog.StarLength + 10));
            CliLog.WriteLine(CliLog.ColorRed, "!!! FINISHED !!!");
            CliLog.WriteLine(CliLog.ColorRed, new string('█', CliLog.StarLength + 10));
            Console.ReadKey();
#endif
#if !DEBUG
        }

        catch (Exception e)
        {
            CliLog.WriteLine(CliLog.ColorError, $"{e.Message}");
            Console.ReadKey();
        }
#endif
        }
        private void UpdateDisplayNameColumns()
        {
            var i            = 1;
            var ingoreFields = new List <string> {
                "createdby",
                "createdon",
                "modifiedby",
                "modifiedon",
                "ownerid",
                "transactioncurrencyid"
            };

            foreach (var entity in Entities)
            {
                var requests = new ExecuteMultipleRequest()
                {
                    Settings = new ExecuteMultipleSettings()
                    {
                        ContinueOnError = true,
                        ReturnResponses = true
                    },
                    Requests = new OrganizationRequestCollection()
                };
                var request = new RetrieveEntityRequest
                {
                    EntityFilters         = EntityFilters.Attributes,
                    LogicalName           = entity,
                    RetrieveAsIfPublished = true
                };
                var response = (RetrieveEntityResponse)service.Execute(request);
                foreach (var attr in response.EntityMetadata.Attributes)
                {
                    if (ingoreFields.Contains(attr.LogicalName))
                    {
                        continue;
                    }
                    if (attr.DisplayName?.UserLocalizedLabel?.Label != null)
                    {
                        if (attr.DisplayName.UserLocalizedLabel.Label.StartsWith(NOT_USE))
                        {
                            continue;
                        }
                        attr.DisplayName = new Label($"{NOT_USE}{attr.DisplayName.UserLocalizedLabel.Label}", 1033);
                        var update = new UpdateAttributeRequest()
                        {
                            Attribute  = attr,
                            EntityName = entity
                        };
                        requests.Requests.Add(update);
                    }
                }
                if (requests.Requests.Count > 0)
                {
                    var res = (ExecuteMultipleResponse)service.Execute(requests);
                    CliLog.WriteLine(CliLog.ColorWhite, i, " UpdateDisplayNameColumns - ", entity, " error: ", res.Responses.Count);
                }
                i++;
            }
        }
Пример #13
0
        private void UpdateDependency(Dependency dependency, int j, int count)
        {
            var           len          = count.ToString().Length;
            List <string> dependencies = dependency.dependencies;

            dependencies            = dependencies.Distinct().ToList();
            dependency.dependencies = dependencies;
            var dependencyXml = GetDependencyXml(dependency.dependencies, out var foundDependencies);

            foreach (var webResourceName in dependency.webresources)
            {
                var    fetchXml = $@"
<fetch>
  <entity name='webresource'>
    <attribute name='dependencyxml' />
    <filter type='and'>
      <condition attribute='name' operator='eq' value='{webResourceName}'/>
    </filter>
  </entity>
</fetch>";
                var    rows     = crmServiceClient.RetrieveMultiple(new FetchExpression(fetchXml));
                string existingDependencyXml;
                if (rows.Entities.Count > 0)
                {
                    existingDependencyXml = rows.Entities[0].GetAttributeValue <string>("dependencyxml");
                }
                else
                {
                    CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorBlue, string.Format("{0,0}{1," + len + "}", "", j) + ": ", CliLog.ColorMagenta, "Not existing", CliLog.ColorGreen, " Webresource ", CliLog.ColorCyan, webResourceName);
                    return;
                }
                if (existingDependencyXml != dependencyXml)
                {
                    var webResourceId = rows.Entities[0].Id;
                    var entity        = new Entity("webresource", webResourceId)
                    {
                        ["dependencyxml"] = dependencyXml
                    };
                    CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorBlue, string.Format("{0,0}{1," + len + "}", "", j), ": ", CliLog.ColorMagenta, "Updating ", CliLog.ColorCyan, webResourceName, CliLog.ColorGreen, " dependencies");
                    foreach (var d in foundDependencies)
                    {
                        CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorCyan, "\t" + d);
                    }
                    crmServiceClient.Update(entity);
                    if (!WebResourcesToPublish.Contains(webResourceId))
                    {
                        WebResourcesToPublish.Add(webResourceId);
                    }
                }
                else
                {
                    CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorBlue, string.Format("{0,0}{1," + len + "}", "", j) + ": ", CliLog.ColorCyan, webResourceName, CliLog.ColorGreen, " dependencies");
                    foreach (var d in foundDependencies)
                    {
                        CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorCyan, "\t" + d);
                    }
                }
            }
        }
        private void UpdateCharts()
        {
            var i = 1;

            foreach (var entity in Entities)
            {
                var requests = new ExecuteMultipleRequest()
                {
                    Settings = new ExecuteMultipleSettings()
                    {
                        ContinueOnError = true,
                        ReturnResponses = true
                    },
                    Requests = new OrganizationRequestCollection()
                };

                var request = new RetrieveEntityRequest
                {
                    EntityFilters = EntityFilters.Entity,
                    LogicalName   = entity
                };
                var response  = (RetrieveEntityResponse)service.Execute(request);
                var fetchData = new
                {
                    primaryentitytypecode = response.EntityMetadata.ObjectTypeCode.Value
                };
                var fetchXml = $@"
<fetch>
  <entity name='savedqueryvisualization'>
    <attribute name='name' />
    <attribute name='primaryentitytypecode' />
    <attribute name='savedqueryvisualizationidunique' />
    <filter type='and'>
      <condition attribute='primaryentitytypecode' operator='eq' value='{fetchData.primaryentitytypecode/*1*/}'/>
    </filter>
  </entity>
</fetch>";
                var rows     = service.RetrieveMultiple(new FetchExpression(fetchXml));
                foreach (var row in rows.Entities)
                {
                    var name   = row.GetAttributeValue <string>("name");
                    var update = new Entity("savedqueryvisualization", row.Id);
                    update["name"] = $"{NOT_USE}{name}";
                    requests.Requests.Add(
                        new UpdateRequest {
                        Target = update
                    }
                        );
                }
                if (requests.Requests.Count > 0)
                {
                    service.Execute(requests);
                    CliLog.WriteLine(CliLog.ColorRed, i, " UpdateCharts - ", entity);
                }
                i++;
            }
        }
        private void DownloadEntityList()
        {
            var fetchData = new
            {
                adx_websiteid = WebSiteId
            };
            var fetchXml = $@"
<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>
  <entity name='adx_entitylist'>
    <attribute name='adx_registerstartupscript'/>
    <attribute name='adx_name'/>
    <order attribute='adx_name' descending='false'/>
    <filter type='and'>
      <condition attribute='adx_websiteid' operator='eq' value='{fetchData.adx_websiteid}'/>
    </filter>
  </entity>
</fetch>
";
            var rows     = crmServiceClient.RetrieveMultiple(new FetchExpression(fetchXml));

            if (rows.Entities.Count == 0)
            {
                return;
            }
            var folder = Path.Combine(currentDirectory, "Entity List");

            if (!Directory.Exists(folder))
            {
                Directory.CreateDirectory(folder);
            }
            var total = rows.Entities.Count;
            var len   = total.ToString().Length;
            var i     = 1;

            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "Processing Entity List ...");
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "Found: ", CliLog.ColorRed, total, CliLog.ColorGreen, " entity list");
            foreach (var entity in rows.Entities)
            {
                var name = entity.GetAttributeValue <string>("adx_name");
                if (name == null)
                {
                    continue;
                }
                var file      = Path.Combine(folder, $"{name}.js");
                var shortFile = file.Substring(currentDirectory.Length + 1);
                if (File.Exists(file))
                {
                    Utility.TryDeleteFile(file);
                }
                var script = entity.GetAttributeValue <string>("adx_registerstartupscript") ?? string.Empty;
                downloadedFiles.Add(file);
                Utility.ForceWriteAllText(file, script);
                CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorCyan, string.Format("{0,0}|{1," + len + "}", "", i) + ": ", CliLog.ColorWhite, "Downloaded: ", CliLog.ColorGreen, shortFile);
                i++;
            }
        }
        private void DownloadWebPage()
        {
            var fetchData = new
            {
                adx_websiteid = WebSiteId
            };
            var fetchXml = $@"
<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>
  <entity name='adx_webpage'>
    <attribute name='adx_webpageid'/>
    <attribute name='adx_name'/>
    <attribute name='adx_customjavascript'/>
    <attribute name='adx_customcss'/>
    <attribute name='adx_copy'/>
    <attribute name='adx_summary'/>
    <order attribute='adx_name' descending='false'/>
    <filter type='and'>
      <condition attribute='adx_websiteid' operator='eq' value='{fetchData.adx_websiteid}'/>
      <condition attribute='adx_rootwebpageid' operator='not-null'/>
    </filter>
  </entity>
</fetch>
";
            var rows     = crmServiceClient.RetrieveMultiple(new FetchExpression(fetchXml));

            if (rows.Entities.Count == 0)
            {
                return;
            }
            var folder = Path.Combine(currentDirectory, "Web File");

            if (!Directory.Exists(folder))
            {
                Directory.CreateDirectory(folder);
            }
            var total = rows.Entities.Count();
            var len   = total.ToString().Length;
            var i     = 1;

            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "Processing Web Page ...");
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "Found: ", CliLog.ColorRed, total, CliLog.ColorGreen, " web page");
            var rows2 = (from entity in rows.Entities
                         select new
            {
                adx_name = entity.GetAttributeValue <string>("adx_name") ?? string.Empty,
                adx_customjavascript = entity.GetAttributeValue <string>("adx_customjavascript") ?? string.Empty,
                adx_customcss = entity.GetAttributeValue <string>("adx_customcss") ?? string.Empty,
                adx_copy = entity.GetAttributeValue <string>("adx_copy") ?? string.Empty,
                adx_summary = entity.GetAttributeValue <string>("adx_summary") ?? string.Empty
            }).ToList();

            foreach (var row in rows2)
            {
                i++;
            }
        }
        private void DownloadWebResources()
        {
            var fetchData = new
            {
                uniquename = json.solution
            };
            var fetchXml = $@"
<fetch>
  <entity name='webresource'>
    <attribute name='name' />
    <attribute name='webresourcetype' />
    <attribute name='content' />
    <order attribute='name' />
    <link-entity name='solutioncomponent' from='objectid' to='webresourceid' link-type='inner' alias='sc'>
      <link-entity name='solution' from='solutionid' to='solutionid' link-type='inner' alias='s'>
        <filter type='and'>
          <condition attribute='uniquename' operator='eq' value='{fetchData.uniquename}'/>
        </filter>
      </link-entity>
    </link-entity>
  </entity>
</fetch>";

            var rows = crmServiceClient.RetrieveMultiple(new FetchExpression(fetchXml));

            if (rows.Entities.Count == 0)
            {
                throw new Exception("Not found any webresources to download");
            }
            var downloadFiles = DownloadFiles(rows.Entities);

            var totalDownloadWebResources = downloadFiles.Count;
            var len = totalDownloadWebResources.ToString().Length;

            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "Found: ", CliLog.ColorYellow, totalDownloadWebResources, CliLog.ColorGreen, " webresources");
            CliLog.WriteLine(CliLog.ColorWhite, "|");

            foreach (var downloadFile in downloadFiles)
            {
                Utility.TryDeleteFile(downloadFile.FileName);
            }

            var i = 1;

            foreach (var downloadFile in downloadFiles)
            {
                var isOk = DownloadWebResourceFile(downloadFile, i, totalDownloadWebResources);
                if (isOk)
                {
                    var shortFileName = downloadFile.FileName.Substring(currentDirectory.Length + 1);
                    CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorCyan, string.Format("{0,0}{1," + len + "}", "", i) + ": ", CliLog.ColorWhite, "Downloaded ", CliLog.ColorGreen, downloadFile.Name, CliLog.ColorWhite, " to: ", CliLog.ColorGreen, shortFileName);
                }
                i++;
            }
        }
Пример #18
0
        public void Run()
        {
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "START ", CliLog.ColorMagenta, "PROXY-TYPES");

            if (!IsValid())
            {
                return;
            }
            RunProxyType();

            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "END ", CliLog.ColorMagenta, "PROXY-TYPES");
        }
Пример #19
0
        internal void Run()
        {
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "START ", CliLog.ColorMagenta, LOG);
            CliLog.WriteLine(CliLog.ColorWhite, "|");

            if (!IsValid())
            {
                return;
            }

            var folder = Path.Combine(currentDirectory, json.solution);

            if (!Directory.Exists(folder))
            {
                Directory.CreateDirectory(folder);
            }
            else
            {
                var files = Directory.GetFiles(folder, "*.*", SearchOption.AllDirectories);
                if (files.Count() > 0)
                {
                    throw new Exception($"{LOG} Folder '{folder}' have an exsiting file(s). Please delete all file(s) and try it again.");
                }
            }

            ReadDownloadedReportFiles(folder);

            if (downloadedReportFiles.Count() == 0)
            {
                CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "Not found any reports to download");
                CliLog.WriteLine(CliLog.ColorWhite, "|");
                CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "END ", CliLog.ColorMagenta, LOG);
                return;
            }
            var totalDownloadFiles = downloadedReportFiles.Count;
            var len = totalDownloadFiles.ToString().Length;

            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "Found: ", CliLog.ColorYellow, totalDownloadFiles, CliLog.ColorGreen, " reports");

            var i = 1;

            foreach (var downloadFile in downloadedReportFiles)
            {
                Utility.ForceWriteAllText(downloadFile.FileName, downloadFile.Content);
                CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, string.Format("{0,0}{1," + len + "}", "", i) + ": ", CliLog.ColorWhite, "Downloaded ", CliLog.ColorCyan, downloadFile.Name, CliLog.ColorWhite, " to: ", CliLog.ColorGreen, downloadFile.FileName);
                i++;
            }

            CliLog.WriteLine(CliLog.ColorWhite, "|");
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "END ", CliLog.ColorMagenta, LOG);
        }
 private string GetSolutionFromCrm()
 {
     if (json.type.ToLower().Trim() == "Extract".ToLower())
     {
         var timer        = Stopwatch.StartNew();
         var fileName     = Utility.FormatSolutionVersionString(json.solution, System.Version.Parse(CrmVersion), json.solutiontype);
         var solutionFile = Path.Combine(currentDirectory, json.folder, "Solutions-Extract", fileName);
         CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "Export ", CliLog.ColorCyan, json.solutiontype, CliLog.ColorGreen, " solution: ", CliLog.ColorCyan, json.solution, CliLog.ColorGreen, " to: ", CliLog.ColorCyan, solutionFile);
         CliLog.WriteLine(CliLog.ColorWhite, "|");
         var request = new ExportSolutionRequest
         {
             Managed      = json.solutiontype == "Managed",
             SolutionName = json.solution
         };
         try
         {
             var wait = new Thread(ThreadWork.SolutionPackagerDots);
             wait.Start();
             var response = (ExportSolutionResponse)crmServiceClient.Execute(request);
             wait.Abort();
             CliLog.WriteLine();
             var tempFile = Utility.WriteTempFile(fileName, response.ExportSolutionFile);
             var dir      = Path.GetDirectoryName(solutionFile);
             if (!Directory.Exists(dir))
             {
                 Directory.CreateDirectory(dir);
             }
             File.Copy(tempFile, solutionFile, true);
             CliLog.WriteLine(CliLog.ColorWhite, "|");
             CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, $"Solution exported in  {timer.Elapsed:c}");
             CliLog.WriteLine(CliLog.ColorWhite, "|");
             return(solutionFile);
         }
         catch (TimeoutException te)
         {
             CliLog.WriteLine(CliLog.ColorWhite, "|");
             CliLog.WriteLine(CliLog.ColorWhite, "|");
             CliLog.WriteLine(ConsoleColor.White, te.Message);
             CliLog.WriteLine(CliLog.ColorWhite, "|");
             CliLog.WriteLine(CliLog.ColorWhite, "|");
             CliLog.WriteLine(ConsoleColor.Red, "!!! [SOLUTION-PACKAGER] FAILED !!!");
             throw;
         }
     }
     else
     {
         var fileName     = Utility.FormatSolutionVersionString(json.solution, System.Version.Parse(CrmVersion), json.solutiontype);
         var solutionFile = Path.Combine(currentDirectory, json.folder, "Solutions-Pack", fileName);
         return(solutionFile);
     }
 }
Пример #21
0
        internal void Run()
        {
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "START ", CliLog.ColorMagenta, "SOLUTION-PACKAGER");

            if (!IsValid())
            {
                return;
            }

            var solution = GetSolutionFromCrm();

            Packger(solution);

            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "END ", CliLog.ColorMagenta, "SOLUTION-PACKAGER");
        }
        public void Run()
        {
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "START ", CliLog.ColorMagenta, "WORKFLOW");

            if (!IsValid())
            {
                return;
            }
            foreach (var file in WorkflowFiles)
            {
                RegisterWorkflow(file);
            }

            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "END ", CliLog.ColorMagenta, "WORKFLOW");
        }
        internal void Run()
        {
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "START ", CliLog.ColorMagenta, "[DOWNLOAD-WEBRESOURCES]");
            CliLog.WriteLine(CliLog.ColorWhite, "|");

            if (!IsValid())
            {
                return;
            }

            DownloadWebResources();

            CliLog.WriteLine(CliLog.ColorWhite, "|");
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "END ", CliLog.ColorMagenta, "[DOWNLOAD-WEBRESOURCES]");
        }
        public void Run()
        {
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "START ", CliLog.ColorMagenta, "PLUGIN");

            if (!IsValid())
            {
                return;
            }
            foreach (var file in PluginFiles)
            {
                RegisterPlugin(file);
            }

            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "START ", CliLog.ColorMagenta, "END");
        }
        public void Run()
        {
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "START ", CliLog.ColorMagenta, "DATA-PROVIDER");

            if (!IsValid())
            {
                return;
            }
            foreach (var file in DataProviderFiles)
            {
                RegisterDataProvider(file);
            }

            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "END ", CliLog.ColorMagenta, "DATA-PROVIDER");
        }
        private void GeneratorJsForm()
        {
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "START ", CliLog.ColorMagenta, "GENERATOR JS FORM");

            var entities = new List <string>();

            string[] files;
            var      folder = $"{currentDirectory}\\{json.rootfolder}";
            //if (json.entities == null || json.entities.Count == 0)
            //{
            var pattern = "*.form.js";

            files = Directory.GetFiles(folder, pattern);
            //}
            //else
            //{
            //    //if (json.entities.Count == 1 && json.entities[0].ToLower() == "all")
            //    //    files = GetAllEntities();
            //    //else
            //        files = json.entities.Select(e => $"{folder}{e}.form.js").ToArray();
            //}

            foreach (var file in files)
            {
                var fInfo   = new FileInfo(file);
                var columns = fInfo.Name.Split(".".ToCharArray());
                entities.Add(columns[0]);
            }
            if (entities.Count == 0)
            {
                CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "NOT FOUND ", CliLog.ColorMagenta, " ENTIIES !!!");
                return;
            }

            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "Found: ", CliLog.ColorMagenta, entities.Count, CliLog.ColorGreen, " entities");
            var i = 1;

            foreach (var entity in entities)
            {
#if DEBUG
                //if (entity != "abiz_Sla") continue;
#endif
                GeneratorJsForm(entity, i, entities.Count);
                i++;
            }

            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "END ", CliLog.ColorMagenta, "GENERATOR JS FORM");
        }
        internal void Run()
        {
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "START ", CliLog.ColorMagenta, "PORTAL");

            if (!IsValid())
            {
                return;
            }

            //DownloadEntityForm();
            //DownloadEntityList();
            //DownloadWebFile();
            //DownloadWebPage();

            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "END ", CliLog.ColorMagenta, "PORTAL");
        }
Пример #28
0
        private void PublishWebResources()
        {
            var guids        = WebResourcesToPublish.Select(g => g.ToString());
            var webresources = string.Join("</webresource><webresource>", guids);
            var publish      = new PublishXmlRequest
            {
                ParameterXml =
                    "<importexportxml><webresources>" +
                    "<webresource>" + webresources + "</webresource>" +
                    "</webresources></importexportxml>"
            };

            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "Publishing WebResources");
            crmServiceClient.Execute(publish);
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "Published WebResources");
        }
        private void RegisterWorkflowType(Entity workflowEntity, TypeInfo workflow)
        {
            var workflowAttributes = workflow.GetCustomAttributesData()
                                     .Where(a => a.AttributeType.Name == typeof(CrmPluginRegistrationAttribute).Name).ToList();

            if (!workflowAttributes.Any())
            {
                return;
            }
            foreach (var workflowAttribute in workflowAttributes)
            {
                var attribute = workflowAttribute.CreateFromData();
                var fetchData = new
                {
                    typename = workflow.FullName
                };
                var fetchXml   = $@"
<fetch>
  <entity name='plugintype'>
    <attribute name='plugintypeid' />
    <filter type='and'>
      <condition attribute='typename' operator='eq' value='{fetchData.typename}'/>
    </filter>
  </entity>
</fetch>";
                var rows       = crmServiceClient.RetrieveMultiple(new FetchExpression(fetchXml));
                var pluginType = new Entity("plugintype")
                {
                    ["name"]                      = attribute.Name,
                    ["friendlyname"]              = attribute.FriendlyName,
                    ["pluginassemblyid"]          = new EntityReference("pluginassembly", Guid.Parse(workflowEntity["pluginassemblyid"].ToString())),
                    ["typename"]                  = workflow.FullName,
                    ["workflowactivitygroupname"] = attribute.GroupName
                };
                if (rows.Entities.Count == 0)
                {
                    CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorRed, "   Registering", CliLog.ColorGreen, " Type: ", CliLog.ColorCyan, $"{workflow.FullName}");
                    crmServiceClient.Create(pluginType);
                }
                else
                {
                    pluginType["plugintypeid"] = rows.Entities[0].Id;
                    CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, " Type: ", CliLog.ColorCyan, $"{workflow.FullName}");
                    crmServiceClient.Update(pluginType);
                }
            }
        }
Пример #30
0
        public void Run()
        {
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "START ", CliLog.ColorMagenta, LOG);
            CliLog.WriteLine();

            if (!IsValid())
            {
                return;
            }

            CopyFile();

            RunProxyType();

            CliLog.WriteLine();
            CliLog.WriteLine(CliLog.ColorWhite, "|", CliLog.ColorGreen, "END ", CliLog.ColorMagenta, LOG);
        }