- 调用窗体代码:var reg = form.ShowModalDialog(lims.GetFormSource("caoss_UserManagement.addPerson"));
- 调用SS代码: var dummy = lims.CallServer("caoss_UserManagement.SS_insert",[reg[0],reg[1],reg[2],reg[3]]);注意的是,参数的传递是以数组的形式存在的。如果是单个参数,也可以只写一个,可以不用数组表示。
- 调用DS代码: dataGridShowInfo.Data = lims.GetDataSource("caoss_UserManagement.michael_user_db",[form.Variables["strWhere"],form.Variables["StepCode"],form.Variables["strParams"]]);同样是以数组形式存在的
- Refresh和RefreshEx的区别:Refresh是刷新整个DataGrid,RefreshEx是刷新DataGrid之后重新定位到之前选定的列
- 实现添加之后的定位:思路是先获取新添加的列的唯一值,一般用Origrec,然后返回,后台接收到之后先刷新DataGrid控件,然后根据DataGrid的Find方法来定位,具体的方法是dataGridShowInfo.Find(["ORIGREC"],[dummy[1]]); dataGridShowInfo是DataGrid控件的ID,["ORIGREC"]是唯一标示,[dummy[1]]是唯一标示的的具体值。
1 function lbtnaddExp_OnClick( sender, eventArgs ) 2 { 3 var USERNAME = dataGridShowInfo.GetCurrentRowData("USERNAME"); 4 var isTrue = lims.CallServer("caoss_UserManagement.SSaddExp",[USERNAME]); 5 if(isTrue[0] == true) 6 { 7 dgShowExpInfo.Refresh(); 8 dgShowExpInfo.Find(["ORIGREC"],[isTrue[1]]); 9 } 10 }
- 获取唯一标示的值得方法:var USERNAME = dataGridShowInfo.GetCurrentRowData("USERNAME");
- TabControl优化办法:在DataGrid或者TabControl的OnChange事件里面添加自定义函数RefreshChildren();然后再自定义函数RefreshChildren来设置TabControl的页面切换,或者DataGrid的换行;下面提供一个示例:
1 function dataGridShowInfo_OnRowChange( sender, eventArgs ) 2 { 3 var USERNAME = dataGridShowInfo.GetCurrentRowData("USERNAME"); 4 form.Variables["RefreshChildren"] = [ true, true, true,true,true]; 5 RefreshChildren(); 6 dataGridShowInfo.RefreshEx(); 7 }
鼎折覆餗
-
1 function tcPerson_OnTabChanged( sender, eventArgs ) 2 { 3 RefreshChildren(); 4 }
- 实现UP弹窗编辑大文本,首先在需要弹窗的控件列中设置字段的Type为UD,然后调用该控件的OnUdCellEditorRequest事件,在事件中写以下函数:
1 function dgShowExpInfo_OnUdCellEditorRequest( sender, eventArgs ) 2 { 3 var ReadOnly = true; 4 var bStyle = ""; 5 if(eventArgs["Column"].Id == 'COMMENTS')//'COMMENTS'为需要UD弹窗的列。 6 { 7 UpdateUD(eventArgs, dgShowExpInfo, "MICHAEL_EXPERIENCE", "COMMENTS", !ReadOnly, bStyle); 8 /*[eventArgs是固定写法,dgShowExpInfo是控件的ID,"MICHAEL_EXPERIENCE"是控件所绑定数据源的数据库表格,"COMMENTS" 9 是控件所绑定数据源的数据库表格中的对应的某一列,和上面的UD弹窗对应的列对应,!ReadOnly设置只读属性,]*/ 10 } 11 }
- 关于实现QBE查询:添加LinkButton按钮,设置其on_click事件:
1 function lbtnQuery_OnClick( sender, eventArgs ) 2 { 3 //调用实现QBE查询的弹窗,获取返回值 4 var resultValues = form.ShowModalDialog(lims.GetFormSource("QBE.QBE_FORSEARCH"),["Query"]); 5 if(resultValues == null ) 6 { 7 return ; 8 } 9 // 如果返回值不为空,则把返回值赋值给另外一个局部变量, 10 // 如果该返回值为null或者为"",则重新把""赋值给该变量。否则用and链接该字符串,以便在SS或者DS中调用。 11 // 最后调用自己写的DS函数来获取要查询的值。 12 else 13 { 14 var strQBEWhere = resultValues ; 15 if(strQBEWhere == null || strQBEWhere == "") 16 { 17 strQBEWhere = ""; 18 } 19 else 20 { 21 strQBEWhere = "and" + strQBEWhere ; 22 } 23 dataGridShowInfo.Data = lims.GetDataSource("caoss_UserManagement.michael_user_db",[form.Variables["strWhere"],form.Variables["StepCode"],form.Variables["strParams"],strQBEWhere]); 24 } 25 26 }
- 工作流中提交操作的实现:设置提交按钮的on_click事件,如下:(需要调用公共代码)
1 function lbtnSubmit_OnClick( sender, eventArgs ) 2 { 3 var aOrigrec = dataGridShowInfo.GetSelectedRowsData("ORIGREC");//获取DataGrid的ORIGREC。 4 //调用公共窗体-Audit,根据需要传入参数,不一定是代码中的三个参数,可以自定义参数个数。实现更多的功能 5 form.ShowModalDialog( lims.GetFormSource("GeneralWorkFlowActions.Audit"),[ form.Variables["WorkFlowCode"], form.Variables["StepCode"], aOrigrec] ); 6 dataGridShowInfo.RefreshEx(); 7 }
- 页面中实现图片添加、显示功能:在页面中添加Image控件,设置其Onclick事件如下:
1 function imgPicture_OnClick( sender, eventArgs ) 2 { 3 var Origrec = dataGridShowInfo.GetCurrentRowData("ORIGREC"); 4 if(Origrec == null || Origrec == "") return; 5 //调用窗体来让用户选择图片,然后把返回的图片路径赋值给file。 6 var file = Dialogs.ShowOpenFileDialog("JPEG Files (*.jpg)|*.jpg|GIF Files (*.gif)|*.gif|PNG Files (*.png)|*.png"); 7 if (file == "") 8 return; 9 //把图片路径赋值给要显示图片的路径属性控件ID.ImageSource 10 imgPicture.ImageSource = file; 11 //图片路径经过一定的格式编码,然后赋值给StarDocID用来表示路径 12 var serverFile : Byte[] = lims.FileToByteArray(file); 13 var StarDocID = lims.CallServer("Sunway.UploadFileToStarDoc_Multi", 14 [file, serverFile ]); 15 //传入参数更新数据库表格中图片列的值[表格名称,表格列id,表格列对应的值,寻找该列对应的参数也就是where后边的内容] 16 lims.CallServer("Sunway.Update",["MICHAEL_USERS","PICTURE",StarDocID,Origrec]); 17 //如果StarDocID为真,则刷新控件,然后获取数据库表格中该字段的的值,赋值给一个本地变量, 18 //然后把它赋值给控件的ImageSource属性来显示控件 19 if(StarDocID) 20 { 21 dataGridShowInfo.RefreshEx(); 22 var localFile = csDownloadAttachment(StarDocID); 23 imgPicture.ImageSource = localFile; 24 } 25 }
- 调用系统函数来删除DataGrid中的行(支持多行删除),下面的是我自定义的删除函数:
1 function DeleteRows_diy(dg, TableName ) 2 { 3 if(TableName == null || TableName == "") //判断传过来的数据库表格名字是否为空,如果为空,则根据控件获取表格名字 4 { 5 TableName = dg.RootTable.DataMember; //获取表格名字 6 } 7 if(dg.RowCount < 1) //如果删除的表格行数少于1,则返回,删除失败 8 return; 9 10 //调用弹出窗,确定是否删除,返回值为YES和其他值NO。,然后赋值给okToDelete 11 var okToDelete = Dialogs.MessageBox(form.Resources("mesAreYouSureDel"), form.Resources["Question"], "YESNO", "QUESTION"); 12 if (okToDelete == "YES") //如果为YES ,则执行删除 13 { 14 var OrigrecList = dg.GetSelectedRowsData("ORIGREC"); //获取当前行。可多行 15 lims.CallServer("Sunway.DeleteRows",[TableName,OrigrecList]); //往DeleteRows传入表格名和唯一值Origrec,执行删除操作 16 dg.Refresh(); //刷新表格 17 return true; //返回刷新成功 18 } 19 else return; //返回 20 }
- 在新添加用户的时候,可以通过textbox的OnValidating事件来验证是否存在该用户名。他在鼠标离开该textbox时触发:
1 function txtUserName_OnValidating( sender, eventArgs ) 2 { 3 var USERNAME = txtUserName.Text; 4 var isTrue = lims.CallServer("caoss_UserManagement.selValidating",[USERNAME]); 5 if(isTrue == true) 6 { 7 Dialogs.MessageBox(form.Resources["用户已存在,请重新输入!"],form.Resources["ok"],"OK","INFORMATION"); 8 txtUserName.Text = null; 9 txtUserName.Focus(); 10 } 11 }
- form窗体通过form.returnValue = [UserName,UserFullName,Dept,Sex];向上一个窗体返回值,另一个窗体用var定义的变量接收,是一个数组变量。
- 涉及到工作流的查询操作
1 :PARAMETERS strWhere := "", StepCode := "", strParams :="" , strQBEWhere :="" ; 2 3 :DECLARE strSQl, arrParams; 4 arrParams := {}; 5 :IF .not. Empty(strParams); 6 ExecUDF("arrParams := {"+strParams+"};"); 7 :ENDIF; 8 9 :IF StepCode == "Search"; 10 strWhere :=""; 11 :ENDIF; 12 13 strSQl :="select ORIGREC, ORIGSTS, DEPT, SERVGRP,PICTURE, 14 USERNAME, USERFULLNAME, STATUS, 15 (case when ISREJECT='Y' then DISPSTATUS || '||red' 16 when DISPSTATUS='审核' then DISPSTATUS || '||yellow' 17 when DISPSTATUS='审批' then DISPSTATUS || '||orange' 18 when DISPSTATUS='新建' then DISPSTATUS || '||green' 19 when DISPSTATUS='完成' then DISPSTATUS || '||blue' 20 end) as 21 DISPSTATUS, SEX, USEDNAME, NATION, 22 POLITICALSTATUS, BIRTHDAY, WORKNUMBER, 23 HIGHTESTEDU, HIGHTESTDEGREE, EMAIL, HOMEADDRESS, 24 NOWLIVEADDRESS, POSTCODE, FAX, PHONE, PHONENUMBER, 25 COMMENTS, ISREJECT 26 from MICHAEL_USERS 27 where 1=1 "+strWhere +strQBEWhere+" order by ORIGREC"; 28 :RETURN GetDataSet(strSQL,arrParams); 29