public static Invocation ToInvocation(this Codeunit codeunit)
        {
            IEnumerable <ParameterBase> signature = new[] {
                new SimpleParameter("ID", codeunit.ID),
                new SimpleParameter("Name", codeunit.Name)
            };

            IEnumerable <ParameterBase> objectProperties = codeunit
                                                           .ObjectProperties
                                                           .Where(p => p.HasValue)
                                                           .SelectMany(p => p.ToParameters());

            IEnumerable <ParameterBase> properties = codeunit
                                                     .Properties
                                                     .Where(p => p.HasValue)
                                                     .SelectMany(p => p.ToParameters());

            IEnumerable <ParameterBase> subObjects = new[] {
                new ScriptBlockParameter(
                    "SubObjects",
                    codeunit.Code.Variables.ToInvocations().Cast <Statement>()
                    .Concat(codeunit.Code.Functions.ToInvocations().Cast <Statement>())
                    .Concat(codeunit.Code.Events.ToInvocations().Cast <Statement>())
                    .Concat(codeunit.Code.Documentation.CodeLines.ToInvocation().Cast <Statement>()))
            };

            return(new Invocation(
                       "New-CBreezeCodeunit",
                       signature
                       .Concat(objectProperties)
                       .Concat(properties)
                       .Concat(subObjects)
                       ));
        }
Exemplo n.º 2
0
        public static void Run(this Codeunit codeunit, string roleTailoredClient, string serverName, int?serverPort, string serverInstance, string companyName)
        {
            var commands = new StringBuilder();

            commands.AppendFormat("runcodeunit?codeunit={0}", codeunit.ID);

            RoleTailoredClient.Run(roleTailoredClient, BuildHyperlink(serverName, serverPort, serverInstance, companyName, commands.ToString()));
        }
Exemplo n.º 3
0
 public static void Write(this Codeunit codeunit, CSideWriter writer)
 {
     writer.BeginSection(codeunit.GetObjectSignature());
     codeunit.ObjectProperties.Write(writer);
     codeunit.Properties.Write(writer);
     codeunit.Code.Write(writer);
     writer.EndSection();
     writer.InnerWriter.WriteLine();
 }
Exemplo n.º 4
0
        public static FileInfo Write(this Codeunit codeunit, string fileName)
        {
            using (var streamWriter = new StreamWriter(fileName, false, Encoding.GetEncoding("ibm850")))
            {
                codeunit.Write(streamWriter);
            }

            return(new FileInfo(fileName));
        }
 protected void AddItemToInputObject(Event item, Codeunit codeunit) => AddItemToInputObject(item, codeunit.Code);
Exemplo n.º 6
0
 public static void Write(this Codeunit codeunit, TextWriter textWriter) => codeunit.Write(new CSideWriter(textWriter));
Exemplo n.º 7
0
 public static FileInfo WriteToFolder(this Codeunit codeunit, string folderName) => codeunit.Write(Path.Combine(folderName, $"cod{codeunit.ID}.txt"));
Exemplo n.º 8
0
        public static bool Restore(List<Parameter> parms)
        {
            Install(parms, false);

            File.Delete("NAVY.success");
            FileStream fs = new FileStream(GetParameter("Name", parms) + ".NAVY", FileMode.Open);
            ZipArchive za = new ZipArchive(fs, ZipArchiveMode.Read);
            ZipArchiveEntry manifest = za.GetEntry("manifest.xml");
            Package p = PackageFile.Load(manifest.Open());

            try { Directory.Delete("DELTA", true); } catch { };
            Directory.CreateDirectory("DELTA");

            Console.WriteLine("Restoring {0} in database ...", p.App.Name);

            // Save data in fields
            Codeunit cu = new Codeunit(CodeunitMode.Restore);
            foreach (var delta in p.Payload.Deltas)
            {
                if (delta.Type == "Table")
                {
                    string FileName = delta.DeltaFile.Split('.')[0];

                    // Extract the delta from the ZIP
                    ZipArchiveEntry deltazip = za.GetEntry(delta.DeltaFile);
                    deltazip.ExtractToFile("DELTA\\" + delta.DeltaFile);
                    string DeltaTxt = File.ReadAllText("DELTA\\" + delta.DeltaFile);
                    if (DeltaTxt.IndexOf("ChangedElements=FieldCollection") != -1)
                    {
                        // Fields added, we are interested
                        foreach (var line in File.ReadAllLines("DELTA\\" + delta.DeltaFile))
                        {
                            int x = 0;
                            for (int i = 0; i < line.Length; i++)
                                if (line[i] == ';')
                                    x++;
                            if (line.IndexOf("                           { ") != -1 && x >= 4)
                            {
                                Match m = Regex.Match(line, @"(?<=\{.)\d{1,100}(?=\;)");
                                if (m.Success)
                                    cu.AddOperation(int.Parse(delta.ID), int.Parse(m.Groups[0].Value));
                            }
                        }
                    }
                }
            }
            var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

            string code = cu.ExportCode(configFile.AppSettings.Settings["ObjectNoForBackup"].Value);
            File.WriteAllText("BackupCodeunit.txt", code);

            using (PowerShell psi = PowerShell.Create())
            {
                psi.AddScript("Set-ExecutionPolicy -ExecutionPolicy RemoteSigned");
                psi.AddScript(NAVTools);

                psi.AddScript(@"Import-NAVApplicationObject -Confirm:$false BackupCodeunit.txt" +
                                " -DatabaseName " +
                                GetParameter("DatabaseName", parms));
                ExecutePowerShell(psi, true);
            }
            // Compiling
            using (PowerShell psi2 = PowerShell.Create())
            {
                psi2.AddScript("Set-ExecutionPolicy -ExecutionPolicy RemoteSigned");
                psi2.AddScript(NAVTools);
                Console.WriteLine("Preparing restore objects ...");
                psi2.AddScript("Compile-NAVApplicationObject " +
                                GetParameter("DatabaseName", parms));
                ExecutePowerShell(psi2, true);
            }
            // - Execute codeunit
            Process.Start(configFile.AppSettings.Settings["ClientInstance"].Value + "/RunCodeunit?Codeunit=50000");

            Console.WriteLine("Awaiting restore codeunit completion...");
            while (!File.Exists("NAVY.success"))
            {
                Thread.Sleep(1000);
                Console.Write(".");
            };
            File.Delete("NAVY.success");
            Console.WriteLine("{0} is restored and ready for use again.", p.App.Name);
            return true;
        }