业务场景:打开销售订单,点击按钮,弹出动态表单1.增加按钮编辑、批量编辑字段属性、菜单集合、添加按钮2.新增动态表单,并配置页面emmm……好吧3.单据测试一直都不行,看了下社区好像也没有啥可参考,有哪位大神知道怎么搞的不?看过资料好像有说是用administrator账号的原因?4.前端打开是可以的业务场景:根据销售订单查询销售出库单1.SQL语句--销售出库单select*fromT_SAL_OUTSTOCKwhereFBILLNO='XSCKD000036'--FID100060--销售出库单据体select*fromT_SAL_OUTSTOCKENTRYwhereFID=100060--销售出库单select*fromT_SAL_OUTSTOCKENTRYt1innerjoinT_SAL_OUTSTOCKt2ont2.FID=t1.FIDwheret2.FBILLNO='XSCKD000036'--selectt2.FBILLNO,*fromT_SAL_OUTSTOCKENTRYt1innerjoinT_SAL_OUTSTOCKt2ont2.FID=t1.FIDwheret2.FBILLNO='XSCKD000036'--物料表select*fromT_BD_MATERIALwhereFMATERIALID=100322--单据编号、物料编码(根据销售出库单单据编号获取对应的物料编号)selectt2.FBILLNO,t3.FNUMBERfromT_SAL_OUTSTOCKENTRYt1innerjoinT_SAL_OUTSTOCKt2ont2.FID=t1.FIDleftjoinT_BD_MATERIALt3ont3.FMATERIALID=t1.FMATERIALIDwheret2.FBILLNO='XSCKD000036'--物料名称select*fromT_BD_MATERIAL_L--selectt2.FBILLNO,t3.FNUMBER,t4.FNAMEfromT_SAL_OUTSTOCKENTRYt1innerjoinT_SAL_OUTSTOCKt2ont2.FID=t1.FIDleftjoinT_BD_MATERIALt3ont3.FMATERIALID=t1.FMATERIALIDleftjoinT_BD_MATERIAL_Lt4ont4.FMATERIALID=t1.FMATERIALIDANDt4.FLOCALEID=2052wheret2.FBILLNO='XSCKD000036'selectt2.FBILLNO,t3.FNUMBER,t4.FNAME,t1.FREALQTYfromT_SAL_OUTSTOCKENTRYt1innerjoinT_SAL_OUTSTOCKt2ont2.FID=t1.FIDleftjoinT_BD_MATERIALt3ont3.FMATERIALID=t1.FMATERIALIDleftjoinT_BD_MATERIAL_Lt4ont4.FMATERIALID=t1.FMATERIALIDANDt4.FLOCALEID=2052wheret2.FBILLNO='XSCKD000036'--销售出库单,订单单号selectFSoorDerno,*fromT_SAL_OUTSTOCKENTRY_Rselectt2.FBILLNO,t3.FNUMBER,t4.FNAME,t1.FREALQTY,t5.FSOORDERNOfromT_SAL_OUTSTOCKENTRYt1innerjoinT_SAL_OUTSTOCKt2ont2.FID=t1.FIDleftjoinT_BD_MATERIALt3ont3.FMATERIALID=t1.FMATERIALIDleftjoinT_BD_MATERIAL_Lt4ont4.FMATERIALID=t1.FMATERIALIDANDt4.FLOCALEID=2052innerjoinT_SAL_OUTSTOCKENTRY_Rt5ont5.FENTRYID=t1.FIDwheret2.FBILLNO='XSCKD000036'2.代码官方提示说DBUtils.ExecuteDataSet方法已过期,就用DBUtils.ExecuteDynamicObject搞了下publicoverridevoidOnLoad(EventArgse){base.OnLoad(e);//接收传递过来的参数//从TestFormPlugIn.cs的BarItemClick()中传递过来的//DynamicFormShowParameterform=newDynamicFormShowParameter();//form.FormId="k5e67ca60f42947cfbed164cd90280d43";//form.CustomParams.Add("FBillNo",Convert.ToString(this.View.Model.GetValue("FBillNo")));FBillNo=this.View.OpenParameter.GetCustomParameter("FBillNo").ToString();stringsql=string.Format(@"/*dialect*/selectt1.FID,t2.FBILLNO,t3.FNUMBER,t4.FNAME,t1.FREALQTY,t5.FSOORDERNOfromT_SAL_OUTSTOCKENTRYt1innerjoinT_SAL_OUTSTOCKt2ont2.FID=t1.FIDleftjoinT_BD_MATERIALt3ont3.FMATERIALID=t1.FMATERIALIDleftjoinT_BD_MATERIAL_Lt4ont4.FMATERIALID=t1.FMATERIALIDANDt4.FLOCALEID=2052innerjoinT_SAL_OUTSTOCKENTRY_Rt5ont5.FENTRYID=t1.FIDwhereFSOORDERNO='{0}'",FBillNo);//dt=DBUtils.ExecuteDataSet(this.Context,sql).Tables[0];//if(dt.Rows.Count>0)//{////给单据体赋值,构造动态表单//Entityentity=this.View.BillBusinessInfo.GetEntity("F_WNZJ_Entity");////转换成行//DynamicObjectCollectionrows=this.Model.GetEntityDataObject(entity);////把加载的数据加入到单据体行集合中//for(inti=0;i
0){//给单据体赋值,构造动态表单Entityentity=this.View.BillBusinessInfo.GetEntity("F_WNZJ_Entity");//转换成行3.效果业务场景:双击单据体行打开销售订单DynamicObjectCollectionrows=this.Model.GetEntityDataObject(entity);intj=0;foreach(DynamicObjectoindyOC){//每一行的值定义成DynamicObject类型DynamicObjectrow=newDynamicObject(entity.DynamicObjectType);entity.SeqDynamicProperty.SetValue(row,j+1);//出库单号row["F_WNZJ_Text"]=o["FBILLNO"].ToString();//物料编码row["F_WNZJ_Text1"]=o["FNUMBER"].ToString();//物料名称row["F_WNZJ_Text2"]=o["FNAME"].ToString();//出库数量row["F_WNZJ_Text3"]=o["FREALQTY"].ToString();//出库数量row["F_WNZJ_Text4"]=o["FID"].ToString();rows.Add(row);}}}//////单据体行双击事件//////publicoverridevoidEntityRowDoubleClick(EntityRowClickEventArgse)业务场景:动态表单反写数据1.点击返回数据按钮{base.EntityRowDoubleClick(e);//打开单据查看实例BillShowParameterpara=newBillShowParameter();para.OpenStyle.ShowType=Kingdee.BOS.Core.DynamicForm.ShowType.NonModal;para.FormId="SAL_OUTSTOCK";para.Status=OperationStatus.VIEW;para.PKey=this.View.Model.GetValue("F_WNZJ_Text4",e.Row).ToString();para.ParentPageId=this.View.ParentFormView.PageId;this.View.ShowForm(para);}publicoverridevoidBarItemClick(BarItemClickEventArgse){base.BarItemClick(e);//定义一个计数器intcount=0;if(e.BarItemKey.Equals("WNZJ_tbButton_Return")){//获取动态表单的值//定义一个函数//获取动态表单的单据体F_WNZJ_Entity2.读取返回数据Entityentity=this.View.BillBusinessInfo.GetEntity("F_WNZJ_Entity");//将取得的单据体转换成列表集合(读取全部行)DynamicObjectCollectionentityDataObject=this.View.Model.GetEntityDataObject(entity);//定义一个接收dymatDynamicObjectCollectiondymat=newDynamicObjectCollection(entity.DynamicObjectType,null);foreach(DynamicObjectcurrentinentityDataObject){//复选框F_WNZJ_CheckBox,转换成大写if(current["F_WNZJ_CheckBox"].ToString().ToUpper()=="TRUE"){dymat.Add(current);count++;}}if(count==0){this.View.ShowMessage("请选择数据行");return;}if(count>1){this.View.ShowMessage("只能选择一行");return;}if(count==1){//返回主表界面this.View.ReturnToParentWindow(dymat);this.View.Close();}}}//32.2打开动态表单页面if(e.BarItemKey.Equals("WNZJ_tbButtonOP")){DynamicFormShowParameterform=newDynamicFormShowParameter();form.FormId="k5e67ca60f42947cfbed164cd90280d43";//form.CustomParams.Add("FBillNo",Convert.ToString(this.View.Model.GetValue("FBillNo")));//1.直接弹窗//this.View.ShowForm(form);//2.动态接收数据,返回的数据都放在result上面this.View.ShowForm(form,delegate(FormResultresult){//定义接收值,转换成DynamicObjectCollection类型///初始化,对其他界面传来的参数进行处理,对控件某些属性进行处理///这里不宜对数据DataModel进行处理//////publicoverridevoidOnInitialize(InitializeEventArgse)3.执行效果业务场景:根据参数修改页面内容///DynamicObjectCollectionreturnData=(DynamicObjectCollection)result.ReturnData;if(returnData!=null){//把整个单据拆分成一行一行DynamicObjectentryRow=returnData[0];//把接收回来的值进行赋值//物料编码this.View.Model.SetValue("F_WNZJ_WLBM",entryRow["F_WNZJ_Text1"]);//物料名称this.View.Model.SetValue("F_WNZJ_WLMC",entryRow["F_WNZJ_Text2"]);//出库单号this.View.Model.SetValue("F_WNZJ_CKDH",entryRow["F_WNZJ_Text"]);//出库数量this.View.Model.SetValue("F_WNZJ_CKSL",entryRow["F_WNZJ_Text3"]);//出库FIDthis.View.Model.SetValue("F_WNZJ_CKID",entryRow["F_WNZJ_Text4"]);}});}触发时机:请求加载页面时触发,此时Model还没有初始化,还是个空对象,但是View已初始化应用场景:请求打开一个页面时,可以在此事件中初始化当前插件的全局属性,也可以修改当前页面的控件属性值(控件大小、字段标题、表单标题等等)1.传递参数form.CustomParams.Add("F_WNZJ_CheckBox",Convert.ToString(this.View.Model.GetValue("F_WNZJ_CheckBox")));2.OnInitialize3.效果publicoverridevoidOnInitialize(InitializeEventArgse){//base.OnInitialize(e);//接收传递过来的值stringsfrk=this.View.OpenParameter.GetCustomParameter("F_WNZJ_CheckBox").ToString();if(sfrk=="True"){//LocaleValuetitle=newLocaleValue("采购入库查询");this.View.SetFormTitle(title);//出库单号的标题,改成入库单号this.View.GetControl("F_WNZJ_Text").Text="(改)入库单号";this.View.GetControl("F_WNZJ_Text3").Text="(改)采购入库数量";//动态赋值,不加载原先的值this.View.SendDynamicFormAction(View);}}业务场景:权限校验1.业务代码业务场景:CreateNewData事件触发时机:View已完成初始化,开始进入Model数据对象(Model.DataObject)初始化应用场景:插件自定义Model.DataObject数据包,插件如构建此数据包,即忽略平台构建默认数据包//获取用户登录的全部信息this.Context//校验查看权限PermissionConst.ViewPermissionAuthResultIResult=PermissionServiceHelper.FuncPermissionAuth(this.Context,newBusinessObject(){Id="SAL_OUTSTOCK"},PermissionConst.View);if(IResult.Passed){//打开单据查看实例BillShowParameterpara=newBillShowParameter();para.OpenStyle.ShowType=Kingdee.BOS.Core.DynamicForm.ShowType.NonModal;para.FormId="SAL_OUTSTOCK";para.Status=OperationStatus.VIEW;para.PKey=this.View.Model.GetValue("F_WNZJ_Text4",e.Row).ToString();para.ParentPageId=this.View.ParentFormView.PageId;this.View.ShowForm(para);}else{this.View.ShowMessage("没有查看权限");return;}publicoverridevoidCreateNewData(BizDataEventArgse){base.CreateNewData(e);//接收传递过来的参数//从TestFormPlugIn.cs的BarItemClick()中传递过来的//DynamicFormShowParameterform=newDynamicFormShowParameter();//form.FormId="k5e67ca60f42947cfbed164cd90280d43";//form.CustomParams.Add("FBillNo",Convert.ToString(this.View.Model.GetValue("FBillNo")));FBillNo=this.View.OpenParameter.GetCustomParameter("FBillNo").ToString();stringsql=string.Format(@"/*dialect*/selectt1.FID,t2.FBILLNO,t3.FNUMBER,t4.FNAME,t1.FREALQTY,t5.FSOORDERNOfromT_SAL_OUTSTOCKENTRYt1innerjoinT_SAL_OUTSTOCKt2ont2.FID=t1.FIDleftjoinT_BD_MATERIALt3ont3.FMATERIALID=t1.FMATERIALIDleftjoinT_BD_MATERIAL_Lt4ont4.FMATERIALID=t1.FMATERIALIDANDt4.FLOCALEID=2052innerjoinT_SAL_OUTSTOCKENTRY_Rt5ont5.FENTRYID=t1.FIDwhereFSOORDERNO='{0}'",FBillNo);DynamicObjectCollectiondyOC=DBUtils.ExecuteDynamicObject(this.Context,sql);if(dyOC.Count>0){//创建界面需要的数据对象e.BizDataObject=newDynamicObject(this.View.OpenParameter.FormMetaData.BusinessInfo.GetDynamicObjectType());//获取该业务对象的数据包BusinessInfoinfo=this.View.OpenParameter.FormMetaData.BusinessInfo;//获取整个单据体信息Entityentity=info.GetEntity("F_WNZJ_Entity");//列FieldFOutBillNo=info.GetField("F_WNZJ_Text");FieldFNUMBER=info.GetField("F_WNZJ_Text1");FieldFNAME=info.GetField("F_WNZJ_Text2");FieldFREALQTY=info.GetField("F_WNZJ_Text3");FieldFID=info.GetField("F_WNZJ_Text4");//定义单据集合DynamicObjectCollectionrows=(DynamicObjectCollection)entity.DynamicProperty.GetValue(e.BizDataObject);intj=0;foreach(DynamicObjectoindyOC){//每一行的值定义成DynamicObject类型DynamicObjectrow=newDynamicObject(entity.DynamicObjectType);entity.SeqDynamicProperty.SetValue(row,j+1);FOutBillNo.DynamicProperty.SetValue(row,o["FBILLNO"].ToString());FNUMBER.DynamicProperty.SetValue(row,o["FNUMBER"].ToString());FNAME.DynamicProperty.SetValue(row,o["FNAME"].ToString());FREALQTY.DynamicProperty.SetValue(row,o["FREALQTY"].ToString());业务场景:BeforeUpdateValue触发时机:更新字段值前触发应用场景:界面字段值更新时允许用户对即将录入的值做检查备注:马上触发值更新事件需要在BOSIDE中选择”即时触发值更新事件"属性FID.DynamicProperty.SetValue(row,o["FID"].ToString());rows.Add(row);}}}publicoverridevoidBeforeUpdateValue(BeforeUpdateValueEventArgse){switch(e.Key.ToUpperInvariant()){//case"FXXX":通过字段的Key[大写]来区分不同的控件的数据变化功能,如果要阻止该次变化,可以用e.Cancel=true;//e.Cancel=true;//break;case"F_WNZJ_DATE":if(e.Value!=""){//取得值DateTimedate1=Convert.ToDateTime(e.Value);//获取当前时间DateTimenow=Convert.ToDateTime(DateTime.Now);TimeSpants=date1-now;if(ts.Days<0){this.View.Model.SetValue("F_WNZJ_Date","");e.Cancel=true;this.View.ShowMessage("输入的日期不能小于当前日期");}}break;default:break;}}业务场景:AfterDeleteRow触发时机:分录行删除后触发应用场景:删除分录行之后,根据业务需要修改字段值或控件可见性、可用性、修改其他相关信息publicoverridevoidAfterBindData(EventArgse){base.AfterBindData(e);//打开单据加载后,调用求和事件this.View.Model.SetValue("F_WNZJ_Decimal",this.GetSumQty());//刷新字段this.View.UpdateView("F_WNZJ_Decimal");}publicoverridevoidAfterDeleteRow(AfterDeleteRowEventArgse){base.AfterDeleteRow(e);//每删除一次调用求和事件this.View.Model.SetValue("F_WNZJ_Decimal",this.GetSumQty());//刷新字段this.View.UpdateView("F_WNZJ_Decimal");}publicdoubleGetSumQty(){DoubleQty=0.0;//获取单据体所有信息Entityentity=this.View.BillBusinessInfo.GetEntity("F_WNZJ_Entity");//获取到集合里面DynamicObjectCollectiondyOC=this.View.Model.GetEntityDataObject(entity);if(dyOC!=null){//常规的搞法,循环取值//for(inti=0;iConvert.ToDouble(x["F_WNZJ_Text3"]));}returnQty;}