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"); } }
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"); }
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(); }
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"); }
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"); }
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); }
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++; } }
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++; } }
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"); }
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); } }
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"); }
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); } } }
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); }