用友U9全部 课程讲解资料V30.docx
《用友U9全部 课程讲解资料V30.docx》由会员分享,可在线阅读,更多相关《用友U9全部 课程讲解资料V30.docx(66页珍藏版)》请在冰豆网上搜索。
![用友U9全部 课程讲解资料V30.docx](https://file1.bdocx.com/fileroot1/2023-1/26/250496f9-70e2-45ba-83da-e68c74286e23/250496f9-70e2-45ba-83da-e68c74286e231.gif)
用友U9全部课程讲解资料V30
(结合视频教学资料使用)
1.UBF路径配置
(视频160)
2.解决方案建立规则
目录层次:
解决方案>>项目>>组件
同一模块,所有BE、BP、SV项目放在(同)一个解决方案内
同一模块,所有BE,只用一个项目,即只生成一个BE的DLL
同一模块,所有BP、SV,只用一个项目,即只生成一个BP、SV的DLL
同一模块,可以所有枚举放在(同)一个BE组件内
同一模块,所有UI项目放在一个解决方案内
一个档案或单据UI,及其相关的查找参照UI,用(同)一个项目,即一个档案或单据,生成一个UI的DLL
同一模块,所有列表UI,用(同)一个项目
同一模块,所有参照UI,用(同)一个项目
3.命名规范
配件名:
UFIDA.U9.Cust.XM(地区).HXPP(公司).EX(模块)BE
表名:
Cust_XM(地区)_HXPP(公司)_EX(模块)_XXXX
4.档案开发需求
(视频170,180)
考核模块(EX)>>科目(Subject)
名称
显示名称
类型
备注
Org
组织
组织机构
业务主键,不可空
Code
编码
字符串
业务主键,不可空,长50
Name
科目名称
字符串
不可空,长200
SubjectType
科目类型
科目类型枚举
枚举值:
辅料、主要材料、产值、费用,对账差异,营销可比利润,调节项,其他收入,税后利润,考核税前利润
Effective
状态
状态
Memo
备注
字符串
长500
DescFlexField
扩展字段
实体扩展字段集合
5.BECode与Model对比
6.组件、类实体、属性关系查询(SQL语句)
selecta.NameasComponentName,at.DisplayNameasComponentName_CN,a.AssemblyName,a.Kind
b.NameasClassName,bt.DisplayNameasClassName_CN,b.FullName,b.Discriminator
c.NameasAttributeName,ct.DisplayNameasAttributeName_CN
fromUBF_MD_Componenta
leftouterjoinUBF_MD_Component_Trlatona.Local_ID=at.Local_IDandat.SysMLFlag='zh-cn'
leftouterjoinUBF_MD_Classbona.ID=b.MD_Component_ID
leftouterjoinUBF_MD_Class_Trlbtonb.Local_ID=bt.Local_IDandbt.SysMLFlag='zh-cn'
leftouterjoinUBF_MD_Attributeconb.ID=c.MD_Class_ID
leftouterjoinUBF_MD_Attribute_Trlctonc.Local_ID=ct.Local_IDandct.SysMLFlag='zh-cn'
where(1=1)
andbt.DisplayName='科目'
7.UICode与Model对比
8.UIForm、Part、Page的关系查询(SQL语句)
selectat.DisplayNameasUIFormDisplayName,a.nameasUIFormName,c.nameasPageName
a.uidas[UID(FormID)],b.PageCode
a.urias[PartID(UIFormURI)],c.uriasPageURI
a.AssemblyName,a.ClassName
a.Width,a.Height,dt.nameasApplicationName
fromubf_md_uiforma
leftouterjoinubf_assemble_partbona.uid=b.component
leftouterjoinubf_assemble_pageconb.page=c.id
leftouterjoinbase_application_trldtonc.application=dt.idanddt.sysmlflag='zh-cn'
leftouterjoinubf_md_uiform_trlatona.id=at.idandat.sysmlflag='zh-cn'
where(1=1)
andat.DisplayName='科目'
9.同步枚举脚本
以补丁包方式更新/安装,则不需要下面的脚本,因为be的bulk中会处理;
deletefromubf_sys_extenumtype
deletefromubf_sys_extenumtype_trl
deletefromubf_sys_extenumvalue
deletefromubf_sys_extenumvalue_trl
GO
insertintoubf_sys_extenumtypeselectlocal_idasid,'20060612','u9zhangheng','20060612','u9zhangheng',0,fullnameascode,isextend,idasuid,0asIsRefViewfromubf_md_classwhereclasstype=3
insertintoubf_sys_extenumtype_trlselecta.local_idasid,'zh-CN',b.[displayname]as[name],b.[Description]fromubf_md_classaleftjoinubf_RES_resourcevalueboncast(a.[iD]asnvarchar(255))=b.resourcenamewhereclasstype=3
insertintoubf_sys_extenumvalueselecta.local_idasid,'20060612','u9zhangheng','20060612','u9zhangheng',0,a.[Local_Class_ID]asExtEnumType,a.[name]ascode,a.defaultvalueasevalue,issystem,md_class_idasExtEnumTypeUIDfromubf_md_attributeasainnerjoinubf_md_classasbona.md_class_id=b.idwhereclasstype=3
insertintoubf_sys_extenumvalue_trlselecta.local_idasid,'zh-CN',c.[displayname]as[name]fromubf_md_attributeasainnerjoinubf_md_classasbona.md_class_id=b.idleftjoinubf_RES_resourcevalueconcast(a.[ID]asnvarchar(255))=c.resourcenamewhereclasstype=3
GO
--枚举值表关系
SELECTa.Code,at.NAME,a.EValue,c.UIDASEnumTypeUIDFROMUBF_Sys_ExtEnumValuea
LEFTOUTERJOINUBF_Sys_ExtEnumValue_TrlatONa.id=at.idANDat.SysMLFlag='zh-cn'
LEFTOUTERJOINUBF_Sys_ExtEnumTypecONa.ExtEnumType=c.id
WHEREc.Code='UFIDA.U9.Base.Doc.ConfirmTypeEnum'
10.装配发布
(视频190)
\UBFV28\U9.VOB.Product.UBF\UBFStudio
BuildupDesigner.exe
buildup.xml,修改UILib路径
.\Runtime\environment.xml
UserId=sa;Password=123456;DataSource=laputa\mssql2012;InitialCatalog=hxpp0326;packetsize=4096;MaxPoolsize=1500;persistsecurityinfo=True
带实例名的ConnectionString
UserId=sa;Password=123456;DataSource=DZY-\mssqlsever;InitialCatalog=HXPP0145;packetsize=4096;MaxPoolsize=100;ConnectionTimeout=900;persistsecurityinfo=True;MultipleActiveResultSets=true;
11.常用代码
(视频200,210,220)
BE上赋默认值,OnSetDefaultValue处增加代码
if(this.Org==null)
{this.Org=Context.LoginOrg;}
UI上赋默认值,Model>>AfterInitModel处增加代码
this.Subject.FieldOrg.DefaultValue=PDContext.Current.OrgRef.ID;
this.Subject.FieldOrg_Code.DefaultValue=PDContext.Current.OrgRef.CodeColumn;
this.Subject.FieldOrg_Name.DefaultValue=PDContext.Current.OrgRef.NameColumn;
扩展字段处理,在Webpart>>AfterCreateChildControls()里面调用:
FlexFieldHelper.SetDescFlexField(this.FlexFieldPicker0,this.Model.Subject);
其中:
this.FlexFieldPicker0为要设置的描述性弹性域控件,this.Model.Subject为描述性弹性域所在的View,把Subject换成你的View就可以了。
复制,Webpark中按钮事件写代码,复制功能自动完成,增加清除不需复制值的代码即可
this.Model.Subject.FocusedRecord.Code=string.Empty;
开启个性化,AfterCreateChildControls中加
UFIDA.U9.UI.PDHelper.PersonalizationHelper.SetPersonalizationEnable(this,true);
删除按钮绑定提示,AfterCreateChildControls中加
UFIDA.U9.UI.PDHelper.PDFormMessage.ShowDelConfirmDialog(this.Page,UFIDA.U9.UI.PDHelper.PDResource.GetDeleteConfirmInfo(),"",this.BtnDelete);
弹出窗口与非弹出窗口的按钮控制(确定、取消),在AfterUIModelBinding中调用SetControlStauts
privatevoidSetControlStauts()
{
//是否为弹出模态窗口
if(UFIDA.U9.UI.PDHelper.NavigateManager.IsTitleLink(this)||UFIDA.U9.UI.PDHelper.NavigateManager.IsModelPopup(this))
{
this.BtnOk.Visible=true;
this.BtnClose.Visible=true;
//列表动作不可用
this.BtnList.Enabled=false;
}
else
{
//确定取消不可见
this.BtnOk.Visible=false;
this.BtnClose.Visible=false;
this.BtnList.Enabled=true;
}
}
附件>>不用写代码,只需启用文档库。
12.UI事件的执行先后顺序
AfterEventBind,事件绑定之后
AfterCreateChildControls,创建控件之后
OnLoadData_Extend(刷新时执行,一般PostBack不执行)
AfterOnLoad
OnDataCollect_Extend(刷新时不执行,PostBack执行),数据收集
BeforeUIModelBinding,UIModel的值绑定到UIForm的控件之前
AfterUIModelBinding,UIModel的值绑定到UIForm的控件之后
13.贯穿BE和UI的关系图
14.不走审批流的提交、审核、弃审处理
不走审批流的提交、审核、弃审,按钮状态控制(示例代码)
privatevoidSetControlStauts()
{
PrintProduceSituationRecordr1=this.Model.PrintProduceSituation.FocusedRecord;
if(r1!
=null)
{
switch(r1.Status)
{
case0:
BtnSubmit.Enabled=true;
BtnApprove.Enabled=false;
BtnUndoApprove.Enabled=false;
BtnDelete.Enabled=true;
Card4.ReadOnly=false;
break;
case1:
BtnSubmit.Enabled=false;
BtnApprove.Enabled=true;
BtnUndoApprove.Enabled=false;
BtnDelete.Enabled=true;
Card4.ReadOnly=false;
break;
case2:
BtnSubmit.Enabled=false;
BtnApprove.Enabled=false;
BtnUndoApprove.Enabled=true;
BtnDelete.Enabled=false;
Card4.ReadOnly=true;
break;
default:
break;
}
}
//控制只读
((UFSoft.UBF.UI.ControlModel.IUIFieldBindingDataBindControl)this.Status178).ReadOnly=true;
((IUIFieldBindingDataBindControl)this.ApprovedBy101).ReadOnly=true;
((IUIFieldBindingDataBindControl)this.ApprovedOn311).ReadOnly=true;
}
不走审批流的提交、审核、弃审按钮处理(示例代码)
privatevoidBtnSubmit_Click_Extend(objectsender,EventArgse)
{
PrintProduceSituationRecordr1=this.Model.PrintProduceSituation.FocusedRecord;
if(r1!
=null&&r1.Status==0)
{
BtnSave_Click_Extend(sender,e);
r1.Status=1;
BtnSave_Click_Extend(sender,e);
SetControlStauts();
}
BtnSubmit_Click_DefaultImpl(sender,e);
}
privatevoidBtnApprove_Click_Extend(objectsender,EventArgse)
{
PrintProduceSituationRecordr1=this.Model.PrintProduceSituation.FocusedRecord;
if(r1!
=null&&r1.Status==1)
{
BtnSave_Click_Extend(sender,e);
r1.Status=2;
r1.ApprovedBy=long.Parse(PDContext.Current.UserID);
r1.ApprovedOn=DateTime.Now;
BtnSave_Click_Extend(sender,e);
SetControlStauts();
}
BtnApprove_Click_DefaultImpl(sender,e);
}
privatevoidBtnUndoApprove_Click_Extend(objectsender,EventArgse)
{
PrintProduceSituationRecordr1=this.Model.PrintProduceSituation.FocusedRecord;
if(r1!
=null&&r1.Status==2)
{
BtnSave_Click_Extend(sender,e);
r1.Status=0;
r1.ApprovedBy=null;
r1.ApprovedOn=null;
BtnSave_Click_Extend(sender,e);
SetControlStauts();
}
BtnUndoApprove_Click_DefaultImpl(sender,e);
}
15.常用ContextItems(上下文值)
Context.DateTime
Context.UserID
Context.UserName
Context.UserCode
Context.OrgID
Context.Culture
Context.Contact
Context.EnterpriseID
Context.EnterpriseName
16.查找代码
(视频230)
查找代码,AfterCreateChildControls中加
UFIDA.U9.UI.PDHelper.PDFormMessage.ShowConfirmDialog(this.Page,"92afc0de-6cba-4b56-a815-5efd0f2ebb55","580","408",Title,wpFindID.ClientID,BtnFind);
其中FormID,可在UI对应的Webpart代码中查到
17.参照关系查询(aspnet_Parts,UIRComponent,UIReference,EntityReference,Class,Component)(SQL语句)
selecta.FormId,a.ClassNameasRefClassName,a.AssemblyasRefAssemblyName,a.URIasRefURI
b.NameasRefComponentName,bt.DisplayNameasRefComponentName_CN
c.RefType,c.NameasRefTypeName,c.Filter,c.RefEntityId,c.RefEntityName
d.MD_Class_IDas[EntityReference_ClassID],d.MD_Template_IDas[EntityReference_TemplateID]
e.NameasRefEntity_ClassName,e.FullNameasRefEntity_ClassFullName,e.DefaultTableNameasRefEntity_TableName,et.DisplayNameasRefEntity_ClassName_CN
f.NameasRefEntity_ComponentName,f.AssemblyNameasRefEntity_AssemblyName
fromaspnet_Partsa
leftouterjoinUBF_MD_UIRComponentbona.FormId=b.UID
leftouterjoinUBF_MD_UIRComponent_Trlbtonb.ID=bt.ID
leftouterjoinUBF_MD_UIReferenceconb.UID=c.Container
leftouterjoinUBF_MD_EntityReferencedonc.Container=d.MD_Template_ID
leftouterjoinUBF_MD_Classeonc.RefEntityId=e.ID
leftouterjoinUBF_MD_Class_Trletone.Local_ID=et.Local_ID
leftouterjoinUBF_MD_Componentfone.MD_Component_ID=f.ID
where(1=1)
andc.Name='cref'
and(et.DisplayName='科目')
18.代码控制过滤条件
通过代码,给参照加过滤条件(示例代码),BeforeUIModelBinding
IUFFldReferenceColumnc1=(IUFFl