氚云学习1——表单

首先,当打开一个氚云应用的表单,其地址如下。
其中,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方法前面
此时,虽然仍然不能写,但是初始值却可以被上传至数据库显示在表单条目中

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值