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