K3Cloud70插件开发应用案例讲课讲稿Word文件下载.docx

上传人:b****1 文档编号:5599539 上传时间:2023-05-05 格式:DOCX 页数:14 大小:41.96KB
下载 相关 举报
K3Cloud70插件开发应用案例讲课讲稿Word文件下载.docx_第1页
第1页 / 共14页
K3Cloud70插件开发应用案例讲课讲稿Word文件下载.docx_第2页
第2页 / 共14页
K3Cloud70插件开发应用案例讲课讲稿Word文件下载.docx_第3页
第3页 / 共14页
K3Cloud70插件开发应用案例讲课讲稿Word文件下载.docx_第4页
第4页 / 共14页
K3Cloud70插件开发应用案例讲课讲稿Word文件下载.docx_第5页
第5页 / 共14页
K3Cloud70插件开发应用案例讲课讲稿Word文件下载.docx_第6页
第6页 / 共14页
K3Cloud70插件开发应用案例讲课讲稿Word文件下载.docx_第7页
第7页 / 共14页
K3Cloud70插件开发应用案例讲课讲稿Word文件下载.docx_第8页
第8页 / 共14页
K3Cloud70插件开发应用案例讲课讲稿Word文件下载.docx_第9页
第9页 / 共14页
K3Cloud70插件开发应用案例讲课讲稿Word文件下载.docx_第10页
第10页 / 共14页
K3Cloud70插件开发应用案例讲课讲稿Word文件下载.docx_第11页
第11页 / 共14页
K3Cloud70插件开发应用案例讲课讲稿Word文件下载.docx_第12页
第12页 / 共14页
K3Cloud70插件开发应用案例讲课讲稿Word文件下载.docx_第13页
第13页 / 共14页
K3Cloud70插件开发应用案例讲课讲稿Word文件下载.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

K3Cloud70插件开发应用案例讲课讲稿Word文件下载.docx

《K3Cloud70插件开发应用案例讲课讲稿Word文件下载.docx》由会员分享,可在线阅读,更多相关《K3Cloud70插件开发应用案例讲课讲稿Word文件下载.docx(14页珍藏版)》请在冰点文库上搜索。

K3Cloud70插件开发应用案例讲课讲稿Word文件下载.docx

a) 

新建(打开)收货单插件工程(MyDev.K3.SCM.Stock.Business.PlugIn);

b) 

重载OnInitialize方法,定义List<

EnumItem>

用于存储下拉列表枚举值;

c) 

通过this.View.BusinessInfo.GetFieldList()方法获取所有字段;

d) 

通过this.View.GetControl<

ComboFieldEditor>

方法获取界面上的下拉列表控件;

e) 

SetComboItems绑定值;

f) 

代码如下:

C#

publicoverridevoidOnInitialize(InitializeEventArgse)

{

base.OnInitialize(e);

List<

list=newList<

();

foreach(Fieldfieldinthis.View.BusinessInfo.GetFieldList())

{

EnumItemitem=newEnumItem();

item.Caption=field.Name;

item.EnumId=field.Key;

item.Value=field.Key;

list.Add(item);

}

this.View.GetControl<

("

FCombo"

).SetComboItems(list);

}

在分录菜单上增加库存查询(tbQueryInventory)菜单项;

运行IDE,选择单据体-菜单集合,新增菜单:

保存;

点击库存查询时,查询分录上当前焦点所在物料的库存;

打开插件工程,重载方法EntryBarItemClick

判断BarItemKey==库存查询(tbQueryInventory)

取当前分录行

设置ListShowParameter参数,打开表单

这里介绍2种获取当前分录字段数据的方法:

TryGetEntryCurrentRow:

获取单据体当前行,返回是否取到值以及行数据和行号;

另外一种方法:

先获取单据体当前行号,再取指定行数据;

2种方法没什么区别。

示例代码如下:

publicoverridevoidEntryBarItemClick(BarItemClickEventArgse)

base.EntryBarItemClick(e);

if(e.BarItemKey=="

tbQueryInventory"

ShowQueryInventory();

privatevoidShowQueryInventory()

DynamicObjectrow;

introwIndex;

//直接获取当前分录行返回的是分录行对象。

if(this.Model.TryGetEntryCurrentRow("

FEntity"

outrow,outrowIndex))

ListShowParameterparameter=newListShowParameter();

parameter.FormId="

STK_Inventory"

;

//即时库存的FormId

parameter.MultiSelect=false;

parameter.ListFilterParameter.Filter=string.Format("

FMaterialId='

{0}'

"

Convert.ToString(row["

FBase_Id"

]));

this.View.ShowForm(parameter);

取单据体当前行号,再取指定行的字段数据的方法如下:

//获取当前行

introwIndex=this.Model.GetEntryCurrentRowIndex("

);

if(rowIndex>

-1)//判断当前行有数据

//取指定行的物料(ide中设置key为FBase)字段数据

DynamicObjectmaterialObj=(DynamicObject)this.Model.GetValue("

FBase"

rowIndex);

materialObj["

Id"

].ToString());

调试状态下,可以屏蔽代码parameter.ListFilterParameter.Filter看看过滤条件的效果。

注意:

ListFilterParameter的Filter属性设置的字段是用IDE中的字段标识。

查询库存时按组织隔离,只查询当前组织的库存:

增加过滤条件,组织=当前组织

FORGID={0}"

this.Model.Context.CurrentOrganizationInfo.ID)});

重载AuthPermissionBeforeF7Select方法,设置参数IsIsolationOrg=false;

同样,如果需要F8时控制只显示当前组织的物料,该参数设置为true。

在BOS系统中,默认是按组织隔离的,即非共享基础资料,在F8时都是只显示当前组织的物料。

代码示例如下:

publicoverridevoidAuthPermissionBeforeF7Select(AuthPermissionBeforeF7SelectEventArgse)

base.AuthPermissionBeforeF7Select(e);

if(e.FieldKey=="

e.IsIsolationOrg=false;

publicoverridevoidBeforeDoOperation(BeforeDoOperationEventArgse)

base.BeforeDoOperation(e);

if(e.Operation.FormOperation.Operation.Equals("

DRAFT"

StringComparison.OrdinalIgnoreCase))

this.Model.SetValue("

FBillTypeID"

null);

F8时只显示审核日期〉2014-03-22的供应商;

重载BeforeF7Select事件;

设置列表过滤参数ListFilterParameter的属性Filter;

publicoverridevoidBeforeF7Select(BeforeF7SelectEventArgse)

base.BeforeF7Select(e);

FSupplierId1"

stringfilter="

FCreateDate>

'

2014-03-20'

if(string.IsNullOrEmpty(e.ListFilterParameter.Filter))

e.ListFilterParameter.Filter=filter;

else

e.ListFilterParameter.Filter+="

AND"

+filter;

新建收货单服务插件工程MyDev.K3.SCM.App.Stock.ServicePlugIn;

定义保存服务类SaveServicePlugIn,继承自AbstractOperationServicePlugIn;

重载OnAddValidators方法;

publicoverridevoidOnAddValidators(AddValidatorsEventArgse)

base.OnAddValidators(e);

SaveValidatorsaveValidator=newSaveValidator();

saveValidator.EntityKey="

FBillHead"

e.Validators.Add(saveValidator);

定义保存校验类SaveValidator,继承自AbstractValidator;

重载方法:

Validate:

i. 

获取单据体分录数据,取到物料Id;

ii. 

查询物料库存;

iii. 

检查库存是否〉100;

iv. 

构造校验结果信息;

代码示例:

publicoverridevoidValidate(ExtendedDataEntity[]dataEntities,ValidateContextvalidateContext,Kingdee.BOS.Contextctx)

if(dataEntities==null||dataEntities.Length==0)

return;

Dictionary<

long,decimal>

dictErrMaterialId=newDictionary<

//取所有物料

long>

listMaterialId=newList<

foreach(ExtendedDataEntityentityObjindataEntities)

DynamicObjectCollectioncollection=(DynamicObjectCollection)entityObj["

];

foreach(DynamicObjectrowObjincollection)

listMaterialId.Add((long)rowObj["

]);

stringsql="

selecta.FMATERIALID,sum(a.FBASEQTY)FQTYfrom 

T_STK_INVENTORYawhereexists(select1fromTABLE(fn_StrSplit(@FMATERIALID,'

'

1))twheret.FID=a.FMATERIALID)groupbyFMATERIALID"

SqlParamparam=newSqlParam("

@FMATERIALID"

KDDbType.udt_inttable,listMaterialId.Distinct().ToArray());

using(IDataReaderdr=DBUtils.ExecuteReader(this.Context,sql,param))

while(dr.Read())

decimalqty=Convert.ToDecimal(dr["

FQTY"

if(qty>

100)

dictErrMaterialId.Add(Convert.ToInt64(dr["

FMATERIALID"

]),qty);

if(dictErrMaterialId.ContainsKey((long)rowObj["

]))

ValidationErrorInfoerrinfo=newValidationErrorInfo("

Convert.ToString(entityObj.DataEntity["

]),entityObj.DataEntityIndex,Convert.ToInt32(rowObj["

]),"

SaveValidator"

"

库存数量大于100"

校验失败"

ErrorLevel.Error);

validateContext.AddError(entityObj,errinfo);

锁定字段的方法:

this.View.LockField;

该锁定与事务无关,只要在客户端保存后事件(AfterBarItemClick)处理即可;

“收料部门”、“收料员”的key可以在IDE设计器中拷贝;

代码如下:

publicoverridevoidAfterBarItemClick(AfterBarItemClickEventArgse)

base.AfterBarItemClick(e);

tbSave"

this.View.LockField("

FBase1"

true);

FBase2"

保存后自动记录收料日志(KDV_stk_ReceiptLog);

根据需求设计收料日志表:

字段

名称

类型

说明

KDV_ID

日志ID

int

自增长

KDV_UserID

操作用户

Int

关联用户表ID

KDV_Date

操作时间

Datetime

缺省getdate

KDV_Content

日志内容

Nvarchar(2000)

保存有2种方法:

方法1:

在IDE中定义收料日志基础资料;

打开收货单服务插件保存服务类SaveServicePlugIn;

根据收料日志基础资料的元数据定义,创建动态实体对象;

设置对象属性值;

调用BusinessDataService服务的保存方法保存动态实体对象;

publicoverridevoidAfterExecuteOperationTransaction(AfterExecuteOperationTransactione)

base.AfterExecuteOperationTransaction(e);

MetaDataServicemetaService=newMetaDataService();

FormMetadataformMetaData=(FormMetadata)metaService.Load(this.Context,"

1823871d-b9cf-4d8b-93af-39c0c37011a5"

DynamicObjectTypedt=formMetaData.BusinessInfo.GetDynamicObjectType();

DynamicObjectobj=newDynamicObject(dt);

dt.Properties["

KDV_UserID_Id"

].SetValueFast(obj,this.Context.UserId);

KDV_Content"

].SetValueFast(obj,"

保存"

ISaveServicesaveService=ServiceHelper.GetService<

ISaveService>

saveService.Save(this.Context,newDynamicObject[]{obj});

方法2:

自定义收料日志表;

获取日志的自增长(序列)值;

执行insert;

SequenceReadersequence=newSequenceReader(this.Context);

int[]ids=(int[])sequence.GetSequence("

KDV_stk_ReceiptLog"

1);

intid=ids[0];

insertintoKDV_stk_ReceiptLog(FID,KDV_UserID,KDV_Content)values(@FID,@KDV_UserID,@KDV_Content)"

SqlParam[]sqlParams=newSqlParam[3];

sqlParams[0]=newSqlParam("

@FID"

KDDbType.Int64,id);

sqlParams[1]=newSqlParam("

@KDV_UserID"

KDDbType.Int64,this.Context.UserId);

sqlParams[2]=newSqlParam("

@KDV_Content"

KDDbType.String,"

DBUtils.Execute(this.Context,sql,sqlParams);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 临床医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2