当前位置:文档之家› 用友U9全部 课程讲解资料V3.0

用友U9全部 课程讲解资料V3.0

用友U9全部 课程讲解资料V3.0
用友U9全部 课程讲解资料V3.0

(结合视频教学资料使用)

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)

5.BE Code与Model对比

6.组件、类实体、属性关系查询(SQL语句)

select a. Name as ComponentName ,at. DisplayName as ComponentName_CN,a. AssemblyName,a .Kind ,b. Name as ClassName , bt. DisplayName as ClassName_CN,b. FullName,b .Discriminator

,c. Name as AttributeName ,ct. DisplayName as AttributeName_CN

from UBF_MD_Component a

left outer join UBF_MD_Component_Trl at on a. Local_ID=at .Local_ID and at.SysMLFlag= 'zh-cn'

left outer join UBF_MD_Class b on a. ID=b .MD_Component_ID

left outer join UBF_MD_Class_Trl bt on b. Local_ID=bt .Local_ID and bt.SysMLFlag= 'zh-cn'

left outer join UBF_MD_Attribute c on b. ID=c .MD_Class_ID

left outer join UBF_MD_Attribute_Trl ct on c. Local_ID=ct .Local_ID and ct.SysMLFlag= 'zh-cn'

where (1 =1)

and bt. DisplayName='科目'

7.UI Code与Model对比

8.UIForm、Part、Page的关系查询(SQL语句)

select at .DisplayName as UIFormDisplayName , a .name as UIFormName ,c. name as PageName

,a. uid as [UID(FormID)], b.PageCode

,a. uri as [PartID(UIFormURI)], c.uri as PageURI

,a. AssemblyName , a.ClassName

,a. Width,a .Height, https://www.doczj.com/doc/749415811.html, as ApplicationName

from ubf_md_uiform a

left outer join ubf_assemble_part b on a.uid =b. component

left outer join ubf_assemble_page c on b.page =c. id

left outer join base_application_trl dt on c.application =dt. id and dt. sysmlflag='zh-cn'

left outer join ubf_md_uiform_trl at on a.id =at. id and at. sysmlflag='zh-cn'

where (1 =1)

and at.DisplayName='科目'

9.同步枚举脚本

以补丁包方式更新/安装,则不需要下面的脚本,因为be的bulk中会处理;

delete from ubf_sys_extenumtype

delete from ubf_sys_extenumtype_trl

delete from ubf_sys_extenumvalue

delete from ubf_sys_extenumvalue_trl

GO

insert into ubf_sys_extenumtype select local_id as id,'20060612' ,'u9zhangheng', '20060612','u9zhangheng' ,0, fullname as code, isextend,id as uid,0 as IsRefView from ubf_md_class where classtype=3

insert into ubf_sys_extenumtype_trl select a .local_id as id ,'zh-CN', b.[displayname] as [name],b .[Description] from ubf_md_class a left join ubf_RES_resourcevalue b on cast( a.[iD] as nvarchar(255 )) = b. resourcename where classtype =3 insert into ubf_sys_extenumvalue select a .local_id as id,'20060612' ,'u9zhangheng', '20060612','u9zhangheng' ,0, a.[Local_Class_ID] as ExtEnumType , a.[name] as code,a .defaultvalue as evalue ,issystem, md_class_id as ExtEnumTypeUID from ubf_md_attribute as a inner join ubf_md_class as b on a. md_class_id=b .id where classtype =3

insert into ubf_sys_extenumvalue_trl select a .local_id as id ,'zh-CN', c.[displayname] as [name] from ubf_md_attribute as a inner join ubf_md_class as b on a.md_class_id =b. id left join ubf_RES_resourcevalue c on cast( a.[ID] as nvarchar(255 )) = c. resourcename where classtype= 3

GO

--枚举值表关系

SELECT a .Code , at .NAME ,a. EValue, c.UID AS EnumTypeUID FROM UBF_Sys_ExtEnumValue a

LEFT OUTER JOIN UBF_Sys_ExtEnumValue_Trl at ON a.id =at . id AND at. SysMLFlag='zh-cn'

LEFT OUTER JOIN UBF_Sys_ExtEnumType c ON a.ExtEnumType =c . id

WHERE c .Code = 'UFIDA.U9.Base.Doc.ConfirmTypeEnum'

10.装配发布

(视频190)

\UBFV28\U9.VOB.Product.UBF\UBFStudio

BuildupDesigner.exe

buildup.xml,修改UILib路径

.\Runtime\environment.xml

User Id=sa;Password=123456;Data Source=laputa\mssql2012;Initial Catalog=hxpp0326;packet size=4096;Max Pool size=1500;persist security info=True

带实例名的ConnectionString

User Id=sa;Password=123456;Data Source=DZY-\mssqlsever;Initial

Catalog=HXPP0145;packet size=4096;Max Pool size=100;Connection Timeout=900;persist security info=True;MultipleActiveResultSets=true;

11.常用代码

(视频200,210,220)

BE上赋默认值,OnSetDefaultValue 处增加代码

if (https://www.doczj.com/doc/749415811.html, == null)

{ https://www.doczj.com/doc/749415811.html, = Context.LoginOrg; }

UI上赋默认值,Model>>AfterInitModel 处增加代码

this.Subject.FieldOrg.DefaultValue = https://www.doczj.com/doc/749415811.html,Ref.ID;

this.Subject.FieldOrg_Code.DefaultValue = https://www.doczj.com/doc/749415811.html,Ref.CodeColumn;

this.Subject.FieldOrg_Name.DefaultValue = https://www.doczj.com/doc/749415811.html,Column;

扩展字段处理,在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.GetDeleteConfir mInfo(), "", this.BtnDelete);

弹出窗口与非弹出窗口的按钮控制(确定、取消),在AfterUIModelBinding中调用SetControlStauts

private void SetControlStauts ()

{

//是否为弹出模态窗口

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.不走审批流的提交、审核、弃审处理

不走审批流的提交、审核、弃审,按钮状态控制(示例代码)

private void SetControlStauts()

{

PrintProduceSituationRecord r1 = this.Model.PrintProduceSituation.FocusedRecord;

if (r1 != null)

{

switch (r1.Status)

{

case 0:

BtnSubmit.Enabled = true;

BtnApprove.Enabled = false;

BtnUndoApprove.Enabled = false;

BtnDelete.Enabled = true;

Card4.ReadOnly = false;

break;

case 1:

BtnSubmit.Enabled = false;

BtnApprove.Enabled = true;

BtnUndoApprove.Enabled = false;

BtnDelete.Enabled = true;

Card4.ReadOnly = false;

break;

case 2:

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;

}

不走审批流的提交、审核、弃审按钮处理(示例代码)

private void BtnSubmit_Click_Extend(object sender, EventArgs e)

{

PrintProduceSituationRecord r1 = 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);

}

private void BtnApprove_Click_Extend(object sender, EventArgs e)

{

PrintProduceSituationRecord r1 = this.Model.PrintProduceSituation.FocusedRecord;

if (r1 != null && r1.Status == 1)

{

BtnSave_Click_Extend(sender, e);

r1.Status = 2;

r1.ApprovedBy = long.Parse(https://www.doczj.com/doc/749415811.html,erID);

r1.ApprovedOn = DateTime.Now;

BtnSave_Click_Extend(sender, e);

SetControlStauts();

}

BtnApprove_Click_DefaultImpl(sender, e);

}

private void BtnUndoApprove_Click_Extend(object sender, EventArgs e)

{

PrintProduceSituationRecord r1 = 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

https://www.doczj.com/doc/749415811.html,erID

https://www.doczj.com/doc/749415811.html,erName

https://www.doczj.com/doc/749415811.html,erCode

https://www.doczj.com/doc/749415811.html,ID

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语句)

select a. FormId , a .ClassName as RefClassName ,a .Assembly as RefAssemblyName,a. URI as RefURI

,b. Name as RefComponentName ,bt. DisplayName as RefComponentName_CN

,c. RefType ,c .Name as RefTypeName,c .Filter, c.RefEntityId ,c. RefEntityName

,d. MD_Class_ID as [EntityReference_ClassID] ,d. MD_Template_ID as [EntityReference_TemplateID]

,e. Name as RefEntity_ClassName ,e. FullName as RefEntity_ClassFullName, e.DefaultTableName as RefEntity_TableName,et. DisplayName as RefEntity_ClassName_CN

,f. Name as RefEntity_ComponentName ,f. AssemblyName as RefEntity_AssemblyName

from aspnet_Parts a

left outer join UBF_MD_UIRComponent b on a. FormId=b .UID

left outer join UBF_MD_UIRComponent_Trl bt on b. ID=bt .ID

left outer join UBF_MD_UIReference c on b. UID=c .Container

left outer join UBF_MD_EntityReference d on c. Container=d .MD_Template_ID

left outer join UBF_MD_Class e on c. RefEntityId=e .ID

left outer join UBF_MD_Class_Trl et on e. Local_ID=et .Local_ID

left outer join UBF_MD_Component f on e. MD_Component_ID=f .ID

where (1 =1)

and c. Name='cref'

and (et. DisplayName='科目')

18.代码控制过滤条件

通过代码,给参照加过滤条件(示例代码),BeforeUIModelBinding

IUFFldReferenceColumn c1 = (IUFFldReferenceColumn)this.DataGrid5.Columns["WaterMarkMO"];

c1.CustomInParams = BaseAction.Symbol_AddCustomFilter + "=UFIDA::U9::Cust::HXPP::MO::WaterMarkMOBE::WaterMarkMO.DocNo in (select MO.DocNo from UFIDA::U9::MO::MO::MO as MO where https://www.doczj.com/doc/749415811.html,=UFIDA::U9::Cust::HXPP::MO::WaterMarkMOBE::https://www.doczj.com/doc/749415811.html, and MO.DocState in (2,3))";

用代码控制参数过滤(示例代码),Webpart,在OnLoadData_Extend中写代码

if (this.Model.cRef.CurrentFilter.Parameters[0] != null)

{

//此处.Parameters[0],也可用.Parameters["@ID"]代替

long curID = long.Parse(this.Model.cRef.CurrentFilter.Parameters[0].DataValue.ToString());

if (curID > 0)

{

string childID = FLDcsUI.Get.TreeChildID("CustUT_GC_ParameterConfig", "Parent", curID);

if (!string.IsNullOrEmpty(childID))

{

this.Model.cRef.CurrentFilter.OPath += " and UFIDA::U9::Cust::UT::GC::ParameterConfigBE::ParameterConfig.ID not in (" + childID + ")";

}

}

}

19.页面导航代码

(视频240)

卡片导航到列表,在相应的UI项目,Webpart,BtnList_Click_Extend

this.NavigatePage("UFIDA.U9.Cust.XM.HXPP.EX.SubjectListURI", null);

列表导航到卡片

新增,在相应的LIST Action,OnNew_Extend中加

this.CurrentPart.NavigatePage("UFIDA.U9.Cust.XM.HXPP.EX.SubjectURI", null);

双击行跳转,在相应的LIST Action,OnGridRowDbClick_Extend中加

UFIDA.U9.UI.PDHelper.NaviteParamter p = new NaviteParamter();

//是正拖的话,这里需用MainID

string dataid = this.CurrentModel.Subject.FocusedRecord["ID"].ToString();

if (!string.IsNullOrEmpty(dataid))

{

https://www.doczj.com/doc/749415811.html,Values.Add("PDPageStatus", "browser");

https://www.doczj.com/doc/749415811.html,Values.Add("ID", dataid);

UFIDA.U9.UI.PDHelper.NavigateManager.NavigatePage(this.CurrentPart,

"UFIDA.U9.Cust.XM.HXPP.EX.SubjectURI", p);

}

列表过滤当前组织数据,在相应的LIST Action,CustomFilterOpath_Extend中加

if (string.IsNullOrEmpty(filterOpath))

{ filterOpath = string.Format("Org={0}", https://www.doczj.com/doc/749415811.html,ID);

}

else

{ filterOpath += string.Format(" and Org={0}", https://www.doczj.com/doc/749415811.html,ID);

}

20.单据开发需求

费用明细单行(FeeDetailLine)

(视频250)

单据类型基类、单据基类,在发布对象浏览器的UBF的BaseBE内,DocTypeBE

(固定)编译出错:

错误 4 “UFIDA.U9.Cust.XM.HXPP.EX.FeeDetailBE.FeeDetail”不会实现继承的抽象成员“UFIDA.U9.Base.Doc.Doc.DocType.get”D:\UFIDA\VSProject\Training\EXBE\Entity\FeeDetailBE\FeeDetail.cs 14 24

UFIDA.U9.Cust.XM.HXPP.EXBE

需要在BE代码对应单据(FeeDetail)的Extend中,增加以下代码

//重载DocType.get

public override UFIDA.U9.Base.Doc.DocType DocType

{

get { return this.FDDocType; }

}

//费用明细单单据类型,费用明细单,实体对应Extend,OnSetDefaultValue中赋组织默认值

赋默认值代码

21.费用明细单单据类型UI开发

(视频260)

编号规则(又叫编码方案)的参照,在发布对象浏览器的UI的UFIDA.U9.CBO.Ref.BaseReferenceUI.MetaData中

编号规则(又叫单据编码规则)的Form引用,在发布对象浏览器的UI的UFIDA.U9.Base.Sequence.SequenceUI.WebPart 费用明细单单据类型查找对应的参照开发

常用代码

查找代码

发布组件、发布页面、发布菜单

22.费用明细单单据类型列表对应开发

(视频270)

页面导航代码

发布页面

23.EX模块的参照开发(EXUIREF)

(视频280)

费用明细单单据类型参照

科目的参照

发布组件

24.费用明细单UI开发

(视频290)

费用明细单查找对应的参照开发

发布组件、发布页面、发布菜单

加代码

(视频300)

常用代码

//默认当前日期,单据UI>>Model>> AfterInitModel

this.FeeDetail.FieldBusinessDate.DefaultValue = DateTime.Now;

//Grid上的扩展字段处理

FlexFieldHelper.SetDescFlexField(this.DataGrid5, this.DataGrid5.Columns.Count - 1, "DescFlexField");

//行号设置

//引用UFIDA.U9.Base.BaseBP.Agent.dll,UFIDA.U9.Base.BaseBP.Deploy.dll

UFIDA.U9.Base.Profile.Proxy.GetProfileValueProxy p1 = new UFIDA.U9.Base.Profile.Proxy.GetProfileValueProxy(); int sequenceStart1 = 10;

UFSoft.UBF.UI.ControlModel.IAutoRowNo r1;

p1.ProfileCode = "SysLineNo";

p1.ProfileOrg = long.Parse(https://www.doczj.com/doc/749415811.html,ID);

UFIDA.U9.Base.Profile.PVDTOData data1 = p1.Do();

if (data1 != null && !string.IsNullOrEmpty(data1.ProfileValue))

{ int.TryParse(data1.ProfileValue, out sequenceStart1); }

r1 = ((UFSoft.UBF.UI.ControlModel.IAutoRowNo)this.DataGrid5.Columns["RowNo"]);

r1.Sequence = true;

r1.SequenceStart = sequenceStart1;

r1.SequenceStep = r1.SequenceStart;

查找代码

25.费用明细单列表对应开发

(视频310)

页面导航代码

发布页面

26.费用明细单中单据类型、及科目的Form引用实现

(视频320)

弹出Form,取消按钮关闭窗口代码

this.CloseDialog(false);

27.BP开发

BP开发,假定需求:费用明细单,增加加载按钮,按传入条件自动加载行。

(视频330)

传入:组织ID,长整型;科目类型,整型

返回:List,DTO包含科目信息

需要引用:UFIDA.U9.Cust.XM.HXPP.EXBE.Dll

28.BE,UI,BP,SV引用规则

后期UI启用新事件,(由于Extend代码不会再覆盖)需手动在Extend中加事件代码,可参考原有的事件写,如private void BtnClose_Click_Extend(object sender, EventArgs e)

{

BtnClose_Click_DefaultImpl(sender, e);

}

29.BP部份关键代码

BP代码

//实体查找,写法1

StringBuilder sb1=new StringBuilder (256);

sb1.Append ("Org=@org1");

sb1.Append (" and SubjectType=@subjecttype1");

sb1.Append (" and Effective.IsEffective=1");

sb1.Append (" and '" + Context.LoginDateTime +"' between Effective.EffectiveDate and Effective.DisableDate");

Subject.EntityList el1 = Subject.Finder.FindAll(sb1.ToString(),new OqlParam [2]{new OqlParam (https://www.doczj.com/doc/749415811.html,ID ),new OqlParam (bpObj.SubjectTypeValue)});

UI代码

写获取行号的方法

//增加行前,先清除旧行

this.Model.FeeDetail_FeeDetailLine.Clear();

//增加新行

FeeDetail_FeeDetailLineRecord r1 = this.Model.FeeDetail_FeeDetailLine.AddNewUIRecord();

//绑定父行

r1.SetParentRecord(this.Model.FeeDetail.FocusedRecord);

30.调试

代码调试(U9V2.5使用VS2005调试,需按以下修改)

1、修改U9应用程序池(运行inetmgr),将.Net Framework版本改为2.0

2、Portal下,原web.config改名为>>web.config.bak(备份),https://www.doczj.com/doc/749415811.html,35改为>>web.config

(如按以上修改后,Portal无法正常打开,则还原上面的修改,安装VS2010 Ultimate,将要调试的类文件,拖入vs2010,同样是附加到进程进行调试)

调试方法

将代码附加(快捷键Ctrl+Alt+P)到w3wp(勾选显示所有会话中的进程)进程,设置断点,即可进行调试。

异常控制(Ctrl+Alt+E):用于无法定位错误位置的代码调试。

快速监视(Ctrl+D、Q):查看变量值。

31.UI布局设计

通过对容器的网格行、列集合属性的设定,以及摆放各类控件,进行UI布局设计。

容器类控件均有“容器布局”属性,容器布局属性主要由上边距、下边距、左边距、右边距、行间距、网格列集合、网格行集合属性组成,UIForm,Card(卡片控件)均为容器。

容器布局

容器内分布网格(网格列集合,网格行集合组成),网格存放各控件,Card的网格有类型value,spacing,title;

如上卡片控件(Card),网格列集合数为7,网格行集合数为8,灰色为行间距。

可以看布局列信息上面的末列数值,对快速布局很有帮助,末列数值指示出最后一列的宽度,如下:

多用界面控件树查看层次关系,有助于提升视觉理解。

练习画以下UIForm样式:

(视频340)

32.建立主账簿(使标准产品不要进入即报错)

(视频350)

33.插件开发

包括有UI插件、BE插件、BP插件,而其中的BP插件较少应用,可按需查阅用友开发资料。

命名规范依据项目而定,最重要是统一,参考如下:

UI插件命名空间、程序集名称、项目名称:UFIDA.U9.Cust.地区.客户. UIPlugIn

插件类命名:单据简称+UIPlugInExtend

BE插件命名空间、程序集名称、项目名称:UFIDA.U9.Cust.地区.客户.BEPlugIn

插件类命名:单据简称+[插件位置(Update、Insert……)可略,可通过Event判断]+BEPlugInExtend

34.UI插件开发

(视频360)

假定需求:在采购管理>>标准采购的下方操作功能区,增加“科目”按钮,弹出“科目”窗口,同时将标准采购的单据类型名称,传给“科目”的备注,参考图:

35.UI插件开发过程关键点

手动新建类库项目(使生成代码命名风格与U9生成的代码保持一致);

//必须引用的dll

//UFSoft.UBF.UI.IView.dll (bin,applicationserver\bin)

//UFSoft.UBF.UI.FormProcess.dll (ubflib,applicationserver\bin)

//页面扩展按钮必须引用的dll

//UFSoft.UBF.UI.Engine.Runtime.dll (bin,applicationserver\bin)

//UFSoft.UBF.UI.WebControls.BaseComponent.dll (bin,applicationserver\bin)

//.NET的System.Web

//UFSoft.UBF.UI.Controls.Interface.dll (bin,applicationserver\bin)

//UFSoft.UBF.UI.MD.Runtime.dll (ubflib,applicationserver\bin)

//......

UI插件可扩展的事件(常用的)

初始化后,创建控件树,创建关联控件

AfterInit(UFSoft.UBF.UI.IView.IPart part, EventArgs args)

Form加载后

AfterLoad(UFSoft.UBF.UI.IView.IPart Part, EventArgs args)

......

扩展类示例代码(参考代码)

public class ExtendUIProcess : UFSoft.UBF.UI.Custom.ExtendedPartBase

{

//后面事件需要通过IPart取值

private UFSoft.UBF.UI.IView.IPart _part;

///

/// 重写初始化后事件,创建控件树,创建关联控件

///

///

///

public override void AfterInit(UFSoft.UBF.UI.IView.IPart part, EventArgs args)

{

//首先调用原来的事件

base.AfterInit(part, args);

//校验有效

if (part == null || part.Model == null)

{return;}

_part = part;

//页面扩展-加按钮

#region 页面扩展-加按钮

//实例化按钮

IUFButton btnShowSubject = new UFWebButtonAdapter();

btnShowSubject.Text = "科目";

btnShowSubject.ID = "BtnShowSubject";

btnShowSubject.AutoPostBack = true;

//加入Card容器

IUFCard card = (IUFCard)part.GetUFControlByName(part.TopLevelContainer, "Card0");

card.Controls.Add(btnShowSubject);

https://www.doczj.com/doc/749415811.html,yout(card,btnShowSubject, 18, 0);

//设置按钮事件

btnShowSubject.Click += new EventHandler(btnShowSubject_Click);

#endregion

}

}

//按钮事件

void btnShowSubject_Click(object sender, EventArgs e)

{

//写业务逻辑代码

//......

}

//集团人员写的类,可复制使用

public class CommonFunction

{

///

/// 设置控件在卡片容器中的布局

///

/// 卡片容器

/// 增加的控件

/// 布局横坐标

/// 布局纵坐标

public static void Layout(IContainer container, IUFControl ctrl, uint x, uint y)

{

Layout(container, ctrl, x, y, 1, 1, Unit.Pixel(0), Unit.Pixel(0), true);

}

///

/// 设置控件在卡片容器中的布局

///

/// 卡片容器

/// 增加的控件

/// 布局横坐标

/// 布局纵坐标

/// 控件宽

/// 控件高

public static void Layout(IContainer container, IUFControl ctrl, uint x, uint y, int width, int height)

{

Layout(container, ctrl, x, y, 1, 1, Unit.Pixel(width), Unit.Pixel(height), false);

}

///

/// 设置控件在卡片容器中的布局

///

/// 卡片容器

/// 增加的控件

/// 布局横坐标

/// 布局纵坐标

/// 单元格横向跨度

/// 单元格纵向跨度

/// 控件宽

/// 控件高

/// 是否自适应大小

public static void Layout(IContainer container, IUFControl ctrl, uint x, uint y, int xspan, int yspan,

Unit width, Unit height, bool isAutoSize)

{

IGridLayout gl = https://www.doczj.com/doc/749415811.html,yout as IGridLayout;

if (gl == null) return;

GridLayoutInfo glInfo = new GridLayoutInfo((uint)x, (uint)y, (uint)xspan, (uint)yspan, width, height);

glInfo.AutoSize = isAutoSize;

gl.Controls.Add((Control)ctrl, glInfo);

}

}

36.UI插件部署

UI插件配置文件说明(部署UI插件,先看看效果)

复制Portal\ WebPartExtend_Vendor1.config文件,进行修改>>WebPartExtend_Cust_XM_HXPP_(标准模块).config 文件

extendedPartAssemblyName="UFIDA.U9.Cust.MO.UIPlugIn.dll">

(相应修改以下内容)

parentPartFullName 要扩展的原Form全名

extendedPartFullName 插件类全名

extendedPartAssemblyName 插件程序集名

如何查要扩展的原Form全名

UI插件部署位置

UI插件dll部署到portal\uilib(可自行编写autobuild.bat)

WebPartExtend_XXX.config 部署到portal

37.按钮事件代码参考

//将插件中的FocusedReocrd转成强类型,以方便取值,具体Record所在的View,可使用监视查看

//引用UFIDA.U9.SCM.PM.PurchaseOrderUI.WebPart.dll

UFIDA.U9.PM.PurchaseOrderUIModel.PurchaseOrderRecord r1 = (UFIDA.U9.PM.PurchaseOrderUIModel.PurchaseOrderRecord)_part.Model.Views[0].FocusedRecord;

https://www.doczj.com/doc/749415811.html,ValueCollection p1 = new https://www.doczj.com/doc/749415811.html,ValueCollection();

p1.Add("PODocTypeName",r1.DocumentType_Name);

//弹出科目窗口,cd989ec3-fe4e-4943-8e4c-a2f91a5d1bab为FormID,可打开源代码查看,也可通过sql语句查看

//p1为NameValueCollection,页面传参用

_part.ShowModalDialog("cd989ec3-fe4e-4943-8e4c-a2f91a5d1bab", "科目", "992", "504", _part.TaskId.ToString(), p1,false);

//科目页面,接受参数值处理

public void BeforeUIModelBinding()

{

if (this.Model.Subject.FocusedRecord == null)

{ this.Model.Subject.FocusedRecord = this.Model.Subject.AddNewUIRecord(); }

if (NameValues != null && NameValues["PODocTypeName"] != null)

{

this.Model.Subject.FocusedRecord.Memo = NameValues["PODocTypeName"].ToString();

}

}

38.UI插件常用代码(示例代码)

//取得插件页面上的按钮控件

UFSoft.UBF.UI.ControlModel.IUFButton btnSetup = (IUFButton)_part.GetUFControlByName(this._part.TopLevelContainer, "BtnSetup");

//注册按钮事件

btnSetup.Click += new EventHandler(btnSetup_Click);

//编写按钮事件动作代码

void btnSetup_Click(object sender, EventArgs e)

{}

//NameValue页面传值

//传送

相关主题
文本预览
相关文档 最新文档