单据开发
培训示例界面:
1、配置UBF项目代码生成路径
第一次使用UBF开发项目需配置,以后不需要配置;
UBF代码生成路径,代码VS版本,在“工具”-“配置”中设置
2、UBF平台开发
2.1.建立解决方案
2.2、BE
2.2.1新建实体项目
2.2.2.修改解决方案的配件名
在模型视图中修改项目解决方案名称,命名规则为UFIDA.U9.Cust.项目名称,修改属性中的配件名。
建送货单实体:
建单据类型实体:
单据类型:
继承单据类型基类
送货单实体
2.2.3.添加U9两个基础实体引用
添加2个引用,在发布对象栏目中,在选择目录中,选择UBF下面的UFIDA.U9.Base.BaseBE.MetaData和APP下面的UFIDA.U9.CBO.PubBE.MetaData。
(注:在引用解决方案时,先要双击打开所引用的解决方案,然后拖到Reference中)
2.2.4.建立BE实体
1)设置主实体;
2)创建实体字段:设置编码、名称、类型(如果是U9系统类型,设置为相应类型的BE);
3)设置实体“业务主键”(发布后,如要修改,需要删掉原“业务主键索引”,才可修改)
4)建立表头和表体的对应关系将实体;
5)设置单据必须要继承单据基类,在“发布对象浏览器”页签中,找见“UFIDA.U9.Base.BaseBE.MetaData”,双击拖出DocBE下的单据基类实体到BE中,用“继承”箭头单据继承单据基类:
- 单据都是要有单据类型的(设置),因此需要单据建立单据类型的实体
- 设置完单据类型后,可设置送货单实体相关字段,新建送货单行,并与送货单做组合关系:
点击组合关系箭头,查看对应关系:
2.2.5.构造BE
构造BE会相应生成:元数据、数据库表脚本、BE项目C#代码;
注:如构造产生异常的,做了相应修改后,异常情况还存在时,将对应生成的文件夹也删除。
注:单据开发,构造会报错,需要在构造后的**.Extend BE文件中加入如下代码才可编译通过:public override Base.Doc.DocType DocType
{
get { return this.SODocType; }//单据中单据类型字段
}
3、UI
3.1、建立界面项目
将系统默认产生的界面数据删除
3.2、界面数据
点击解决方案,新建界面项目:
3.2.1建立界面数据
3.2.2修改UI项目配件名
3.2.2修改界面数据命名空间名称
3.2.3用户界面模型树设置
(1) 把BE中的表头实体、表体子实体拖到用户界面模型树里。
(注:在拖表体实体时,一定要将表体实体拖到表头实体里的表体行)
(2)在动作组右击,选择“应用缺省特性”。
3.3界面
3.3.1创建界面UIForm
.选择表单界面模板类型,并选择界面元数据,建立UIForm需要设置多卡单表
3.3.2界面栏位设置
1.3把要显示的内容拖到表头和表体中。
注意:每个容器(Card,Grid,TabPage等)绑定一个视图,拖拽字段时需要先将视图中Key和Sys下的ID和SysVersion属性拖拽到容器中,并且设置隐藏。如果漏掉此操作会引起实体视图无法正常保存。
2.3绑定按钮事件。
3.3. 添加UI的基础引用
UI->UFIDA.U9.CBO.Ref.BaseReferenceUI.MetaData UI->UFIDA.U9.CBO.Ref.CBOReferenceUI.MetaData
2.6.处理参照,绑定参照ID、Code、Name。
选中控件->属性->参照信息
(注:返回字段ID指向Key,Code指向Value,Name指向Text)
参照代码过滤:
private void this.Model.cRef.CurrentFilter.OPath + " Org=" + PDContext.Current.OrgID;
PDResource.GetDeleteConfirmInfo();
//绑定注册弹出对话框到删除按钮
PDFormMessage.ShowConfirmDialog(this.Page, message, "", this.BtnDelete);
PDFormMessage.ShowConfirmDialog(this.Page, "确认放弃当前记录?", "", this.BtnCancel);
//设置默认行号
GetProfileValueProxy bpObj = new GetProfileValueProxy();
bpObj.ProfileCode = "SysLineNo";
PVDTOData pVTDOData = bpObj.Do();
//行GRID
((IAutoRowNo)this.DataGrid5.Columns["RowNo"]).Sequence = true;
((IAutoRowNo)this.DataGrid5.Columns["RowNo"]).SequenceStep = Int32.Parse(pVTDOData.ProfileValue);
((IAutoRowNo)this.DataGrid5.Columns["RowNo"]).SequenceStart = Int32.Parse(pVTDOData.ProfileValue);
}
按钮控制:
#region 控制按钮状态
///
/// 控制按钮状态
///
private void SetControlStatus()
{
//如果页面是通过TitleLink进入则显示确定取消按钮
if (NavigateManager.IsTitleLink(this))
{
this.BtnOk.Visible = true;
this.BtnClose.Visible = true;
}
else if (NavigateManager.IsModelPopup(this))
{
this.BtnOk.Visible = false;
this.BtnClose.Visible = false;
}
else
{
this.BtnOk.Visible = false;
this.BtnClose.Visible = false;
}
if (this.Model.CustSO.FocusedRecord.ID < 0L)
this.Card4.ReadOnly = false;
else if (this.Model.CustSO.FocusedRecord.Status == 2)
this.Card4.ReadOnly = true;
//下列暂时隐藏
this.BtnCopy.Enabled = true;//复制
this.BtnSubmit.Enabled = true;
this.BtnApprove.Enabled = true;
this.BtnUndoApprove.Enabled = true;// 弃审
this.BtnDelete.Enabled = true;
this.BtnSave.Enabled = true;
//Opened 0 System::Int32 开立
//Approving 1 System::Int32 审核中
//Approved 2 System::Int32 已审核
switch (this.Model.CustSO.FocusedRecord.Status)
{
case -1:
case 0:
this.BtnApprove.Enabled = false;
this.BtnUndoApprove.Enabled = false;
if (this.Model.CustSO.FocusedRecord.ID < 1)
{
this.BtnCopy.Enabled = false;
this.BtnSubmit.Enabled = false;
}
break;
case 1:
this.BtnSubmit.Enabled = false;
this.BtnApprove.Enabled = true;
this.BtnUndoApprove.Enabled = false;
//this.BtnSave.Enabled = false;
break;
case 2:
this.BtnSubmit.Enabled = false;
this.BtnApprove.Enabled = false;
this.BtnDelete.Enabled = false;
this.BtnSave.Enabled = false;
break;
default:
break;
}
((UFSoft.UBF.UI.ControlModel.IUIFieldBindingDataBindControl)this.Status143).ReadOnly = true;
this.DataBind();
this.DataCollect();
if (this.Model.CustSO.FocusedRecord != null)
{
string code = this.SODocType_DocHeaderSequenceStyle597.Value.ToString();
if (this.Model.CustSO.FocusedRecord.SODocType_DocHeaderSequenceStyle == 0)
((UFSoft.UBF.UI.ControlModel.IUIFieldBindingDataBindControl)this.DocNo170).ReadOnly = true;
else
((UFSoft.UBF.UI.ControlModel.IUIFieldBindingDataBindControl)this.DocNo170).ReadOnly = false;
}
}
#endregion
CallBack计算值:
#region 数量金额联动
#region 回调注册/处理专区
///
/// 注册表格单元格内容改变的回调事件
///
private void AllotQtyChangedCallBack()
{
AssociationControl gridCellDataChangedASC = new AssociationControl(); //基本固定代码
gridCellDataChangedASC.SourceServerControl = this.DataGrid5;
gridCellDataChangedASC.SourceControl.EventName = "OnCellDataChanged";
//CallBack处理方案
((IUFClientAssoGrid)gridCellDataChangedASC.SourceControl).FireEventCols.Add("Price");
((IUFClientAssoGrid)gridCellDataChangedASC.SourceControl).FireEventCols.Add("Qty");
ClientCallBackFrm gridCellDataChangedCBF = new ClientCallBackFrm();
gridCellDataChangedCBF.ParameterControls.Add(this.DataGrid5);
gridCellDataChangedCBF.DoCustomerAction += new ClientCallBackFrm.ActionCustomer(AllotQtyChange);
gridCellDataChangedCBF.Add(gridCellDataChangedASC);
this.Controls.Add(gridCellDataChangedCBF);
}
///
/// 表格的CallBack处理方式
///
///
///
private object AllotQtyChange(CustomerActionEventArgs args)
{
this.Model.CustSO.ClearErrorMessage();
UFWebClientGridAdapter grid = new UFWebClientGridAdapter(this.DataGrid5);
//取表格数据(当前行)
ArrayList list = (ArrayList)args.ArgsHash[UFWebClientGridAdapter.ALL_GRIDDATA_SelectedRows]; //基本固定代码
int curIndex = int.Parse(list[0].ToString());
Hashtable table = (Hashtable)((ArrayList)args.ArgsHash[this.DataGrid5.ClientID])[curIndex];
decimal Qty = decimal.Parse(table["Qty"].ToString()); //数量
decimal Price = decimal.Parse(table["Price"].ToString()); //单价
decimal Money = Qty * Price;
//金额
grid.CellValue.Add(new object[] { curIndex, "Amont", new string[] { Money.ToString(), Money.ToString(), Money.ToString() } });
args.ArgsResult.Add(grid.ClientInstanceWithValue);
return args;
}
#endregion
5.布置发布
5.1、配置文件设置
参见档案开发部署,同档案发布部署步骤完全一致
单据开发
本文2024-08-20 16:20:41发表“u9cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/yonyou-u9cloud-1146.html