首先,当打开一个氚云应用的表单,其地址如下。
其中,id为appcode,标示应用名,每一个氚云的应用都有唯一的id
code为schmecode,标示一个表单名,相当于整个表单的实体类,而code用于标示这个表单的唯一标示。
https://www.h3yun.com/home.html#/app?id=czl93lpxl24nxaawwywe5ct66&code=A6714cc7929324c618f4a0382cf9fbf44&BizObjectId=
此外,还有如下的数据名:
BizObject:为每个表单的其中一行数据
BizObjectId:为每个表单的其中一行数据的唯一标识
ActionName:表单提交的标识字段,即表单上按钮等的活动,在后端代码中,有一个OnSubmit方法,所有提交的活动,都会在这个方法呈现。如:当ActionName==Submit,那么就表示活动类型为提交数据
ActivityCode:标识当前流程进行到了哪一步,(这是由于在不同流程的节点上,ActionName提交的请求可能相同,如都是Submit类型的活动。但所处节点不同,此时就需要再次使用ActivityCode==“xxx”来判断节点)
Engine对象
用于管理、调用、操作与企业应用相关联的表单、流程、组织、权限、消息、提醒、数据字典等
表单
前端
事件 | 函数名 | 功能 |
加载事件 | OnLoad | 对控件初始化,当新增一个表单数据,为其做初始赋值,是最先触发的事件 |
按钮事件 | OnLoadActions | 点击按钮后触发的事件,触发在OnLoad之后 |
提交校验 | OnValidate | 填好数据后提交时触发,用于校验表单中所填数据是否合法 |
提交前事件 | BeforeSubmit | 触发在OnValidate之后,在将数据提交到后端之前还需要做的事情 |
提交后事件 | AfterSubmit | 触发在BeforeSubmit之后,数据已经在后端处理完毕后还要做的事情 |
关于控件的接口
GetValue() :读取控件值
GetText():读取控件文本内容
在获取当前表单控件时,getvalue和gettext获取到的一样,但获取关联表单时会发现,gettext获取到的就是显示的文本,而getvalue获取到的是一长串数字符号,这是因为关联表单的数据在数据库中存放的本来就是一串数字,getvalue只会取到这个值,而不会翻译出其内容
SetValue():设置控件的值
BindChange(key,function()):绑定控件值变化事件,key是定义的唯一的方法名
UnBindChange(key):解除绑定控件值变化事件,key是定义的唯一的方法名
SetReadonly(true/false):设置页面是否只读
SetVisible(true/false):设置可见属性
此外,获取人员/部门控件用GetUnitIDs(),而不能用getvalue;下拉框、单选框、多选框清空选项用ClearItems(),添加选项用AddItem(“value”);字表的GetCellManager以后,不能使用GetText和AddItem
用法: this.控件编码.方法();
例如:
OnLoad:function(){
//获取控件的值,并在点击控件时弹框
var data=this.F000001.GetValue();
alert(data);
this.F000001.BindChange('key',function()){
//当控件F00001的数据发生改变,在光标移出去时触发
alert('数据已改变');//alert:弹框提示(类似于警告)方法
}
}
一些公共接口
ajax:异步请求接口,比如输入数据请求后台处理后返回结果到页面上,经常和BindChange一起使用
$.SmartForm.PostForm(“actionName”,data,callBack,errorBack,async);
callBack:成功后的回调函数
errorBack:错误回调函数
async:是否异步,true或false
弹框提示方法 $.IShowWarn(Info);
Info:显示的消息
打开窗口方法:
在当前表单的基础上打开另一个表单,即打开一个表单的同时打开另一个表单
$.IShowForm(SchemaCode,objectId,checkIsChange);
SchemaCode:表单编码,在本文刚开始时说了表单编码怎么找,即schmecode。
objectId:表单数据ID
checkIsChange:关闭时是否感知变化
快捷键:f12 进行调试 f9打断点 ,或者在想要断点的地方加一行debugger,然后右键检查进入调试
后端
其实就是表单的一个类,包含3个方法,
方法 | 功能 |
构造方法 | |
OnLoad方法 | 表单在加载的时候同时触发前后端代码,为控件赋初始值 |
OnSubmit方法 | 表单提交时会进入OnSubmit |
this.request.BizObject["F0000001"]="张三";//初始化控件内容
this.request.BizObject["F0000001"]="A;B;C";//初始化复选框,部门多选,人员多选,各值用分号间隔
base.OnLoad(respond);//方法自带
response.ReturnData(["F0000001"]).Editable=false;//后端方式设置可读权限
response.ReturnData(["F0000001"]).Visible=false;//后端方式设置可见权限
//注意设置初始值要放在base.OnLoad前面。设置可见可读权限要放在后面
1.获取表单提交过来的数据
方法1:
string value=this.Request.BizObject[“F000001”]+string.empty;
方法2:
string value2=PostValue.Data[“F000001”]+string.empty;
因为PostValue.Data中数据是Object类型,因此要进行数据的类型转换。
2.获取表单中的对象
可以获取到其他表单中的对象,实现在本表单的操作影响另一个表单。
获取BizObject对象
H3.DataModel.BizObject.Load(
This.Request.UserId, //操作对象的人
this.Engine, //引擎对象
"schemaCode" //schmecode
"BizObjectId" //对象ID
false); //固定值false
先创建一个分组,添加俩个表单,一个表单是产品,BizObject包括产品名称和数量,另一个表单是入库,BizObject包括产品名称和入库数量,并将俩个表单关联
在入库表单的Onsubmit方法中添加如下代码
H3.DataModel.BizObject biz=H3.DataModel.BizObject.Load(
this.Request.UserContext.UserId,
this.Engine,
"表单ID",
this.Request.BizObject["product"]+string.Empty,//此处的product就是控件编码,如F000001
false);
biz["productNumb"]=double.parse(["productNumb"]+string.Empty)
+double.parse(this.Request.BizObject["numb"]+string.Empty);
biz.update();
案例
不同角色看到不同内容
在权限管理中新建角色:金额查看,并添加允许的人
//获取用户所有角色
H3.Organization.OrgRole[] roles = this.Request.Engine.Organization.GetUserRoles(this.Request.UserContext.UserId,true() ;
//寻找相应角色
bool flag=false;
foreach(H3.Organization.OrgRole item in roles)
{
if(item.Name=="金额查看")
{
flag=true;
}
response.ReturnData["menoy"].visible=flag;//设置可读权限
}
不同角色看到不同的下拉框选项
同样,需要权限管理,如添加权限:男性爱好,并加入相应人员
如果,有这个权限,多选框选项就是 打游戏,吃饭,睡觉
如果没有这个权限,选项就是化妆,逛街,自拍
默认复选框数据为有权限时的情况,如果没有权限,则在打开时修改复选框内容
//获取用户所有角色
H3.Organization.OrgRole[] roles = this.Request.Engine.Organization.GetUserRoles(this.Request.UserContext.UserId,true() ;
//寻找相应角色
bool flag=false;
foreach(H3.Organization.OrgRole item in roles)
{
if(item.Name=="男性爱好")
{
flag=true;
}
response.Massage=flag+string.Empty;//Massage为环境参数里面的“返回的其他信息”,同时返回到前端的数据不能是bool类型,需要转换为string
}
后端部分,在OnLoad中
var flag=$.SmartForm.ResponseContext.Massage;
if(flag=="Flase"){//如果没有权限,修改复选框选项
this.F0000001.ClearItems();//修改之前先将复选框清除
this.F0000001.AddItem("化妆");
this.F0000001.AddItem("逛街");
this.F0000001.AddItem("自拍");
}
若控件权限为不可写,但实际上却用代码setvalue为控件赋初始值,这个值虽然会在表单详情界面上显示,但实际上却进入不了数据库,在表单条目上显示不出来
如果真的想要赋初始值,想要在后端代码中OnSubmit方法使用:
this.Request.BizObject[“F000001”]=postValue.Data[“F000001”]+string.Empty;//放在base方法前面
此时,虽然仍然不能写,但是初始值却可以被上传至数据库显示在表单条目中