氚云应用表单操作与后端交互详解

氚云应用表单操作与后端交互详解

首先,当打开一个氚云应用的表单,其地址如下。

其中,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方法表单提交时会进入OnSubmitthis.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方法前面

此时,虽然仍然不能写,但是初始值却可以被上传至数据库显示在表单条目中

🌸 相关推荐 🌸

为什么有人说“00 后是被毁掉的一代”?
bte365娱乐场

为什么有人说“00 后是被毁掉的一代”?

📅 08-30 👀 4943
北京木稷科技发展有限公司
365bet手机注册

北京木稷科技发展有限公司

📅 08-28 👀 8886
《美团众包》提现到账时间介绍
bte365娱乐场

《美团众包》提现到账时间介绍

📅 08-14 👀 3652