氚云帮助中心

H3.Data.Filter.Filterfilter=newH3.Data.Filter.Filter();//构建过滤器

H3.Data.Filter.AndandMatcher=newH3.Data.Filter.And();//构造And匹配器

andMatcher.Add(newH3.Data.Filter.ItemMatcher("控件编码",H3.Data.ComparisonOperatorType.Equal,"筛选依据值"));//添加筛选条件

filter.Matcher=andMatcher;

(二)依据多个控件值进行筛选

1.“AND”关键字连接

andMatcher.Add(newH3.Data.Filter.ItemMatcher("控件编码1",H3.Data.ComparisonOperatorType.Equal,"筛选依据值1"));//添加筛选条件

andMatcher.Add(newH3.Data.Filter.ItemMatcher("控件编码2",H3.Data.ComparisonOperatorType.Equal,"筛选依据值2"));//添加筛选条件

2.“OR”关键字连接

H3.Data.Filter.OrorMatcher=newH3.Data.Filter.Or();//构造Or匹配器

orMatcher.Add(newH3.Data.Filter.ItemMatcher("控件编码1",H3.Data.ComparisonOperatorType.Equal,"筛选依据值1"));//添加筛选条件

orMatcher.Add(newH3.Data.Filter.ItemMatcher("控件编码2",H3.Data.ComparisonOperatorType.Equal,"筛选依据值2"));//添加筛选条件

filter.Matcher=orMatcher;

(三)依据字段进行排序

1.正序排序

filter.AddSortBy("控件编码1",H3.Data.Filter.SortDirection.Ascending);//添加排序依据

2.倒序排序

filter.AddSortBy("控件编码1",H3.Data.Filter.SortDirection.Descending);//添加排序依据

必要说明:

(一)匹配器对象

H3.Data.Filter.And相当于SQL中“AND”关键字

H3.Data.Filter.Or相当于SQL中“OR”关键字

(二)筛选条件

H3.Data.ComparisonOperatorType.Equal相当于SQL中“=”

H3.Data.ComparisonOperatorType.NotEqual相当于SQL中“!=”

H3.Data.ComparisonOperatorType.Above相当于SQL中“>”

H3.Data.ComparisonOperatorType.NotBelow相当于SQL中“>=”

H3.Data.ComparisonOperatorType.Below相当于SQL中“<”

H3.Data.ComparisonOperatorType.NotAbove相当于SQL中“<=”

答:参考下面表格所示。

按钮名称

ActionName编码

暂存

Save

提交

Submit

删除

Remove

撤回

RetrieveInstance

同意

不同意

Reject

作废

CancelInstance

打印

Print

二维码

ViewQrCode

全屏

FullScreen

关闭

Close

编辑

Edit

转交

Forward

已阅

Read

答:创建/更新大批量数据的时候,用commit可以提高效率。

H3.DataModel.BulkCommitcommit=newH3.DataModel.BulkCommit();H3.DataModel.BizObjectSchemaschema=this.Request.Engine.BizObjectManager.GetPublishedSchema("D0001001");for(inti=0;i<1000;i++){H3.DataModel.BizObjectobj=newH3.DataModel.BizObject(this.Request.Engine,schema,this.Request.UserContext.UserId);obj["F000001"]=1;obj.Create(commit);//如果已经存在对象,不需要新建,只需Update就可以:obj.Update(commit);}stringerrorMsg=null;commit.Commit(this.Request.Engine.BizObjectManager,outerrorMsg);

答:对象子表以子对象数组形式存在,如果需要创建包含子表的对象或修改子表的值,需要构造或获取到子表对象数组,然后将子表对象数组赋值给主表的子表属性。

以下示例代码用于修改订单子表的某一列的值:

protectedoverridevoidOnSubmit(stringactionName,H3.SmartForm.SmartFormPostValuepostValue,H3.SmartForm.SubmitSmartFormResponseresponse)

{

H3.DataModel.BizObject[]details=(H3.DataModel.BizObject[])this.Request.BizObject["D00002SalesOrderDetail"];//获取子表属性并强制转换为对象数组

if(details!=null&&details.Length>0)

ListlstObject=newList();

foreach(H3.DataModel.BizObjectdetailindetails)

detail["WaitStockOutQuantity"]=detail["Quantity"];//修改子表列的属性

lstObject.Add(detail);

}

//将List转成对象数组,并重新赋值给主表

this.Request.BizObject["D00002SalesOrderDetail"]=lstObject.ToArray();

//获取一个Engine管理对象

H3.IEngineengine=this.Engine;

//表单编码

stringmasterSchemaCode="D00021testtable";

//表单数据Id

stringmasterBoId="bbc60153-19b8-4a57-b074-0c5b77367f8d";

//子表控件编码

stringchildSchemaCode="D00021F7287906e76734bef8819176bc15a8763";

//Load出要修改数据的主表业务对象

H3.DataModel.BizObjectmasterBo=H3.DataModel.BizObject.Load(H3.Organization.User.SystemUserId,engine,masterSchemaCode,masterBoId,false);

//获取子表结构体对象

H3.DataModel.BizObjectSchemachildSchema=masterBo.Schema.GetChildSchema(childSchemaCode);

//定义新的子表数据集合

ListnewChildBoList=newList();

//获取子表内已有数据

H3.DataModel.BizObject[]childBoArray=(H3.DataModel.BizObject[])masterBo[childSchemaCode];

if(childBoArray!=null&&childBoArray.Length>0)

foreach(H3.DataModel.BizObjectitemBoinchildBoArray)

//将子表内已有数据循环添加到新的子表数据集合里

newChildBoList.Add(itemBo);

//new一个子表业务对象,并添加到子表数据第一行

H3.DataModel.BizObjectchildBo1=newH3.DataModel.BizObject(engine,childSchema,H3.Organization.User.SystemUserId);

childBo1["F0000002"]="xxxxx";

newChildBoList.Insert(0,childBo1);

//new一个子表业务对象,并添加到子表数据最后一行

H3.DataModel.BizObjectchildBo2=newH3.DataModel.BizObject(engine,childSchema,H3.Organization.User.SystemUserId);

childBo2["F0000002"]="yyyyyy";

newChildBoList.Add(childBo2);

//将新的子表数据集合赋值到子表控件

masterBo[childSchemaCode]=newChildBoList.ToArray();

//修改主表业务对象,系统会自动识别出上面子表数据被修改了,执行完Update方法,新的子表数据就会被保存到数据库

masterBo.Update();

//取出子表内F0000002控件的值

stringF0000002=itemBo["F0000002"]+string.Empty;

//判断F0000002控件的值是否为空,不为空时,才将当前子表行数据添加到新的子表数据集合中,相当于把F0000002控件的值是否为空的行数据删除了

if(!string.IsNullOrEmpty(F0000002))

答:可序列化的虚业务对象可以直接返回到前台,由前台代码直接接收。以下示例代码用于在后台查询业务对象数组并添加到Response.ReturnData。由前台代码接收Response.ReturnData数据。

示例代码如下:

if(actionName=="BtnCheck")

stringaccountName=postValue.Data["AccountName"]+string.Empty;

H3.Data.Filter.Filterfilter=newH3.Data.Filter.Filter();

H3.Data.Filter.AndandMatcher=newH3.Data.Filter.And();

andMatcher.Add(newH3.Data.Filter.ItemMatcher("AccountName",H3.Data.ComparisonOperatorType.Contains,accountName));

intcount=0;

Dictionaryheaders=null;

DictionaryuserNames=null;

H3.Data.Serialization.VirtualObject[]objects=this.Request.Engine.BizObjectManager.GetList(

H3.Organization.User.SystemUserId,

"D00002Account",

H3.DataModel.GetListScopeType.GlobalAll,

filter,

outcount,

true,

outheaders,

outuserNames

);//查询虚对象

response.ReturnData=newDictionary();

response.ReturnData.Add("Objects",objects);//将对象返回到前台

答:氚云提供对表单所有数据的一键清除功能,该操作不受数据之间引用限制。

stringschemaCode="D00002Lead";

this.Request.Engine.BizObjectManager.Clear(schemaCode);//清除表单D00002Lead的所有数据。数据清除后不可恢复,请谨慎操作。

答:如果是带流程的表单,在创建业务对象时需要发起流程,需要调用Engine.Interactor.OriginateInstance接口发起流程。

H3.DataModel.BizObjectSchemaschema=this.Request.Engine.BizObjectManager.GetPublishedSchema("D000001InspectIssue");

H3.DataModel.BizObjectiReport=newH3.DataModel.BizObject(this.Request.Engine,schema,this.Request.UserContext.UserId,

this.Request.UserContext.User.ParentId);

iReport["IssueReportName"]="关于****的整改报告";

stringinstanceId=System.Guid.NewGuid().ToString();

if(string.IsNullOrEmpty(iReport.WorkflowInstanceId))

iReport.WorkflowInstanceId=instanceId;

iReport.Create();//创建对象

H3.Workflow.Instance.WorkflowInstancewfInstance=this.Request.Engine.WorkflowInstanceManager.GetWorkflowInstance(iReport.WorkflowInstanceId);

if(wfInstance==null)

//启动流程

stringworkItemID=string.Empty;

stringerrorMsg=string.Empty;

H3.Workflow.Template.WorkflowTemplatewfTemp=this.Request.Engine.WorkflowTemplateManager.GetDefaultWorkflow(iReport.Schema.SchemaCode);

this.Request.Engine.Interactor.OriginateInstance(this.Request.UserContext.UserId,iReport.Schema.SchemaCode,

wfTemp.WorkflowVersion,iReport.ObjectId,iReport.WorkflowInstanceId,H3.Workflow.WorkItem.AccessMethod.Web,

true,string.Empty,true,outworkItemID,outerrorMsg);

}//第七个参数false/true为是否提交流程操作

示例代码:

H3.Organization.OrgRolerole=newH3.Organization.OrgRole();

role.Code="manager";

role.Name="经理";

role.CompanyId=Engine.Organization.Company.CompanyId;

Engine.Organization.AddUnit(role);//创建角色

H3.Acl.FunctionAclacl=newH3.Acl.FunctionAcl(role.Code,"客户管理","createdby");

Engine.FunctionAclManager.AddAcl(acl);//给角色添加权限。

stringcustomer=this.Request[“Customer”]+string.Empty;

objectvalue=response.ReturnData["dataField"];

bool_flag=false;

if(_userRoles!=null)

foreach(H3.Organization.OrgRole_userRolein_userRoles)

_flag=true;

break;

if(_flag)

response.ReturnData["F0000001"].Visible=false;//设置字段不可见

response.ReturnData["F0000002"].Editable=false;//设置字段不可写

H3.DataModel.BizObjectFileHeader[]files=(H3.DataModel.BizObjectFileHeader[])this.Request.BizObject["F0000020"];//附件控件

foreach(H3.DataModel.BizObjectFileHeaderfinfiles)

stringFileId=f.FileId+string.Empty;

}//注意:新增的时候获取不了ID

stringfileInfo="";

string[]ObjectDataId={child.ObjectId};//表单的objectid数组

H3.DataModel.BizObjectFileHeader[]fileobject=this.Request.Engine.BizObjectManager.GetBizObjectFileHeaders(ObjectDataId);

if(fileobject!=null&&fileobject.Length>0)

foreach(H3.DataModel.BizObjectFileHeaderiteminfileobject)

fileInfo+=item.FileId+";";

stringuserId=this.Request.UserContext.UserId+string.Empty;//获取当前用户ID

H3.Organization.OrgRole[]userRoles=this.Engine.Organization.GetUserRoles(userId,true);//根据用户ID,获取该用户所有的角色

for(inti=0;i

if(userRoles[i].Name=="系统管理员")//判断是否为管理员

response.Message="true";

stringDianzhang="";//角色ID

H3.Organization.OrgRole[]allRoles=this.Engine.Organization.GetAllRoles();//获取所有角色

foreach(H3.Organization.OrgRoleallRoleinallRoles)

if(allRole.Name=="公海提醒")

Dianzhang=allRole.ObjectId;

string[]Renyuans=this.Engine.Organization.GetChildren(Dianzhang,H3.Organization.UnitType.User,true,H3.Organization.State.Active);//获取公海提醒角色的所有成员ID

DictionaryTaskObjects1=(Dictionary)response.ReturnData["D00021cChildTable"].Value;//获取子表数据

Dictionarytaskobject1=(Dictionary)TaskObjects1["T"];

foreach(stringkeyintaskobject1.Keys)

if(key=="D00021cChildTable.ChildNumber")

taskobject1[key].Visible=false;//设置子表‘ChildNumber’列隐藏

答:调用CopyFiles()。

//主表内附件控件复制到主表内附件控件上

this.Request.Engine.BizObjectManager.CopyFiles("原-主表编码","","原-主表内附件控件编码","原-主表数据ObjectId","新-主表编码","","新-主表内附件控件编码","新-主表数据ObjectId",true,true);

//主表内附件控件复制到子表内附件控件上

this.Request.Engine.BizObjectManager.CopyFiles("原-主表编码","","原-主表内附件控件编码","原-主表数据ObjectId","新-主表编码","新-子表编码","新-子表内附件控件编码","新-子表数据ObjectId",true,true);

//子表内附件控件复制到主表内附件控件上

this.Request.Engine.BizObjectManager.CopyFiles("原-主表编码","原-子表编码","原-子表内附件控件编码","原-子表数据ObjectId","新-主表编码","","新-主表内附件控件编码","新-主表数据ObjectId",true,true);

//子表内附件控件复制到子表内附件控件上

this.Request.Engine.BizObjectManager.CopyFiles("原-主表编码","原-子表编码","原-子表内附件控件编码","原-子表数据ObjectId","新-主表编码","新-子表编码","新-子表内附件控件编码","新-子表数据ObjectId",true,true);

/*

CopyFiles方法最后两个参数详解:

第一个true:本次复制附件到目标控件是覆盖还是添加,true为覆盖,false为添加

第二个true:若本次是覆盖模式,目标控件原先附件是否进行物理删除,true为物理删除,false为只删除记录

*/

//获取图片缩略图url,FileId:附件Id

stringfileurl=this.Request.UserContext.GetThumbnailUrl(stringFileId);

该接口即将下线如果上述接口报错提示缺少参数,请使用新接口

stringthumbnailUrl=this.Request.UserContext.GetThumbnailUrl(stringFileId,stringThumbnailKey)

stringObjectDataId=this.Request.BizObjectId;//表单的objectid数组

//支持多个数据ObjectId参数查询

H3.DataModel.BizObjectFileHeader[]fileobject=this.Request.Engine.BizObjectManager.GetBizObjectFileHeaders(newstring[]{ObjectDataId});

//获取图片缩略图

stringthumbnailUrl=this.Request.UserContext.GetThumbnailUrl(item.ObjectId,item.ThumbnailKey);

//获取原图url,FileId:附件Id

答:前端PostForm请求后端,后端返回前端的数据组,需要构建虚业务对象。

前端代码:

varparent=this;

$.SmartForm.PostForm("QueryStudentInfo",{

StudentId:"123"//学生ID

},function(data){

if(data.Errors&&data.Errors.length){

$.IShowError("错误",JSON.stringify(data.Errors));

}else{

debugger;

varresult=data.ReturnData;

if(result["StudentName"]){

//获取后端返回的学生姓名

varStudentName=result["StudentName"];

//给当前表单的F0000010控件设置值

parent.F0000010.SetValue(StudentName);

if(result["ClassInfo"]){

//获取后端返回的学生所在班级信息

varClassName=result["ClassInfo"]["ValueTable"];

if(result["LikeList"]){

//获取后端返回的学生喜好

varLikeList=result["LikeList"];

if(result["FamilyInfo"]){

//获取后端返回的学生家庭信息

varFamilyInfo=result["FamilyInfo"];

},function(error){

$.IShowError("错误",JSON.stringify(error));

},false);

后端代码:

protectedoverridevoidOnSubmit(stringactionName,

H3.SmartForm.SmartFormPostValuepostValue,

H3.SmartForm.SubmitSmartFormResponseresponse)

if(actionName=="QueryStudentInfo")

//从请求对象中获取学生ID

stringStudentId=this.Request["StudentId"]+string.Empty;

if(StudentId=="123")

//将学生姓名添加到响应对象中

response.ReturnData.Add("StudentName","张三");

//将学生所在班级信息添加到响应对象中

H3.Data.Serialization.VirtualObjectClassInfo=new

H3.Data.Serialization.VirtualObject();

ClassInfo.ValueTable["ClassName"]="大一";

response.ReturnData.Add("ClassInfo",ClassInfo);

//将学生喜好添加到响应对象中

string[]LikeList=newstring[3];

LikeList[0]="Rap";

LikeList[1]="跳舞";

LikeList[2]="打篮球";

response.ReturnData.Add("LikeList",LikeList);

//将学生家庭信息添加到响应对象中

ListFamilyInfo=new

List();

//将父亲信息添加到响应对象中

H3.Data.Serialization.VirtualObjectFatherInfo=new

FatherInfo.ValueTable["Name"]="李四";

FatherInfo.ValueTable["Age"]=41;

FamilyInfo.Add(FatherInfo);

//将母亲信息添加到响应对象中

H3.Data.Serialization.VirtualObjectMotherInfo=new

MotherInfo.ValueTable["Name"]="王五";

MotherInfo.ValueTable["Age"]=41;

FamilyInfo.Add(MotherInfo);

response.ReturnData.Add("FamilyInfo",FamilyInfo);

}else

//响应给前端一个异常信息

response.Errors.Add("未找到StudentId为“"+StudentId+"”的学生

信息!");

base.OnSubmit(actionName,postValue,response);

答:与主表业务对象更新类似。需要注意:子表的数据标题,如果配有主表字段控件则不可使用这样的更新写法。

stringschemaCode="";//子表控件编码

stringdetail="";//子表ObjectId

H3.DataModel.BizObjectaccountBo=H3.DataModel.BizObject.Load(this.Request.UserContext.UserId,this.Request.Engine,schemaCode,detail,false);//Load对象

accountBo["CustomerName"]="深圳氚云网络科技有限公司";//修改对象属性值

accountBo["CustomerLevel"]="已成交";

accountBo.Status=H3.DataModel.BizObjectStatus.Effective;//将对象状态设为生效

accountBo.Update();//更新对象

答:重写response.ReturnData数据集。

protectedoverridevoidOnLoad(H3.SmartForm.LoadListViewResponseresponse)

base.OnLoad(response);

stringisFormControl=this.Request["isFormControl"]==null"":this.Request["isFormControl"].ToString();

//判断是否是在load列表数据时

if(isFormControl!="1"&&isFormControl!="true")

//将系统自带的filter添加进来,否则系统自带的筛选将失效

andMatcher.Add(this.Request.Filter.Matcher);

//获取当前表单业务对象模式

H3.DataModel.BizObjectSchemaallTaskSchema=this.Request.Schema;

//获取列表过滤后的业务对象

H3.DataModel.BizObject[]tasks=H3.DataModel.BizObject.GetList(this.Request.Engine,this.Request.UserContext.UserId,allTaskSchema,H3.DataModel.GetListScopeType.GlobalAll,filter);

//初始化一个集合,用来存储经过筛选后响应给前端的数据

List>list=newList>();

if(tasks!=null&&tasks.Length>0)

//筛选需要显示的列表数据,例如筛选出状态为正常的数据

foreach(H3.DataModel.BizObjectbizintasks)

Dictionarydic=newDictionary();

stringobj=biz["ObjectId"]+string.Empty;//获取表单ID

stringstate=biz["F0000002"]+string.Empty;//获取状态

if(state=="正常"&&obj!="")

//构造当前表单业务对象

H3.DataModel.BizObjectClient=newH3.DataModel.BizObject(this.Engine,this.Request.Schema,this.Request.UserContext.UserId);

Client.ObjectId=obj;//给对象ID赋值

Client.Load();//根据ID加载业务对象

Dictionary>dicdate=null;

foreach(H3.DataModel.PropertySchemaprointhis.Request.Schema.Properties)//给dic赋值

//附件、图片不会显示在列表上,需要排除掉

if(pro.DataType==H3.Data.BizDataType.File||pro.DataType==H3.Data.BizDataType.Image||pro.DataType==H3.Data.BizDataType.BizObjectArray)

continue;

//F0000008控件为日期控件,在这个转成标准的日期表达字符串,用于改变列表对此列异常的显示

if(pro.Name=="F0000008")

dic.Add(pro.Name,Client[pro.Name]+string.Empty);

else

dic.Add(pro.Name,Client[pro.Name]);

/*----Start以下代码为构造手机端摘要信息----*/

stringmobilesummary=null;//移动端摘要构造器所需

stringpcsummary=null;//移动端摘要构造器所需

stringtelephone=null;//移动端摘要构造器所需

Client.GetSummary(outdicdate,outmobilesummary,outpcsummary,outtelephone);//返回摘要信息

dic.Add("__MobileSummary",mobilesummary);

dic.Add("__MobileDicData",dicdate);

/*----End以上代码为构造手机端摘要信息----*/

//将经过筛选后的数据对象添加进集合中

list.Add(dic);

//赋值筛选后的列表数据

response.ReturnData=newList>();

response.ReturnData=list;

//由于我们改变了ReturnData集合,所以这里需要改变响应数据的条数

response.DataCount=list.Count;

答:提供C#的Newtonsoft.Json组件进行解析。

stringvalue=this.Serialize(objectvalue);//将对象序列化成json格式的字符串

Tvalue=this.Deserialize(stringvalue);//将json格式的字符串反序列化成T类型的对象

答:例如获取子表中F0000001字段的值。先获取子表控制值,将其转化为对象数组,在循环遍历取值。

stringzz=detail["F0000001"]+string.Empty;//获取子表中F0000001的字段值

//Activity3节点审批同意时获取审批意见

if(actionName=="Submit"&&this.Request.ActivityCode=="Activity3")

stringcomment=postValue.Comment.Text;

//Activity3节点审批不同意时获取审批意见

if(actionName=="Reject"&&this.Request.ActivityCode=="Activity3")

H3.Workflow.Instance.ITokentok=this.Request.Engine.WorkflowInstanceManager.GetWorkflowInstance("流程id").GetLastToken();

tok.Activity:流程节点编码,string类型

tok.Approval:是否同意,H3.Data.BoolValue类型:

H3.Data.BoolValue.True是同意,

H3.Data.BoolValue.False是不同意,

H3.Data.BoolValue.Unspecified是未处理或节点被取消

tok.TokenId:流程步骤表(H_Token)ObjectId字段值,string类型

tok.Participants:流程审批人,string[]类型,每一个数组元素对应一个审批人用户ID

tok.FinishedTime:流程节点结束事件,DateTime类型

tok.UsedTime:当前节点从开始到结束耗时,TimeSpan类型

System.Data.DataTableb=this.Engine.Query.QueryWorkItemDisplayAndParticipant(string[]InstanceIds,H3.Workflow.WorkItem.WorkItemStatestate);

InstanceIds:流程实例id数组

答:这种情况一般是你字段为不可写,然后通过代码SetValue的值,这种情况,你只需要在OnSubmit通过

this.Request.BizObject["字段"]=postValue.Data["字段"];

答:如果是提交的数据,在OnSubmit里面判断(因为编辑的时候他的数据的状态是生效的状态)

if(this.Request.BizObject.Status==H3.DataModel.BizObjectStatus.Draft)

//这里是新增提交的时候写的代码

if(this.Request.BizObject.Status==H3.DataModel.BizObjectStatus.Effective)

//这里是编辑的时候写的代码

//得到一个IEngine对象

H3.IEngineengine=this.Request.Engine;

//获取系统虚拟用户的人员Id(表单设计后端类、列表设计后端类、定时器类、自定义接口类中都可以获取)

stringsystemUserId=H3.Organization.User.SystemUserId;

stringcurrentUserId=this.Request.UserContext.UserId;

H3.DataModel.BizObjectbiz=H3.DataModel.BizObject.Load(currentUserId,engine,"D00021fbc02cce483842e6b65b3fb10dd64536",this.Request.BizObjectId+string.Empty,false);

//获取流水号并赋值

biz["F0000001"]=biz["SeqNo"]+string.Empty;

//流水号要在提交后获取

this.F0000005.BindChange

("key",function(){

$.SmartForm.PostForm

function(res){

parent.F0000004.SetValue(res.ReturnData.Data1);

},function(){

});

if(actionName=="GetDays")

stringstr=this.Request["F0000005"]+string.Empty;

foreach(stringstr2instr1)

H3.DataModel.BizObjectbiz=H3.DataModel.BizObject.Load(this.Request.UserContext.UserId,this.Engine,"D0002175521e4e872547d4b24098bd4ae17e3b",str2,false);//通过前端传回来的关联表单objectid,加载出业务对象

if(actionCode=="DataCopy"){

//点击复制按钮时检查是否选中数据

varobjects=$.ListView.GetSelected();

if(objects==null||objects==undefined||objects==""){

$.IShowWarn("您还未勾选数据,请勾选!");

return;

//判断选中数据是否大于1条

elseif(objects.length>1){

$.IShowWarn("不好意思,只能勾选一个采购单");

else{

$.ListView.Post("DataCopy",{objectId:objects[0].ObjectId,str1:"123"},

function(data){

if(data.ReturnData==null||!data.ReturnData.Message){

//刷新列表

$.ListView.RefreshView();

$.IShowSuccess("复制完成!");

elseif(data.ReturnData!=null&&data.ReturnData.Message){

$.IShowError(data.ReturnData.Message);

$.IShowError("复制失败!");

},

$.IShowError(data.Errors[0]);

false);

if(actionName=="DataCopy")

stringobjectId=this.Request["objectId"];

stringstr1=this.Request["str1"];

if(!string.IsNullOrEmpty(objectId))

H3.DataModel.BizObjectaccountBo=H3.DataModel.BizObject.Load(this.Request.UserContext.UserId,this.Engine,"D000213ef50cc75c5e4bac958ec64182d62d9d",objectId,false);

if(accountBo!=null)

H3.DataModel.BizObjectSchemaschema=this.Request.Engine.BizObjectManager.GetPublishedSchema("D000213ef50cc75c5e4bac958ec64182d62d9d");

H3.DataModel.BizObjectobj=newH3.DataModel.BizObject(this.Request.Engine,schema,this.Request.UserContext.UserId);//主表对象

obj["F0000001"]=DateTime.Now;//需求日期

...

//附件

this.Request.Engine.BizObjectManager.CopyFiles("D000213ef50cc75c5e4bac958ec64182d62d9d","","F0000012",accountBo.ObjectId,"D000213ef50cc75c5e4bac958ec64182d62d9d","","F0000012",obj.ObjectId,true,true);

//子表数据不为空

if(accountBo["D00021Fe17972588372432381107d8bc67e9d50"]!=null)

//得到子表数据

H3.DataModel.BizObject[]zibiao=(H3.DataModel.BizObject[])accountBo["D00021Fe17972588372432381107d8bc67e9d50"];

//创建存新子表数据集合

ListzibiaoList=newList();

//循环复制数据

foreach(H3.DataModel.BizObjectzbinzibiao)

H3.DataModel.BizObjectSchemanewSch=this.Request.Engine.BizObjectManager.GetPublishedSchema("D00021Fe17972588372432381107d8bc67e9d50");

H3.DataModel.BizObjectnewzb=newH3.DataModel.BizObject(this.Request.Engine,newSch,this.Request.UserContext.UserId);

newzb["F0000006"]=zb["F0000006"];

zibiaoList.Add(newzb);

obj["D00021Fe17972588372432381107d8bc67e9d50"]=zibiaoList.ToArray();

obj.Status=accountBo.Status;

if(string.IsNullOrEmpty(obj.WorkflowInstanceId))

obj.WorkflowInstanceId=System.Guid.NewGuid().ToString();

//创建对象

H3.ErrorCodecreateResult=obj.Create();

//判断是否成功创建数据对象

if(createResult!=H3.ErrorCode.Success)

response.ReturnData.Add("Message",createResult.ToString());

if(accountBo.Status==H3.DataModel.BizObjectStatus.Running)

obj.Status=H3.DataModel.BizObjectStatus.Draft;

H3.Workflow.Instance.WorkflowInstancewfInstance=this.Request.Engine.WorkflowInstanceManager.GetWorkflowInstance(obj.WorkflowInstanceId);

H3.Workflow.Template.WorkflowTemplatewfTemp=this.Request.Engine.WorkflowTemplateManager.GetDefaultWorkflow(obj.Schema.SchemaCode);

this.Request.Engine.Interactor.OriginateInstance(this.Request.UserContext.UserId,obj.Schema.SchemaCode,wfTemp.WorkflowVersion,obj.ObjectId,obj.WorkflowInstanceId,H3.Workflow.WorkItem.AccessMethod.Web,true,string.Empty,true,outworkItemID,outerrorMsg);

response.ReturnData.Add("Message","数据对象未获取到!");

response.ReturnData.Add("Message","无数据对象ID!");

1.获取公司所有角色H3.Organization.OrgRole[]allRoles=this.Request.Engine.Organization.GetAllRoles();

2.循环这个数组,找到你要的角色

3.获取所有用户string[]userIds=this.Request.Engine.Organization.GetChildren(角色id,H3.Organization.UnitType.Role,true,H3.Organization.State.Active);

protectedoverridevoidOnWorkflowInstanceStateChanged(H3.Workflow.Instance.WorkflowInstanceStateoldState,H3.Workflow.Instance.WorkflowInstanceStatenewState)

//流程审批结束事件(先执行业务规则,在执行该方法)。

if(oldState==H3.Workflow.Instance.WorkflowInstanceState.Running&&newState==H3.Workflow.Instance.WorkflowInstanceState.Finished)

//执行业务代码逻辑

base.OnWorkflowInstanceStateChanged(oldState,newState);

需要注意,如果流程设置的是开始节点直接到结束节点,中间没有审批节点,或者审批节点全部符合自动审批通过逻辑,需要使用如下代码

if((oldState==H3.Workflow.Instance.WorkflowInstanceState.Running||oldState==H3.Workflow.Instance.WorkflowInstanceState.Initiated)&&newState==H3.Workflow.Instance.WorkflowInstanceState.Finished)

排查以下内容

这种情况一般是由于关联了子表,主表leftjoin子表的时候,如果子表是两行,那么join出来的结果会有两行,这样就会出现统计结果翻倍的情况,建议使用sql进行编写

sql报表如何进行权限控制

只要在查询结果中暴露出OwnerId和OwnerDepartId就行,并一定要要求OwnerId对应的字段是拥有者,如果selectmanasOwnerIdfromtable(这里的man是一个人员单选).这样也能达到控制权限的目的

复选框本质就是一个单行文本,他的字数限制是200个字,如果复选框所选择的字加起来超过了总字数就会报错

这种错误只可能有两种情况

1.EngineCode和EngineScrect填错了

2.SchemaCode填错了

注意:记得把EngineCode和EngineScrect写在Header里面

这种情况,一般是由于您的数据是通过业务规则插入的,而且没插数据标题,您虽然看到了数据标题,那是平台帮忙显示的,本质上数据标题(数据库Name值)是空的。这样情况您需要编辑提交一下数据就可以了。最一劳永逸的办法是您再插入业务规则的时候把数据标题也赋值一下

THE END
1.IDEA如何批量修改变量名idea批量修改变量名IDEA 如何批量修改变量名 ?在IDEA中进行工作时,有事敲了很久代码发现一个类名,方法名,或者变量名定义错了,这时,该变量可能在很多地方都引用到了,要修改的话,极其麻烦,需要将所有引用该变量的地方都进行修改,特别麻烦。 ?实际上,IDEA提供了一个快捷键进行变量名的批量处理。https://blog.csdn.net/weixin_40739833/article/details/81210433
2.快速导入批量资料的方法快速导入批量资料的方法取决于你所使用的具体应用或系统。以下是一些通用的步骤和方法: 1. **确定数据格式**:首先,你需要确定你的资料的格式,比如CSV、Excel、数据库等。 2. **使用模板**:很多系统都提供了标准的数据导入模板,你可以在导入前下载并按照模板格式准备你的数据 https://www.360doc.cn/article/27236893_1116350323.html
3.如何:批量导出和修改注册MicrosoftLearn在某些情况下,我们需要在通知中心创建或修改大量的注册。 其中的某些情况是先进行标记更新,再进行批量计算,或者迁移现有的推送实施方案以使用通知中心。 本主题说明如何使用通知中心批量支持,在通知中心执行大量操作或导出所有注册信息。 流程概述 批处理支持旨在支持涉及到数百万个注册的长时间运行的作业。 为了达到此规模https://docs.microsoft.com/zh-cn/previous-versions/azure/azure-services/dn790624(v=azure.100)
4.如何进行批量操作(BulkOperations)有很多关于如何实施批量操作的文章。我们将从不同的方面来探讨批量架构。 与批处理(Batch)操作的区别 我们不希望与批处理操作混淆。批量操作是在一个请求中捆绑了不同的行动和路由,这些路由没有任何连贯性,甚至有可能,每条路由都与其他路由完全不同。批量请求通常是希望在一个请求中应用相同功能的一组条目。 https://apifox.com/blog/bulk-operations/
5.小红书如何引流购物粉和宝妈粉?给你一套详细的引流方案四、如何批量操作 很多人肯定会想,自己一个人或者几个人怎么能批量去操作呢?首先一定是文案图片编辑的分配,3-4个人就可以,1个人负责文案撰写、1个人负责P图、1-2人负责选品。 每个人负责事项(大概阐述一下如何安排兼职工作内容) 1、发帖兼职:费用XX元,一天一结或五天一结款。 https://www.niaogebiji.com/article-73451-1.html
6.CAD如何使用批量打印插件?大家好,我是小溜,当我们需要打印大量的CAD图纸时,使用CAD批量打印插件可以节约大量时间,下面我为大家介绍CAD批量打印插件的使用方法。希望本文对大家有帮助,感兴趣的小伙伴可以关注了解下。 想要更深入的了解“CAD”可以点击免费试听溜溜自学网课程>> 工具/软件 https://zixue.3d66.com/article/details_113424.html
7.怎么才能实现文档批量打印呢?轻松实现文件批量打印请看下文!这些文件都常常用于我们的办公中,但是我们在工作中的文件总是不单一,我们要怎么才能进行多文档的批量打印呢?翻阅了很多的办公打印笔记,发现了福昕智慧打印!它可以轻松实现文件批量打印,还有更多的文件打印功能请看下文教程哦! 福昕智慧打印适用于家庭/个人打印、企业/团队打印、设备厂商赋能等专业远程打印领域,是您更https://www.foxitsoftware.cn/dayin/help_p/818.html
8.CAD怎么批量给图块重命名?CAD常见问题中望CAD官网CAD软件RENAME的操作比较简单,键盘输入REN,回车,打开“重命名”对话框,在左边选要重命名的对象,在右边选要修改的图块或样式,输入新名字即可。 如果是批量重命名,最主要的是如何批量选择怎么定义图块的新名字,下面来看看批量重命名图块的技巧。 批量重命名的主要问题是:怎么多选,怎么定义新的名字,最重要的是通配符https://www.zwcad.com/service_69_7963.html
9.如何把word文档转换成pdf想要知道如何批量地将word文档转换成pdf文件吗?首先在电脑上安装“迅捷PDF转换器”,并且打开此软件。选择【PDF转换】,点击左侧功能栏的【文件转PDF】中的【Word转PDF】功能。我们可以先把多个word文件放到同一个文件夹里,然后点击【添加文件夹】按钮将该文件夹内的所有word文档进行导入。 将word文档导入完成后,在下方https://www.xunjiepdf.com/19369
10.Photoshop如何自动批量添加图片边框,图片logo,底部水印(一)photoshop如何批量添加图片边框。 做电商的都会遇到上传产品处理图片的事儿,实在是麻烦,经常是同一件事情反复的做,甚是无趣。 如果单个的给图片添加边框是很简单的,这里就不讲了。 批量添加边框,需要使用到photoshop的一个小技巧,"action" 如下图,在photoshop的右上方。 https://www.jianshu.com/p/0b962b319841
11.如何为Excel批量加前缀或后缀如何为Excel批量加前缀或后缀 在使用Excel表格工作时,我们很经常接触输入相同的前缀或者后缀的情况。这些前缀虽然简单,但逐个输入起来确实繁琐而枯燥,增加了工作量。这里和大家一起分享一个Excel技巧,让单元格在输入时自动添加前缀,或者快速修改增加原有文档的前缀。https://g.pconline.com.cn/x/292/4746040.html
12.新学期必看老师如何自动批量注册学生账户?若您还没有账号,老师需要在i3DOne社区注册一个账号(网址:https://www.i3done.com/),勾选”我是老师“,正确填写学校/机构、真实姓名、上传能证明本校/本机构任职的教师证件或在职证明等个人资料,等待身份审核(1个工作日内完成系统会发送消息通知结果,通过后即可拥有学校/机构管理员权限,请按照第3步进行提交批量注https://www.i3done.com/news/2016/750.html
13.如何快速批量修改多个Excel文件如何快速批量修改多个Excel文件 当我们需要对多个Excel文件进行修改时,手动逐个打开修改是非常耗时耗力的,尤其是对于大量的Excel文件,更是让人崩溃。 那么,有没有一种方式可以快速批量修改多个Excel文件呢?答案是肯定的。本文将为您详细介绍如何运用Excel快速批量修改多个Excel文件。https://www.miaoke.cn/en-US/skill/detail/AAQvgYqp
14.抖音视频内容怎么提取出来现在,你已经学会了如何批量提取抖音视频,可以轻松地保存和分享你喜欢的抖音视频内容了。这种方法不仅简单方便,而且可以提高你的工作效率。希望本文对你有所帮助,祝你使用愉快! If you have any further inquiries or questions, feel free to ask. 十、怎么将抖音视频上的字幕提取出来? https://tool.a5.cn/article/show/96220.html
15.如何删除word文档中多余的回车(空格和空行)方法和技巧总结word二、如何批量删除Word文档中空格和空行 在工作中,经常会碰到将内网信息粘贴Word文档中进行编辑时,如果粘贴过来的文本中含有多余的空格和空行,同时文档又很大时,如果一个个用手工的方式删除空行的办法实在是太浪费时间了。而且打印时又太浪费墨和打印纸,有没有较便捷的方式呢?下面就介绍下批量删除Word文档中多余的空格https://www.jb51.net/office/word/68184.html
16.python如何进行批量注释python如何进行批量注释 python批量注释的两种方法: 1、选中要注释的代码,使用【Ctrl+/】快捷键多行注释; 2、将需要注释的部分代码用三个双引号或者三个多引号括起来多行注释。 选中要注释的代码,按住【Ctrl+A】快捷键全选,再按住【Ctrl+/】快捷键多行注释。https://www.python51.com/jc/11951.html
17.如何将企业微信好友批量转移到另一个号上?批量转移客户会收到通知如何批量转移企业微信好友? 将企业微信好友批量转移到另一个号上主要有2种方法。 方法一:在职继承转移 此方法适用于岗位变动情况。我们可以使用在线继承的功能进行批量好友转移操作。企业微信管理员,打开企业微信App,依次点击【工作台-客户联系-在职继承】,进入在职继承页面。 在此页面按提示操作,依次选择要继承成员的客https://crm.bytell.cn/blog/wework/5160
18.如何通过批量操作提升redis性能腾讯云开发者社区如何通过批量操作提升 redis 性能 1. 引言 由于redis事务不满足原子性,并且每条命令都会与服务器进行网络交互,因此,对于整个交互过程而言也并没有性能上的提升,所以在实际的使用中,redis 的事务特性基本上是不会被使用到的。 但有时,我们还是需要去批量执行 redis 任务,并且对于每个命令的执行结果我们并不关心,这样https://cloud.tencent.com/developer/article/2031646