Exemple #1
0
        /// <summary>
        /// Crea un procedure con todos los SDT seleccionados por el usuario.
        /// </summary>
        public static void CreateProcedureSDT()
        {
            IKBService kB = UIServices.KB;

            if (kB != null && kB.CurrentModel != null)
            {
                SelectObjectOptions selectObjectOption = new SelectObjectOptions();
                selectObjectOption.MultipleSelection = true;
                KBModel kbModel = UIServices.KB.CurrentModel;

                Artech.Genexus.Common.Objects.Procedure proc = new Artech.Genexus.Common.Objects.Procedure(kbModel);
                string procName = "SDTForceGenerate";

                proc.Name = procName;
                proc.ProcedurePart.Source = "// Generated by KBDoctor, to generate SDT source";
                proc.SetPropertyValue("IsMain", true);
                proc.Save();

                //MUESTRO LOS SDT A REGENERAR
                selectObjectOption.ObjectTypes.Add(KBObjectDescriptor.Get <SDT>());
                foreach (KBObject kBObject in UIServices.SelectObjectDialog.SelectObjects(selectObjectOption))
                {
                    SDT sdtObj = (SDT)kBObject;
                    CodeGeneration.AddSDTVariable(kbModel, proc, sdtObj);
                    Application.DoEvents();
                }

                proc.Save();


                //Para cada uno de los generadores del environment, genero el proc con los SDT.

                GxModel gm = UIServices.KB.WorkingEnvironment.TargetModel.GetAs <GxModel>();

                foreach (var gen in gm.Environments)
                {
                    int generator = gen.Generator;

                    KBObject copy = BLServices.KnowledgeManager.Clone(proc);
                    copy.Name = procName + "_" + generator.ToString();
                    copy.SetPropertyValue(Artech.Genexus.Common.Properties.TRN.Generator, new EnvironmentCategoryReference {
                        Definition = gen
                    });
                    UIServices.Objects.Save(copy);

                    GenexusUIServices.Build.Rebuild(copy.Key);

                    do
                    {
                        Application.DoEvents();
                    } while (GenexusUIServices.Build.IsBuilding);
                    copy.Delete();
                }
                proc.Delete();
            }
        }
Exemple #2
0
        public static void AddSDTVariable(KBModel kbModel, Artech.Genexus.Common.Objects.Procedure proc, SDT sdtobj)
        {
            Variable oVariableNew = new Variable(proc.Variables);

            oVariableNew.Name = sdtobj.Name;
            oVariableNew.Type = eDBType.GX_SDT;

            DataType.ParseInto(kbModel, sdtobj.Name, oVariableNew);

            proc.Variables.Add(oVariableNew);
        }
Exemple #3
0
        private static void GenerateInsertProcedure(KBModel kbModel, Table tabla, SDT Sdt)
        {
            Artech.Genexus.Common.Objects.Procedure proc = new Artech.Genexus.Common.Objects.Procedure(kbModel);
            string procName = "NEW_" + tabla.Name;

            proc.Name = procName;
            string Source = "// Generated by KBDoctor " + DateTime.Now.ToString() + Environment.NewLine;


            AddSDTVariable(kbModel, proc, Sdt);
            Source += GenerateNewFromSDT(tabla, Sdt);
            proc.ProcedurePart.Source = Source;
            proc.Rules.Source         = GenerateParmRuleINSDT(Sdt.Name);
            AddVariables(kbModel, proc, tabla);
            proc.Description = "Insert for Table " + tabla.Name + ".";
            proc.Save();
        }
Exemple #4
0
        private static void GenerateExistProcedure(KBModel kbModel, Table tabla, SDT sdt)
        {
            Artech.Genexus.Common.Objects.Procedure proc = new Artech.Genexus.Common.Objects.Procedure(kbModel);
            string procName = "EXISTS_" + tabla.Name;

            AddSDTVariable(kbModel, proc, sdt);

            proc.Name = procName;
            string Source;

            Source  = "for each" + Environment.NewLine;
            Source += GenerateWhere(tabla);
            Source += "         &Exists=true" + Environment.NewLine;
            Source += "     when none " + Environment.NewLine;
            Source += "         &Exists=false" + Environment.NewLine;
            Source += "endfor" + Environment.NewLine;

            proc.ProcedurePart.Source = Source;

            string Rules = "parm(";

            foreach (TableAttribute pk in tabla.TableStructure.PrimaryKey)
            {
                Rules += "in:&" + pk.Name + ",";
            }
            Rules            += "out:&Exists);";
            proc.Rules.Source = Rules;
            AddVariables(kbModel, proc, tabla);

            Variable oVariableNew = new Variable(proc.Variables);

            oVariableNew.Name = "Exists";
            oVariableNew.Type = eDBType.Boolean;

            proc.Variables.Add(oVariableNew);
            proc.Description = "Exists record in Table " + tabla.Name + ".";
            proc.Save();
        }