//获取toolbar public Toolbar GetEditToolbar(PbBillInfo billInfo) { var toolbar = new Toolbar(); string btname = string.Empty; foreach (var buttons in billInfo.DetailToolbarInfo.ToolbarButtonGroupInfosInfos) { if (buttons == null) { continue; } foreach (var button in buttons.ToolbarButtonInfos) { if (button.IsDockLeft) { btname = ButtonNameConvert.ConvertToExtTpye(button); if (!toolbar.LNgButtons.Contains(btname)) { toolbar.LNgButtons.Add(btname); } } else { btname = ButtonNameConvert.ConvertToExtTpye(button); if (!toolbar.RNgButtons.Contains(btname)) { toolbar.RNgButtons.Add(btname); } } } } return(toolbar); }
//返回金格fieldset public FieldSet GetBlobdoc(PbBillInfo billInfo) { //含有金格控件 if (billInfo.OfficeInfo.Visible) { FieldSet fieldSet = new FieldSet(); fieldSet.X = billInfo.OfficeInfo.XPos; fieldSet.Y = billInfo.OfficeInfo.YPos; fieldSet.Width = billInfo.OfficeInfo.Width; fieldSet.Height = billInfo.OfficeInfo.Height; fieldSet.Title = string.IsNullOrEmpty(billInfo.BlobdocName) ? "文档控件" : billInfo.BlobdocName; //判断金格控件在tab中位置 foreach (var tabinfo in billInfo.PbTabInfos) { for (int i = 0; i < tabinfo.GridIds.Count; i++) { if (tabinfo.GridIds[i] == "blobdoc") //不是金格控件和进度控件才是grid { fieldSet.Region = Convert.ToString(i); break; } } } return(fieldSet); } else { return(null); } }
public void GetWfGrid(PbBillInfo billInfo) { if (billInfo.WfGridInfo.Visible || billInfo.WfGridInfo.PbBaseTextInfos.Count > 0) { WfGrid = ControlConverter.ConvertToExtPanel(billInfo.WfGridInfo); } }
//用来存 col id , 中文, 控件type public AppPbEditFormParser(PbBillInfo billInfo) { FieldSets = GetFieldSetInfo(billInfo); GridPanels = GetGridPanel(); LayoutForm = GetFormInfo(); Expressions = GetExpressions(billInfo); TB = GetEditToolbar(billInfo); tabinfos = GetTabInfos(billInfo); }
/// <summary> /// 生成app表单服务端dll; /// </summary> /// <param name="fileName"></param> /// <param name="assemblyPath"></param> /// <param name="isGenerateCsFile"></param> /// <param name="csFilePath"></param> /// <returns></returns> public static bool GenerateApp(PbBillInfo billInfo, string assemblyPath, bool isGenerateCsFile, string csFilePath, string ucode) { try { //参数设置 var templateInfo = new TemplateInfo { NameSpacePrefix = "SUP.CustomForm", ClassName = ucode + billInfo.Name.Replace("pform", "aform"), //NG0001pform0000000008 PForm = billInfo.Name.Replace("pform", "aform"), //pform0000000008 EForm = billInfo.Name.Replace("pform", "EFORM"), //EFORM0000000008 QForm = billInfo.Name.Replace("pform", "w_eform_p_list"), //w_eform_p_list0000600008 TableMaster = billInfo.HeadInfo.TableName, Title = billInfo.Description, SqlList = billInfo.PbList.Sql, SqlMaster = billInfo.HeadInfo.Sql }; //List中生成代码转名称相关代码 foreach (var helpControl in billInfo.PbList.PbBaseTextInfos) //mod by ljy 2016.12.08 billInfo.HeadInfo.PbColumns 改成 billInfo.PbList.PbBaseTextInfos { if (helpControl.ControlType.ToString() == "DataHelpEdit") { var helpEdit = (PbDataHelpEditInfo)helpControl; var codeToNameInfo = new CodeToNameInfo { TableName = billInfo.PbList.TableName, CodeName = helpEdit.ColumnInfo.ColumnName, HelpId = helpEdit.DataHelpId, MultiSelect = helpEdit.MultiSelect }; templateInfo.CodeToNameList.Add(codeToNameInfo); } } var controllerTemplate = new AppControllerTemplate(templateInfo); if (isGenerateCsFile) //生成代码文件 { string path = csFilePath + templateInfo.ClassName; controllerTemplate.WriteEx(ref path); NG3.Compile.Compiler.CompileFromFile(path, assemblyPath, true, templateInfo.NameSpacePrefix + "." + templateInfo.ClassName + ".Controller"); } else //不生成代码文件 { string[] codeArray = new string[] { controllerTemplate.WriteEx() }; NG3.Compile.Compiler.CompileFromCode(codeArray, assemblyPath, templateInfo.NameSpacePrefix + "." + templateInfo.ClassName + ".Controller"); } } catch (Exception ex) { throw new Exception(ex.Message); } return(true); }
public void GetPictureBoxs(PbBillInfo billInfo) { foreach (PbPictureboxInfo picturebox in billInfo.HeadInfo.PbPictureboxInfos) { if (picturebox.Visible) { PictureBoxs.Add(ControlConverter.GetPictureBox(picturebox)); } } }
public static PbBillInfo GetBillBase(string fileName) { ParseManager parseManagerApp = new ParseManager(); PbBillInfo billInfo = parseManagerApp.ParseBillFileApp(fileName); fName = fileName.Substring(fileName.LastIndexOf("\\") + 2, fileName.LastIndexOf(".") - fileName.LastIndexOf("\\") - 1); Log("------>>>> 开始解析" + fName + ".ini"); return(billInfo); }
public List <String> GetTabInfos(PbBillInfo billInfo) { foreach (var tabinfo in billInfo.PbTabInfos) { foreach (var gridid in tabinfo.GridIds) { tabinfos.Add(gridid); } } return(tabinfos); }
//groupbox转fieldset,没有groupbox转ngFormPanel private void SetContainer(PbBillInfo billInfo) { //含有groupbox表头 if (billInfo.HeadInfo.PbBaseControlInfos.Count > 0) { //将容器都先放入containers foreach (var headinfo in billInfo.HeadInfo.PbBaseControlInfos) { AppFieldSet fieldSet = new AppFieldSet(); fieldSet.X = headinfo.XPos; fieldSet.Y = headinfo.YPos; fieldSet.Width = headinfo.Width; fieldSet.Height = headinfo.Height; fieldSet.ID = headinfo.Id; fieldSet.Title = ((PbGroupboxInfo)(headinfo)).Text; fieldSets.Add(fieldSet); } } foreach (var pbColumn in billInfo.HeadInfo.PbColumns) { //将控件放到指定的容器内 FindContain(pbColumn, pbColumn.XPos, pbColumn.YPos); } //因为要赋值回去,所以不能foreach for (int i = 0; i < fieldSets.Count; i++) { Dictionary <int, SortedList <int, PbBaseControlInfo> > dic = new Dictionary <int, SortedList <int, PbBaseControlInfo> >(); fieldSets[i].Items = this.Sort(fieldSets[i].Items, ref dic); } for (int i = 0; i < fieldSets.Count; i++) { //转类型 foreach (var item in fieldSets[i].Items) { fieldSets[i].AllFields.Add(ControlConverter.ConvertToExtControl(item)); } } }
/// <summary> /// App表单信息 /// </summary> /// <param name="fileName"></param> /// <returns></returns> public static PbFormInfo GetBillInfo(string fileName) { PbFormInfo info = new PbFormInfo(); PbBillInfo billInfo = GetBillBase(fileName); info.BillName = billInfo.Name; info.Title = billInfo.Description; //列表; info.ListTable = billInfo.PbList.TableName; info.ListSql = billInfo.PbList.Sql; //表头; info.MasterTable = billInfo.HeadInfo.TableName; info.MasterSql = billInfo.HeadInfo.Sql; info.HeaderName = billInfo.HeadInfo.Name; return(info); }
public GridPanel GetGridInfo(PbBillInfo billInfo) { GridPanel listgrid = new GridPanel(); listgrid.ID = billInfo.PbList.Id; listgrid.Region = "center";//默认自适应 listgrid.TableName = billInfo.PbList.TableName; listgrid.Sql = billInfo.PbList.Sql; listgrid.Columns = CommonParser.GetListColumns(billInfo.PbList.PbBaseTextInfos); //用于判断grid中某些列是否存在 foreach (var item in listgrid.Columns) { listgrid.ColumnNames.Add(item.DataIndex); } CommonParser.Log("ListGrid转换成功."); return(listgrid); }
public List <PbTabInfo> GetTabInfos(PbBillInfo billInfo) { List <PbTabInfo> tabinfos = new List <PbTabInfo>(); //所有tab循环转换,目前只支持一个tab,也就是billInfo.PbTabInfos数量为1 foreach (var tabinfo in billInfo.PbTabInfos) { PbTabInfo tab = new PbTabInfo(); tab.GridIds = tabinfo.GridIds; tab.ReportViews = tabinfo.ReportViews; tab.ReportParas = tabinfo.ReportParas; tab.TabNames = tabinfo.TabNames; tab.XPos = tabinfo.XPos; tab.YPos = tabinfo.YPos; tab.Width = tabinfo.Width; tab.Height = tabinfo.Height; tab.Name = tabinfo.Name; tabinfos.Add(tab); } return(tabinfos); }
//表头普通的 public TableLayoutForm GetFormInfo(PbBillInfo billInfo) { Dictionary <int, SortedList <int, PbBaseControlInfo> > dic = new Dictionary <int, SortedList <int, PbBaseControlInfo> >(); layoutForm.Items = this.Sort(layoutForm.Items, ref dic); /* comment by ljy 此函数废弃,列宽改成按设计器列属性设置来确定 * //计算该fieldset 每行最多的colspan * layoutForm = CalColSpan(layoutForm, dic); * layoutForm.ColumnsPerRow = 4; */ layoutForm.FieldRows = GetFieldsRows(dic, null, layoutForm); //二维字段信息,放在CalColSpan方法之后 layoutForm.IsAbsoluteLayout = billInfo.HeadInfo.Abslayout; //是否绝对布局 layoutForm.Otid = billInfo.HeadInfo.Otid; //文档模板可选项 layoutForm.ColumnsPerRow = billInfo.HeadInfo.ColumnsPerRow; //每行分几列 layoutForm.FormLabelWidth = billInfo.HeadInfo.FormLabelWidth; //每列占位数 return(layoutForm); }
//获取表达式 public Dictionary <String, String> GetExpressions(PbBillInfo billInfo) { GetTableRelation(); //将表关系确定,表达式中可能需要用到 GetColRelation(); for (int i = 0; i < containers.Count; i++) { foreach (var item in containers[i].Items) { if (item is PbGridInfo) { continue; //表体内的控件事件暂无 } var temp = (PbBaseTextInfo)item; ConvertExpression(temp.UpdateEvent.PbImp, "Normal"); } } //新增状态打开时的事件 if (billInfo.EditAddInitEvent.PbImp.Count > 0) { ConvertExpression(billInfo.EditAddInitEvent.PbImp, "AddInit"); } //保存时更新事件 if (billInfo.BillSaveUpdateEvent.PbImp.Count > 0) { ConvertExpression(billInfo.BillSaveUpdateEvent.PbImp, "SaveUpdate"); } //保存前校验事件 if (billInfo.BillBeforeSaveEvent.PbImp.Count > 0) { ConvertExpression(billInfo.BillBeforeSaveEvent.PbImp, "BeforeSave"); } return(expressions); }
/// <summary> /// pc web表单 comment by ljy 2016.10.27 此函数暂时废弃 /// </summary> /// <param name="fileName"></param> /// <returns></returns> public static PbFormInfo GetBillInfo(string fileName) { PbFormInfo info = new PbFormInfo(); PbBillInfo billInfo = GetBillBase(fileName); info.BillName = billInfo.Name; info.Title = billInfo.Description; info.HasTab = billInfo.PbTabInfos.Count > 0 ? true : false; //列表; info.ListTable = billInfo.PbList.TableName; info.ListSql = billInfo.PbList.Sql; //表头; info.MasterTable = billInfo.HeadInfo.TableName; info.MasterSql = billInfo.HeadInfo.Sql; info.HeaderName = billInfo.HeadInfo.Name; //明细表,目前明细仅支持grid; foreach (PbGridInfo grid in billInfo.PbGrids) { DetailInfo detailInfo = new DetailInfo(); detailInfo.Name = grid.Name; detailInfo.TableName = grid.TableName; detailInfo.Sql = grid.Sql; //二级明细暂不处理; if (info.Detail.ContainsKey(grid.Name)) { continue; } info.Detail.Add(grid.Name, detailInfo); } return(info); }
public AppEditParser(PbBillInfo billInfo) { SetContainer(billInfo); SetFormPanel(); }
//groupbox里面的fieldset public List <FieldSet> GetFieldSetInfo(PbBillInfo billInfo) { //1.定义容器:表头的groupbox,转成ng3中fieldset if (billInfo.HeadInfo.PbBaseControlInfos.Count > 0) { //将fieldset都先放入containers foreach (var headinfo in billInfo.HeadInfo.PbBaseControlInfos) { FieldSet fieldSet = new FieldSet(); fieldSet.X = headinfo.XPos; fieldSet.Y = headinfo.YPos; fieldSet.Width = headinfo.Width; fieldSet.Height = headinfo.Height; fieldSet.ID = headinfo.Id; fieldSet.Title = ((PbGroupboxInfo)(headinfo)).Text; //设置fieldset折叠属性,/0、null或空:不能折叠,默认展开,1:能折叠,默认展开,2:能折叠,默认折叠,3:隐藏 var collapse = ((PbGroupboxInfo)(headinfo)).Collapse; if (collapse == "1") { fieldSet.Collapsible = true; fieldSet.Collapsed = false; } else if (collapse == "2") { fieldSet.Collapsible = true; fieldSet.Collapsed = true; } else if (collapse == "3") { fieldSet.Collapsible = false; fieldSet.Collapsed = false; fieldSet.Border = false; fieldSet.Title = ""; } else { fieldSet.Collapsible = false; //不允许折叠 fieldSet.Collapsed = false; //默认展开 } containers.Add(fieldSet); } } //2.表头所有列(包括fieldset中列),放到layoutForm或容器 foreach (var pbColumn in billInfo.HeadInfo.PbColumns) { //将控件放到指定的容器内 FindContain(pbColumn, pbColumn.XPos, pbColumn.YPos); } //3.容器内列排序和生成成二维列表列 for (int i = 0; i < containers.Count; i++) { Dictionary <int, SortedList <int, PbBaseControlInfo> > dic = new Dictionary <int, SortedList <int, PbBaseControlInfo> >(); containers[i].Items = Sort(containers[i].Items, ref dic); /* comment by ljy 此函数废弃,列宽改成按设计器列属性设置来确定 * //计算该fieldset 每行最多的colspan * //算占多少 //不能用ref 动态类 * containers[i] = CalColSpan(containers[i], dic); * //containers[i].ColumnsPerRow = 4; */ containers[i].ColumnsPerRow = billInfo.HeadInfo.ColumnsPerRow; //每行分几列 //按行布局二维列表结构, 控件转成ng3类型; 容器内所有列转成ng3类型后赋给Allfields; 每行几列按设计器上实际布局来 containers[i].FieldRows = GetFieldsRows(dic, containers[i], null); } //4.表体所有grid(包括fieldset中grid),转成ng类型并放到grids或容器(fieldset中可能有grid,在设计时就应该避免groupbox中有grid) if (billInfo.PbGrids.Count > 0) { foreach (var gridpanel in billInfo.PbGrids) { FindContain(gridpanel, gridpanel.XPos, gridpanel.YPos); } } /* * //含有金格控件 * if (billInfo.OfficeInfo.Visible) * { * FieldSet fieldSet = new FieldSet(); * fieldSet.X = billInfo.OfficeInfo.XPos; * fieldSet.Y = billInfo.OfficeInfo.YPos; * fieldSet.Width = billInfo.OfficeInfo.Width; * fieldSet.Height = billInfo.OfficeInfo.Height; * fieldSet.Title = "金格控件"; * FieldSetBlobdoc = fieldSet; //赋给返回的金格控件fieldset * //containers.Add(fieldSet); * } * * //含有进度控件 * if (billInfo.ScheduleInfo.Visible) * { * FieldSet fieldSet = new FieldSet(); * fieldSet.X = billInfo.ScheduleInfo.XPos; * fieldSet.Y = billInfo.ScheduleInfo.YPos; * fieldSet.Width = billInfo.ScheduleInfo.Width; * fieldSet.Height = billInfo.ScheduleInfo.Height; * fieldSet.Title = "进度控件"; * containers.Add(fieldSet); * } */ //为容器内的控件进行布局 region //SetLayout(); //GroupBox根据Y坐标进行排序 containers.Sort((x, y) => x.Y.CompareTo(y.Y)); CommonParser.Log("GroupBox转换成功."); return(containers); }
/// <summary> /// ex: /// ParseManager parseManager = new ParseManager(); /// PbBillInfo billInfo = parseManager.ParseBillFile(@"F:\NG3\PowerBuilder\0000000069.ini"); /// </summary> /// <param name="billInfo"> </param> /// <returns></returns> public static bool GenerateApp(PbBillInfo billInfo, ref string winType, string ucode) { string className = (ucode + billInfo.Name).Replace("pform", "aform"); //NG0001pform0000000008 string title = billInfo.Description; try { DbHelper.Open(); //ConnectionString //List gridPanel PbListFormParser PbListParser = new PbListFormParser(); GridPanel gridPanel = PbListParser.GetGridInfo(billInfo); Toolbar toolbar = PbListParser.GetListToolbar(billInfo); //Edit PbEditFormParser pbEdit = new PbEditFormParser(billInfo); List <string> PanelNames = new List <string>(); //记录所有的panel foreach (var set in pbEdit.FieldSets) { foreach (var panel in set.Panels) { PanelNames.Add(panel.TableName); } } foreach (var panel in pbEdit.GridPanels) { PanelNames.Add(panel.TableName); } string area = "SUP"; try { #region list AformListTemplate.ListOrEdit = "viewedit"; if (gridPanel.Columns.Count > 0) //否则不生成列表界面 { winType = "List"; CommonParser.Log("List界面开始生成."); AformListTemplate.NameSpacePrefix = area; AformListTemplate.NameSpaceSuffix = "CustomForm"; AformListTemplate.ClassName = className; AformListTemplate.PkPropertyname = "phid"; AformListTemplate.ListOrEdit = "viewlist"; AformListTemplate.Title = title; AformListTemplate.Area = area; AformListTemplate.gridPanel = gridPanel; AformListTemplate.Toolbar = toolbar; AformListTemplate.WriteEx(area); CommonParser.Log("List界面生成成功."); } #endregion #region edit CommonParser.Log("Edit界面开始生成."); AformEditTemplate.NameSpacePrefix = area; AformEditTemplate.NameSpaceSuffix = "CustomForm"; AformEditTemplate.ClassName = className; AformEditTemplate.PkPropertyname = "phid"; AformEditTemplate.ListOrEdit = "viewedit"; AformEditTemplate.Title = title; AformEditTemplate.Area = area; AformEditTemplate.gridPanel = gridPanel; AformEditTemplate.fieldSets = pbEdit.FieldSets; AformEditTemplate.panels = pbEdit.GridPanels; AformEditTemplate.tableLayouts = pbEdit.LayoutForm; AformEditTemplate.PanelNames = PanelNames; AformEditTemplate.Expressions = pbEdit.Expressions; AformEditTemplate.Toolbar = pbEdit.TB; AformEditTemplate.WriteEx(area); CommonParser.Log("Edit界面生成成功."); #endregion } catch (Exception e) { CommonParser.Log(e.Message); //throw new Exception(e.Message); } } catch (Exception ex) { throw ex; } finally { DbHelper.Close();//ConnectionString); } return(true); }
/// <summary> /// ex: /// ParseManager parseManager = new ParseManager(); /// </summary> /// <param name="billInfo"> </param> /// <returns></returns> public static bool Generate(PbBillInfo billInfo, ref string winType, string extJsStr, string ucode) { string className = ucode + billInfo.Name; //NG0001pform0000000008 string pform = billInfo.Name; //pform0000000008 string eform = pform.Replace("pform", "EFORM"); //EFORM0000000008 string qform = pform.Replace("pform", "w_eform_p_list"); //w_eform_p_list0000600008 string title = billInfo.Description; string istask = billInfo.IsTask; string reltable = billInfo.Reltable; bool hasTab = billInfo.PbTabInfos.Count > 0 ? true : false; string tableNameMst = billInfo.HeadInfo.TableName; DbHelper.Open(); //List窗口 gridPanel PbListFormParser PbListParser = new PbListFormParser(); GridPanel gridPanel = PbListParser.GetGridInfo(billInfo); Toolbar toolbar = PbListParser.GetListToolbar(billInfo); //Edit窗口 form grid PbEditFormParser pbEdit = new PbEditFormParser(billInfo); List <String> PanelNames = new List <string>(); //记录所有的panel foreach (var set in pbEdit.FieldSets) { foreach (var panel in set.Panels) { PanelNames.Add(panel.TableName); } } foreach (var panel in pbEdit.GridPanels) { PanelNames.Add(panel.TableName); } ////任务分解需求,拼grid属性集合json串并保存到p_form_m表,如{"p_form0000000010_d":"deptid,remarks;deptid A,remarks A;prc@sum,amt@sum"} //if (billInfo.IsTask == "1" && pbEdit.AllGrids.Count > 0) //{ // string grid_detail = "{"; // foreach (GridPanel grid in pbEdit.AllGrids) // { // if (!string.IsNullOrEmpty(grid.Subtotal)) // { // grid_detail += "\"" + grid.TableName + "\":\"" + grid.Subtotal + "\","; // } // } // grid_detail = grid_detail.TrimEnd(',') + "}"; // DbHelper.ExecuteNonQuery(string.Format("update p_form_m set grid_detail='{0}' where code='{1}'", grid_detail, billInfo.Code)); //} string area = "SUP"; #region list if (gridPanel.Columns.Count > 0) { winType = "List"; CommonParser.Log("List界面开始生成."); //否则不生成 PageListTemplate PageListTemplate = new PageListTemplate(); PageListJsTemplate PageListJsTemplate = new PageListJsTemplate(); PageListTemplate.NameSpacePrefix = area; PageListTemplate.NameSpaceSuffix = "CustomForm"; PageListTemplate.ClassName = className; PageListTemplate.Title = title; PageListTemplate.WriteEx("SUP"); PageListJsTemplate.NameSpacePrefix = area; PageListJsTemplate.NameSpaceSuffix = "CustomForm"; PageListJsTemplate.ClassName = className; PageListJsTemplate.EForm = eform; PageListJsTemplate.PForm = pform; PageListJsTemplate.QForm = qform; PageListJsTemplate.IsTask = istask; PageListJsTemplate.PkPropertyname = "phid"; PageListJsTemplate.Title = title; PageListJsTemplate.Area = area; PageListJsTemplate.gridPanel = gridPanel; PageListJsTemplate.Toolbar = toolbar; PageListJsTemplate.HasBlobdoc = billInfo.HasBlobdoc; PageListJsTemplate.HasEppocx = billInfo.HasEppocx; PageListJsTemplate.HasReport = billInfo.HasReport; PageListJsTemplate.WriteEx("SUP"); CommonParser.Log("List界面生成成功."); } #endregion #region edit CommonParser.Log("Edit界面开始生成."); PageEditTemplate PageEditTemplate = new PageEditTemplate(); PageJsExtTemplate PageJsExtTemplate = new PageJsExtTemplate(); PageEditTemplate.NameSpacePrefix = area; PageEditTemplate.NameSpaceSuffix = "CustomForm"; PageEditTemplate.ClassName = className; PageEditTemplate.Title = title; PageEditTemplate.SumRowStyle = billInfo.SumRowStyle; PageEditTemplate.NoSumRowStyle = billInfo.NoSumRowStyle; PageEditTemplate.WriteEx("SUP"); //扩展脚本生成 PageJsExtTemplate.ClassName = className; PageJsExtTemplate.ExtJsStr = extJsStr; PageJsExtTemplate.WriteEx("SUP"); if (!hasTab) //无tab页 { PageEditJsTemplate PageEditJSTemplate = new PageEditJsTemplate(); PageEditJSTemplate.NameSpacePrefix = area; PageEditJSTemplate.NameSpaceSuffix = "CustomForm"; PageEditJSTemplate.ClassName = className; PageEditJSTemplate.PForm = pform; PageEditJSTemplate.EForm = eform; PageEditJSTemplate.QForm = qform; PageEditJSTemplate.IsTask = istask; PageEditJSTemplate.Reltable = reltable; PageEditJSTemplate.PkPropertyname = "phid"; PageEditJSTemplate.Title = title; PageEditJSTemplate.Area = area; PageEditJSTemplate.fieldSets = pbEdit.FieldSets; PageEditJSTemplate.panels = pbEdit.GridPanels; PageEditJSTemplate.AllGrids = pbEdit.AllGrids; PageEditJSTemplate.tableLayouts = pbEdit.LayoutForm; PageEditJSTemplate.PanelNames = PanelNames; PageEditJSTemplate.Expressions = pbEdit.Expressions; PageEditJSTemplate.Toolbar = pbEdit.TB; PageEditJSTemplate.TableName = tableNameMst; PageEditJSTemplate.BodyCmpCount = billInfo.BodyCmpCount; PageEditJSTemplate.HasBlobdoc = billInfo.HasBlobdoc; PageEditJSTemplate.HasEppocx = billInfo.HasEppocx; PageEditJSTemplate.HasReport = billInfo.HasReport; PageEditJSTemplate.FieldSetBlobdoc = pbEdit.FieldSetBlobdoc; PageEditJSTemplate.PictureBoxs = pbEdit.PictureBoxs; PageEditJSTemplate.HasAsrGrid = billInfo.AsrGridInfo.Visible ? "1" : "0"; PageEditJSTemplate.AsrGrid = pbEdit.AsrGrid; PageEditJSTemplate.HasWfGrid = billInfo.WfGridInfo.Visible ? "1" : "0"; PageEditJSTemplate.WfGrid = pbEdit.WfGrid; PageEditJSTemplate.WriteEx("SUP"); } else { //有tab页 PageEditJsWithTabTemplate PageEditJsWithTabTemplate = new PageEditJsWithTabTemplate(); PageEditJsWithTabTemplate.NameSpacePrefix = area; PageEditJsWithTabTemplate.NameSpaceSuffix = "CustomForm"; PageEditJsWithTabTemplate.ClassName = className; PageEditJsWithTabTemplate.PForm = pform; PageEditJsWithTabTemplate.EForm = eform; PageEditJsWithTabTemplate.QForm = qform; PageEditJsWithTabTemplate.IsTask = istask; PageEditJsWithTabTemplate.PkPropertyname = "phid"; PageEditJsWithTabTemplate.Title = title; PageEditJsWithTabTemplate.Area = area; PageEditJsWithTabTemplate.fieldSets = pbEdit.FieldSets; PageEditJsWithTabTemplate.panels = pbEdit.GridPanels; PageEditJsWithTabTemplate.AllGrids = pbEdit.AllGrids; PageEditJsWithTabTemplate.tabInfos = pbEdit.tabinfos; PageEditJsWithTabTemplate.tableLayouts = pbEdit.LayoutForm; PageEditJsWithTabTemplate.PanelNames = PanelNames; PageEditJsWithTabTemplate.Expressions = pbEdit.Expressions; PageEditJsWithTabTemplate.Toolbar = pbEdit.TB; PageEditJsWithTabTemplate.TableName = tableNameMst; PageEditJsWithTabTemplate.BodyCmpCount = billInfo.BodyCmpCount; PageEditJsWithTabTemplate.HasBlobdoc = billInfo.HasBlobdoc; PageEditJsWithTabTemplate.HasEppocx = billInfo.HasEppocx; PageEditJsWithTabTemplate.HasReport = billInfo.HasReport; PageEditJsWithTabTemplate.FieldSetBlobdoc = pbEdit.FieldSetBlobdoc; PageEditJsWithTabTemplate.PictureBoxs = pbEdit.PictureBoxs; PageEditJsWithTabTemplate.HasAsrGrid = billInfo.AsrGridInfo.PbBaseTextInfos.Count > 0 ? "1" : "0"; PageEditJsWithTabTemplate.AsrGrid = pbEdit.AsrGrid; PageEditJsWithTabTemplate.HasWfGrid = billInfo.WfGridInfo.PbBaseTextInfos.Count > 0 ? "1" : "0"; PageEditJsWithTabTemplate.WfGrid = pbEdit.WfGrid; PageEditJsWithTabTemplate.WriteEx("SUP"); } CommonParser.Log("Edit界面生成成功."); #endregion DbHelper.Close(); return(true); }
//groupbox里面的fieldset public List <FieldSet> GetFieldSetInfo(PbBillInfo billInfo) { //含有groupbox表头 if (billInfo.HeadInfo.PbBaseControlInfos.Count > 0) { //将容器都先放入containers foreach (var headinfo in billInfo.HeadInfo.PbBaseControlInfos) { FieldSet fieldSet = new FieldSet(); fieldSet.X = headinfo.XPos; fieldSet.Y = headinfo.YPos; fieldSet.Width = headinfo.Width; fieldSet.Height = headinfo.Height; fieldSet.ID = headinfo.Id; fieldSet.Title = ((PbGroupboxInfo)(headinfo)).Text; containers.Add(fieldSet); } } foreach (var pbColumn in billInfo.HeadInfo.PbColumns) { //将控件放到指定的容器内 FindContain(pbColumn, pbColumn.XPos, pbColumn.YPos); } //因为要赋值回去,所以不能foreach for (int i = 0; i < containers.Count; i++) { Dictionary <int, SortedList <int, PbBaseControlInfo> > dic = new Dictionary <int, SortedList <int, PbBaseControlInfo> >(); containers[i].Items = this.Sort(containers[i].Items, ref dic); //计算该fieldset 每行最多的colspan //算占多少 //不能用ref 动态类 containers[i] = CalColSpan(containers[i], dic); } //含有表体 if (billInfo.PbGrids.Count > 0) { foreach (var gridpanel in billInfo.PbGrids) { FindContain(gridpanel, gridpanel.XPos, gridpanel.YPos); } } //含有金格控件 if (billInfo.OfficeInfo.Visible) { FieldSet fieldSet = new FieldSet(); fieldSet.X = billInfo.OfficeInfo.XPos; fieldSet.Y = billInfo.OfficeInfo.YPos; fieldSet.Width = billInfo.OfficeInfo.Width; fieldSet.Height = billInfo.OfficeInfo.Height; fieldSet.Title = "金格控件"; containers.Add(fieldSet); } //含有进度控件 if (billInfo.ScheduleInfo.Visible) { FieldSet fieldSet = new FieldSet(); fieldSet.X = billInfo.ScheduleInfo.XPos; fieldSet.Y = billInfo.ScheduleInfo.YPos; fieldSet.Width = billInfo.ScheduleInfo.Width; fieldSet.Height = billInfo.ScheduleInfo.Height; fieldSet.Title = "进度控件"; containers.Add(fieldSet); } //为容器内的控件进行布局 region SetLayout(); for (int i = 0; i < containers.Count; i++) { //转类型 foreach (var item in containers[i].Items) { if (item is PbGridInfo) { containers[i].Panels.Add(ControlConverter.ConvertToExtPanel((PbGridInfo)item)); } else { containers[i].AllFields.Add(ControlConverter.ConvertToExtControl(item)); } //PbBaseControlInfo pbcontrol = item; // expressions.Add(()pbcontrol.); } } CommonParser.Log("GroupBox转换成功."); return(containers); }
//获取表达式 public Dictionary <string, string> GetExpressions(PbBillInfo billInfo) { GetTableRelation(); //将表关系确定,表达式中可能需要用到 GetColRelation(); //groupbox控件的更新事件 for (int i = 0; i < containers.Count; i++) { foreach (var item in containers[i].Items) { if (item is PbGridInfo) { continue; //表体内的控件事件暂无 } var temp = (PbBaseTextInfo)item; ConvertExpression(temp.UpdateEvent.PbImp, "Normal", temp.Name); ConvertExpression(temp.VisibleExpressionImp, "Normal", temp.Name); ConvertExpression(temp.IsMustInputExpressionImp, "Normal", temp.Name); ConvertExpression(temp.IsReadOnlyExpressionImp, "Normal", temp.Name); } } //grids列的更新事件 foreach (var gridPanel in billInfo.PbGrids) { foreach (var item in gridPanel.PbBaseTextInfos) { ConvertExpressionGrid(item.UpdateEvent.PbImp, "GridNormal", item.Name, gridPanel.TableName); ConvertExpressionGrid(item.VisibleExpressionImp, "Normal", item.Name, gridPanel.TableName); ConvertExpressionGrid(item.IsReadOnlyExpressionImp, "Normal", item.Name, gridPanel.TableName); } } //mstform控件的更新事件 foreach (var item in layoutForm.Items) { var temp = (PbBaseTextInfo)item; ConvertExpression(temp.UpdateEvent.PbImp, "Normal", temp.Name); ConvertExpression(temp.VisibleExpressionImp, "Normal", temp.Name); ConvertExpression(temp.IsMustInputExpressionImp, "Normal", temp.Name); ConvertExpression(temp.IsReadOnlyExpressionImp, "Normal", temp.Name); } //新增状态打开时的事件 if (billInfo.EditAddInitEvent.PbImp.Count > 0) { ConvertExpression(billInfo.EditAddInitEvent.PbImp, "AddInit"); } //保存时更新事件 if (billInfo.BillSaveUpdateEvent.PbImp.Count > 0) { ConvertExpression(billInfo.BillSaveUpdateEvent.PbImp, "SaveUpdate"); } //保存前校验事件 if (billInfo.BillBeforeSaveEvent.PbImp.Count > 0) { ConvertExpression(billInfo.BillBeforeSaveEvent.PbImp, "BeforeSave"); } return(expressions); }
/// <summary> /// 生成web自定义表单; /// </summary> /// <param name="buildPara"></param> /// <returns></returns> public string BuildCustomForm(BuildParameter buildPara) { string winType = "Edit"; string ucode = string.Empty; if (string.IsNullOrEmpty(buildPara.Id)) { throw new Exception("Id不能为空!"); } var fileName = BuildFile(buildPara.Id, ref ucode); //得到ini文件内容和帐套号 var extJsStr = BuildExtJs(buildPara.Id); //p_form_m表中ucode可能不对,比如帐套是其他地方还原过来的,这里取默认帐套号 if (!string.IsNullOrEmpty(ucode)) { ucode = AppInfoBase.DbName; //如NG0002 } var type = buildPara.Type; //web:网页自定义表单,app:移动自定义表单 if (string.IsNullOrEmpty(type)) { type = "web"; } buildPara.AssemblyPath = AppDomain.CurrentDomain.BaseDirectory + "bin\\"; buildPara.CsFilePath = AppDomain.CurrentDomain.BaseDirectory + "CustomFormTemp\\"; //获取设计器生成ini文件内容 PbBillInfo billInfo = new PbBillInfo(); billInfo = CommonParser.GetBillBase(fileName); // 生成前端代码; var clientGen = new ClientGen.Generator(); if (type == "app") { if (!ClientGen.Generator.GenerateApp(billInfo, ref winType, ucode)) { throw new Exception("前端代码生成失败!"); } } else { if (!ClientGen.Generator.Generate(billInfo, ref winType, extJsStr, ucode)) { throw new Exception("前端代码生成失败!"); } } // 生成服务端代码; bool isGenerateCsFile = true; //是否生成cs文件 if (string.IsNullOrEmpty(buildPara.CsFilePath)) { isGenerateCsFile = false; } if (type == "app") { if (!ServerGen.Generator.GenerateApp(billInfo, buildPara.AssemblyPath, isGenerateCsFile, buildPara.CsFilePath, ucode)) { throw new Exception("服务端代码生成失败!"); } } else { if (!ServerGen.Generator.Generate(billInfo, buildPara.AssemblyPath, isGenerateCsFile, buildPara.CsFilePath, ucode)) { throw new Exception("服务端代码生成失败!"); } } if (!ServerGen.Generator.Generate(billInfo, buildPara.AssemblyPath, isGenerateCsFile, buildPara.CsFilePath, ucode)) { throw new Exception("服务端代码生成失败!"); } //begin 增加一个菜单 string configPath = HttpContext.Current.Request.PhysicalApplicationPath + "\\NG3Config\\MainNavigation.xml"; string menuName = ucode + (type == "app" ? "aform" : "pform") + buildPara.Id + winType; string menuText = menuName + " - " + billInfo.Description; string menuTabTitle = billInfo.Description; DataSet ds = new DataSet(); ds.ReadXml(configPath); DataRow[] drs = ds.Tables["TreeNode"].Select("Text='" + menuText + "'"); if (drs == null || drs.Length < 1) { DataRow dr = ds.Tables["TreeNode"].NewRow(); dr["NavigateUrl"] = "/Custom/SUP/" + menuName; dr["Text"] = menuText; dr["TabTitle"] = menuTabTitle; dr["UserType"] = "system,developer,translator"; dr["TreeNodeGroup_Id"] = "0"; ds.Tables["TreeNode"].Rows.Add(dr); ds.WriteXml(configPath); } //end 增加一个菜单 //// 返回URL链接; //var ip = string.IsNullOrEmpty(buildPara.Port) ? buildPara.Host : string.Format("{0}:{1}", buildPara.Host, buildPara.Port); //return string.Format(@"http://{0}/SUP/pform{1}List", ip, buildPara.Id); //返回生成业务点; return(string.Format(@"自定义表单pform{0}生成成功", buildPara.Id)); }
/// <summary> /// 生成PC表单服务端dll; /// </summary> /// <param name="fileName"></param> /// <param name="assemblyPath"></param> /// <param name="isGenerateCsFile"></param> /// <param name="csFilePath"></param> /// <returns></returns> public static bool Generate(PbBillInfo billInfo, string assemblyPath, bool isGenerateCsFile, string csFilePath, string ucode) { try { //参数设置 var templateInfo = new TemplateInfo { NameSpacePrefix = "SUP.CustomForm", ClassName = ucode + billInfo.Name, //NG0001pform0000000008 PForm = billInfo.Name, //pform0000000008 EForm = billInfo.Name.Replace("pform", "EFORM"), //EFORM0000000008 QForm = billInfo.Name.Replace("pform", "w_eform_p_list"), //w_eform_p_list0000600008 TableMaster = billInfo.HeadInfo.TableName, Title = billInfo.Description, SqlList = billInfo.PbList.Sql, SqlMaster = billInfo.HeadInfo.Sql }; foreach (PbGridInfo grid in billInfo.PbGrids) { var info = new TemplateDetailInfo(); info.Name = grid.Name; info.Sql = grid.Sql; info.TableName = grid.TableName; info.Subtotal = grid.Subtotal; info.Groupfield = grid.Groupfield; templateInfo.DetailInfoList.Add(info); //grids中生成代码转名称相关代码 foreach (var helpControl in grid.PbBaseTextInfos) { //物资不需要代码转名称,单独处理 if (helpControl.ColumnInfo.ColumnName == "res_code") { continue; } if (helpControl.ControlType.ToString() == "DataHelpEdit") { var helpEdit = (PbDataHelpEditInfo)helpControl; var codeToNameInfo = new CodeToNameInfo { TableName = grid.TableName, CodeName = helpEdit.ColumnInfo.ColumnName, HelpId = helpEdit.DataHelpId, MultiSelect = helpEdit.MultiSelect }; templateInfo.CodeToNameGrid.Add(codeToNameInfo); } } } //List中生成代码转名称相关代码 foreach (var helpControl in billInfo.PbList.PbBaseTextInfos) //mod by ljy 2016.12.08 billInfo.HeadInfo.PbColumns 改成 billInfo.PbList.PbBaseTextInfos { if (helpControl.ControlType.ToString() == "DataHelpEdit") { var helpEdit = (PbDataHelpEditInfo)helpControl; var codeToNameInfo = new CodeToNameInfo { TableName = billInfo.PbList.TableName, CodeName = helpEdit.ColumnInfo.ColumnName, HelpId = helpEdit.DataHelpId, MultiSelect = helpEdit.MultiSelect }; templateInfo.CodeToNameList.Add(codeToNameInfo); } } //图片控件 foreach (PbPictureboxInfo picturebox in billInfo.HeadInfo.PbPictureboxInfos) { templateInfo.BitmapNameList.Add(picturebox.Name); } if (billInfo.AsrGridInfo.Visible || billInfo.AsrGridInfo.PbBaseTextInfos.Count > 0) { templateInfo.HasAsrGrid = "1"; } var controllerTemplate = new ControllerTemplate(templateInfo); if (isGenerateCsFile) //生成代码文件 { string path = csFilePath + templateInfo.ClassName; controllerTemplate.WriteEx(ref path); NG3.Compile.Compiler.CompileFromFile(path, assemblyPath, true, templateInfo.NameSpacePrefix + "." + templateInfo.ClassName + ".Controller"); } else //不生成代码文件 { string[] codeArray = new string[] { controllerTemplate.WriteEx() }; NG3.Compile.Compiler.CompileFromCode(codeArray, assemblyPath, templateInfo.NameSpacePrefix + "." + templateInfo.ClassName + ".Controller"); } } catch (System.Exception ex) { throw new Exception(ex.Message); } return(true); }
/// <summary> /// 生成带cs文件的dll程序集; /// </summary> /// <param name="fileName"></param> /// <param name="assemblyPath">生成程序集路径;</param> /// <param name="generatedCsFilePath">.cs文件生成路径;</param> /// <returns></returns> public static bool Generate(PbBillInfo billInfo, string assemblyPath, string generatedCsFilePath) { return(Generate(billInfo, assemblyPath, true, generatedCsFilePath, string.Empty)); }
public PbEditFormParser(PbBillInfo billInfo) { FieldSets = GetFieldSetInfo(billInfo); GridPanels = GetGridPanel(); LayoutForm = GetFormInfo(billInfo); Expressions = GetExpressions(billInfo); TB = GetEditToolbar(billInfo); tabinfos = GetTabInfos(billInfo); FieldSetBlobdoc = GetBlobdoc(billInfo); GetPictureBoxs(billInfo); GetAsrGrid(billInfo); GetWfGrid(billInfo); //汇总form和fieldset上所有列名 foreach (var item in LayoutForm.AllFields) { if (!LayoutForm.ColumnNames.Contains(item.Name)) { LayoutForm.ColumnNames.Add(item.Name); } } foreach (var fieldset in FieldSets) { foreach (var item in fieldset.AllFields) { if (!LayoutForm.ColumnNames.Contains(item.Name)) { LayoutForm.ColumnNames.Add(item.Name); } } } //计算表体游离panel数量,包括grid,tab,金格,进度控件等 int tempCount = 0; for (int i = 0; i < GridPanels.Count; i++) { if (!GridPanels[i].IsInTab) { tempCount++; } } if (tabinfos.Count == 1) { tempCount++; } if (billInfo.HasBlobdoc == "1") { tempCount++; } if (billInfo.HasEppocx == "1") { tempCount++; } if (billInfo.AsrGridInfo.Visible) { tempCount++; } if (billInfo.WfGridInfo.Visible) { tempCount++; } billInfo.BodyCmpCount = tempCount; //设置grid和tab的布局region SortedList <int, string> sortlist = new SortedList <int, string>(); //游离panel排序 if (tabinfos.Count > 0) //有tab情况下,金格等控件在tab中 { sortlist.Add(tabinfos[0].YPos, "tabPanel0"); } for (int i = 0; i < GridPanels.Count; i++) { if (!GridPanels[i].IsInTab) { sortlist.Add(GridPanels[i].Y, GridPanels[i].TableName); } } if (sortlist.Count > 0) { int maxY = Convert.ToInt32(sortlist.Last().Key); if (tabinfos.Count > 0) //有tab情况下,金格等控件在tab中 { //根据组件y坐标来设置region if (tabinfos[0].YPos == maxY) { tabinfos[0].Region = "center"; } else { tabinfos[0].Region = "north"; } } for (int i = 0; i < GridPanels.Count; i++) { if (!GridPanels[i].IsInTab) { if (GridPanels[i].Y == maxY && billInfo.HasBlobdoc != "1" && billInfo.HasEppocx != "1") { GridPanels[i].Region = "center"; } else { GridPanels[i].Region = "north"; } } } } }
/// <summary> /// 生成dll程序集; /// </summary> /// <param name="fileName"></param> /// <param name="assemblyPath">生成程序集路径;</param> /// <returns></returns> public static bool Generate(PbBillInfo billInfo, string assemblyPath) { return(Generate(billInfo, assemblyPath, false, string.Empty, string.Empty)); }