Shift+Alt+F//代码排序 右键==>Format Code
-----前端弹框 AfterSubmit-----
if(action=="F0000003")
{
$.IShowSuccess("点击了F0000003");
}
if(action=="F0000001")
{
$.IShowWarn("点击了F0000001");
}
if(action=="F0000002")
{
$.IShowError("点击了F0000002");
}
https://www.h3yun.com/home.html#/app?id=D101801b24008b18b364c549654f839920b9f3e&code=D101801ZhiWeiinformationizedSystem&BizObjectId=9dceb34a-9218-4b17-b070-da9f28fab92f
//不带objectID的弹出新增 带了的弹出编辑
if(action=="F0000004")
{
$.IShowForm("D101801b24008b18b364c549654f839920b9f3","",false);
}
if(action=="F0000005")
{
$.IShowForm("D101801b24008b18b364c549654f839920b9f3","9dceb34a-9218-4b17-b070-da9f28fab92f",false);
}
-----前端提交校验 OnValidate-----
return confirm("是否提交?");
列表设计==>添加按钮==>前端代码
if(actionCode=="F0000001")
{
$.IShowForm("D101801b24008b18b364c549654f839920b9f3","",false);
}
----------------------------------------
-----后端-----
response.Infos.Add("提交数据不合法"); //可以阻止表单的提交
response.Error.Add("提交数据不合法"); //可以阻止表单的提交
A、关联表单里存的就是关联的表单的ObjectId
UserName 学生 F0000001
Gender 性别 F0000002
student关联学生 F0000003 关联表单
-----后端 OnSubmit----- 改变关联表里的信息,改掉或删除原表单的信息
XX 关联表单ID Age要修改的控件
H3.DataModel.BizObject biz=H3.DataModel.BizObject.Load(H3.Organization.User.SystemUserId,this.Engine,"D101801968659a8ee534b8e9e3be1b540f4c9b1",this.Request.BizObject["XX"]+string.Empty,false);
biz["Age"] = this.Request.BizObject["Age"]+string.Empty;
biz.Update();
base.OnSubmit(actionName, postValue, response);
//biz.Remove();
-----------------------------------
companyName 公司名称 F0000001
adders 公司地址 F0000002
userName 联系人名 F0000003
userPhone 联系人电话 F0000004
kehu 客户 F0000005 关联表单
------后端----- this.Request.UserContext.UserId 当前操作人的姓名
//把新增联系人的信息,赋值到另一个表
if(actionName == "Submit")
{
H3.DataModel.BizObjectSchema obj1 = this.Engine.BizObjectManager.GetPublishedSchema("D101801df032a33c3bd4434950d1ebf191da2f1");
H3.DataModel.BizObject obj2 = new H3.DataModel.BizObject(this.Engine, obj1, this.Request.UserContext.UserId);
obj2["KHName"] = this.Request.BizObject["KHName"] + string.Empty;
obj2["Phone"] = this.Request.BizObject["Phone"] + string.Empty;
obj2["GSName"] = this.Request.BizObject["GSName"] + string.Empty;
obj2["GSDZ"] = this.Request.BizObject["GSDZ"] + string.Empty;
obj2["KH"] = this.Request.BizObjectId;
obj2.Status = H3.DataModel.BizObjectStatus.Effective;
obj2.Create();
}
//删掉联系人信息的时候,另一个表的数据也自动删除
if(actionName == "Remove")
{
string Sql = string.Format("delete from I_D101801df032a33c3bd4434950d1ebf191da2f1 where KH='{0}'", this.Request.BizObjectId);
this.Engine.Query.QueryTable(Sql,null);
}
-----------------------------
获取跟进的对象
把子表对象获取到
往子表对象里添加一行子表
赋值给客户(主表)
掉用Update
staff 跟进人 单选人员
date 跟进时间
if(actionName == "Submit")
{
//获取要插入的目标对象
H3.DataModel.BizObject biz1=H3.DataModel.BizObject.Load(this.Request.UserContext.UserId,this.Engine,"D101801942a6bc98c58457e82d3fb6911aaa048",this.Request.BizObject["XX"]+string.Empty,false);
//找到子表,找到所有子表
H3.DataModel.BizObject[] biz2 = (H3.DataModel.BizObject[])biz1["D101801F1df4dae9782c4c4580d56b2138566c07"];
//放到List表单里面去
List <H3.DataModel.BizObject> childList=new List<H3.DataModel.BizObject>();
if(biz2 != null)
{
childList.AddRange(biz2);//先把原来的子表存起来
}
//创建待加入子表的对象
H3.DataModel.BizObjectSchema schema = this.Engine.BizObjectManager.GetPublishedSchema("D101801F1df4dae9782c4c4580d56b2138566c07");
H3.DataModel.BizObject childBiz = new H3.DataModel.BizObject(this.Engine, schema, this.Request.UserContext.UserId);
childBiz["staff"] = this.Request.BizObject["staff"] + string.Empty;
childBiz["data"] = this.Request.BizObject["data"] + string.Empty;
childList.Add(childBiz);
biz1["D101801F1df4dae9782c4c4580d56b2138566c07"] = childList.ToArray();
biz1.Update();
}
-----列表设计 后端代码------
例题一:获取选中的行 和 复制一行
string[] objectIds=(string[])postValue.Data["ObjectIds"];
if(objectIds==null || objectIds.Length==0)
{
response.Message="请选择数据行";
return;
}
//给选中的行年龄+1岁
if(actionName=="自定义按钮编号F0000001")
{
foreach(string item in objectIds)
{
H3.DataModel.BizObject biz=H3.DataModel.BizObject.Load(this.Request.UserContext.UserId,this.Engine,"要操作表的状态栏中的id",item,false);
biz["Age"]=double.Parse("0"+biz["Age"])+1;
biz.Update();
}
}
if(actionName="自定义按钮编号")
{
foreach(string item in objectIds)
{
H3.DataModel.BizObject biz=H3.DataModel.BizObject.Load(this.Request.UserContext.UserId,this.Engine,"要操作表的状态栏中的id",
H3.DataModel.BizObject newbiz=new H3.DataModel.BizObject(this.Engine,this.Engine,BizObjectManager.GetPublishedShedSchema("要操作表的状态栏中的id"),this.Request.UserContext.UserId);
newbiz["userName"]=biz["userName"];
newbiz["Age"]=biz["Age"];
newbiz["Gender"]=biz["Gender"];
....
newbiz.Status=H3.DataModel.BizObjectStatus.Effective;
newbiz.Create();
}
}
----------必须放在列表设计里的 base.OnLoad(response)后面---------------------
例题二:更改字段颜色
if(isFormControl !="1" && isFormControl !="true")
{
foreach(Dictionary<string,object> data in response.ReturnData)
{
if(data["F0000001"]+string.Empty=="男")
{
data["F0000001"]=new H3.SmartForm.ListViewCustomCell(data["F0000001"]==null ? "--" : data["F0000001"].ToString(),H3.SmartForm.Color.Blue);
}else{
data["F0000001"]=new H3.SmartForm.ListViewCustomCell(data["F0000001"]==null ? "--" : data["F0000001"].ToString(),H3.SmartForm.Color.Red);
}
}
}
例题三:自定义过滤条件
protected override void OnInit(H3.SmartForm.LoadListViewResponse response)
{
H3.Data.Filter.Filter filter=new H3.Data.Filter.Filter();//构建过滤器
H3.Data.Filter.And andMatcher=new H3.Data.Filter.And(); //构造And匹配器
andMatcher.Add(new H3.Data.Filter.ItemMatcher("控件编号例:Gender",H3.Data.ComparisonOperatorType.Equal,"男"));//添加查询条件
filter.Matcher=andMatcher;
this.Request.Filter=filter;
base.OnInit(response);
}
例题四:修改列名称
protected override void OnInit(H3.SmartForm.LoadListViewResponse response)
{
Dictionary <string, H3.SmartForm.ListViewColumn> columns=new Dictionary<string,H3.SmartForm.ListViewColumn>();
foreach(string key in response.Columns.Keys)
{
if(key=="F0000001")//判断当前编码是不是F0000001
{
//将F0000001列的列名称改成 供应商信息
H3.SmartForm.ListViewColumn newCol=new H3.SmartForm.ListViewColumn(
"F0000001"//列编码(对应控件编码)
"供应商信息"//列名称
response.Columns[key].Visible,
response.Columns[key].Sortable,
response.Columns[key].Url,
response.Columns[key].Align,
response.Columns[key].IsLabel,
response.Columns[key].ShowMode
);
columns.Add("userName",newCol);
}else{
columns.Add(key,response.Columns[key]);
}
}
response.Columns=columns;
}
//例题五:修改列排序
protected override void OnInit(H3.SmartForm.LoadListViewRespons response)
{
base.OnInit(response);
response.SortBy="F0000003";//设置列表默认根据F0000003控件进行排序
//response.SortDirection=H3.Data.Filter.SortDirection.Ascending;//正序排序
response.SortDirection=H3.Data.Filter.SortDirection.Descending;//倒序排序
}
例题六:数据都添完了,突然要求多加一个价格总和 完成后记得注释代码或者删掉代码
列表设计==>后端代码==>base.OnLoad(response);上面写代码
string sql="update I_当前表单地址栏的ID set sumMoney=prodPrice*prodNunb";
this.Engine.Query.QueryTable(sql,null);
后端OnLoad里中的常用操作:
this.Request.BizObject("F0000004")="A;B"; 多选赋默认值
this.Request.BizObject("F0000001")="张三"; 赋默认值
base.OnLoad(response);
response.ReturnData["F0000003"].Editable=false; 不可编辑
response.ReturnData["F0000003"].Visible=false; 隐藏起来,不可见
------------------------------------------------------------
案例一:
//权限设置,如果你是属于金额查看组的,才能看见金额,否则隐藏起来
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=="金额查看")
{
falg=true;
}
}
response.ReturnData["F0000005"].Visible=falg;
------------------------------------------------------------
案例二:
//不同的角色看到不同的数据
------后端代码-----
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=="金额查看")
{
falg=true;
}
}
response.Message=falg +string.Empty;
-----前端代码-----
var flag=$.SmartForm.ResponseContext.Message;
debugger; //调试、断点
if(flag=="false")
{
this.F0000003.ClearItems(); //清除原来数据
this.F0000003.AddItem("一"); //给多选按钮赋值
this.F0000003.AddItem("二");
this.F0000003.AddItem("三");
}
------------------------------------------------------------
案例三:
描述:如果设置某个字段为不可写,然后用代码给他设置了值,实际上是不会保存到数据库里面去的,
必须手动把PostValue里面的值赋值到this.Request.BizObject里去
//在OnSubmit里编写
-----后端代码-----
this.Request.BizObject["F0000001"]=postValue.Data["F0000001"] + string.Empty;
-----前端代码-----
this.F0000001.SetValue("张三");
------------------------------------------------------------
后端总结:
1、设置初始值是放在base.OnLoad前面
2、设置可见可写放在base.OnLoad后面
3、多选表单用:隔开
------------------------------------------------------------
前端常用方法:
a、Var dataText=this.F0000001.GetText(); 获取文本值
b、Var dataValue=this.F0000001.FetValue(); 获取数据库里的值,通常和a差不多
c、this.F0000001.SetReadonly(true); 只读
d、this.F0000001.SetVisible(false); 隐藏,不可见
e、this.F0000001.AddItem("新加进的"); 给下拉框赋值
------------------------------------------------------------
前端总结:
1、获取人员/部门控件值用GetUnitIDs
2、下拉框、单选框、多选框清空选项用Clearltems(),
3、添加选项用AddItem(Value)子表的GetCellManager以后获得的对象,不能使用GetText,和AddItem
-----前端-----
1、this.子表编号.ClearRows(); 清空子表行
2、添加子表行
var controlManager = this.子表编号;//获取子表控件对象
var subObjectId = $.IGuid(); //创建行ID
controlManager.AddRow( subObjectId,
{
"子表编号.编号": "张三",
})
3、更新子表行 把数据全部变成张三
var zibiao=this.子表编号.GetValue();
for(var i=0,i<zibiao.length;i++)
{
var currentRowId = this.子表编号.GetValue()[0].ObjectId; //第一行子表ID [0]是第一行
this.子表编号.UpdateRow(currentRowId,{"子表编号.编号": "张三",});
}
4、定义一个子表数据发生改变时弹窗
var that=this;
this.子表编号.BindChange('key',function(res){
if(ref[0].DataFieId=="子表编号.编号"){
var objectid=res[0].ObjectId;
var cellObj=that.子表编号.GetCellManager(objectid,"子表编号,编号") //变灰
cellObj.SetReadonly(true);
}
});
案例一:出库数量不能大于库存数量
表单提交验证里 MIN(子表.剩余库存数量<0) 子表.剩余库存数量<0
案例二:子表数据的重复校验,主表自带属性里可以设置
using System.Data;
-----后端代码-----OnSubmit
H3.DataModel.BizObject[] child=(H3.DataModel.BizObject[])this.Request.BizObject["子表编号"];
foreach(H3.DataModel.BizObject item in child)
{
string repStr=string.Format("select * from 子表编号 where 编号='{0}'",item["编号"]+string.Empty);
DataTable.repDt=this.Engine.Query.QueryTable(repStr,null);
if(repDt!=null && repDt.Rows.Count>0)
{
response.Info.Add("子表数据提交重复");
}
}
案例三:用业务规则向一个目标表单的子表添加数据
首先把子表的行清空 this.子表编号.ClearRows();
表单设置==>业务规则==>切换到高级模式==>数据生效时
INSERT(任务发布子表.子表,任务发布.子表.ParentObjectId,关联表单,任务发布.提交人,创建人,任务发布.子表.提交时间,创建时间)