氚云帮助中心

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);

//获取原图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)

排查以下内容

是否开启了氚云全员可见,如果没有,请先开启全员可见,然后点击手动同步,然后再设置回来

人员是否过多,如果组织机构超过1万人,会有几率出现这种情况,超过1万人使用的建议使用云枢进行交付

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

sql报表如何进行权限控制

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

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

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

1.EngineCode和EngineScrect填错了

2.SchemaCode填错了

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

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

THE END
1.ITEMCODE什么意思itemcode意为商品代码。即在商品分类的基础上,赋予某种或某类商品以某种代表符号或代码的过程,对某一类商品赋予统一的符号系列,称为商品代码化或商品编码化。商品分类和编码是分别进行的,商品分类在先,编码在后。商品科学分类为编码的合理性创造了前提条件,但是编码是http://m.7tqp.com/news_2489212.shtml
2.Python特殊单词其他实例文章在Python 中,存在一些特殊的单词,它们具有特定的含义和功能。这些单词通常不被用作普通变量名,而是用于表示某些特定概念或操作。在本文中,我们将介绍这些特殊单词,并提供相关代码示例。 ###1. `True` 和 `False` 在Python 中,`True` 和 `False` 是两个特殊的布尔值,它们分别代表真和假。它们可以用作条件判断...http://www.shili8.cn/article/detail_20002676830.html
3.dicode的解释和意思英文 dicode 中文 【计】 双脉冲码最新查询: Dick reaction Dick test Dick toxin Dick's sera dicke fix dicke radiomer Dicken's butte dickens dicker dickey Dickey's fiber dicky dicliditis diclidostosis diclidotomy diclinous diclofenac sod diclofop-methy dicloran dicloxacillin dicodeine dicodid di...https://yinghancidian.bmcx.com/dicode__yinghanshow/
4....groundupwithtimeprejop旨在从地面向上与时间的预执行java字节码的可预测程度更高主要设计目标。 所有的功能单位,特别是在interac-之间,都是经过精心设计,可帮助避免bytecodes之间任何时间相关性。 《archi-tectural要点包括: 2013-05-23 12:23:18 回答:匿名JOP从地面被设计以Java bytecode的时间前dictable施行作为主要设计目标。 所有...http://m.zaixian-fanyi.com/fan_yi_8242694
5.JavaScript实现的encode64加密算法实例分析javascript技巧for (var i = 0; i < codeChar.length; i++) { dic[codeChar.charAt(i)] = i; } var code = []; var res = codeStr.length % 4; var i = 3, v; for (; i < codeStr.length; i += 4) { v = dic[codeStr.charAt(i - 3)]; ...https://www.php.cn/faq/7912.html
6.Commitcf9f12d441436e0eb9ba3dc52be4ff23929e986c313 " label = self.weighted_edges_dic[frozenset([path[-2],path[-1]])]\n", 314 " if self.animation_type in ['greedy','a_star']:\n", 315 " label = self.help_info_weight*self.help_info[path[-1]] + self.origin_info_weight*label\n", 316 " self.show_edge_la...https://mo.zju.edu.cn/repo/d1DrTTg673lLfar3r_M4JwP0hGNtu2FyQIbk/commit/cf9f12d441436e0eb9ba3dc52be4ff23929e986c/
7.下面的问题是什么意思啊,看不懂,求大神解答输入一个边长,打印出...数据库company中有如下两张表表offices(office_code, city, address, country, postal_code)office_code为主键,表employees(employee_number, name, mobile, office_code, job_title, note, gender),employee_number为主键且自增.(1)创建数据库...https://www.shuashuati.com/ti/99e83d2ab7de435e8ef2e11a26ea160a.html
1.[CA]什么?已经可以解析了?说不定只解析了指令名?功能:从指令的字符串表示解析出机器码。 调用TokenizedInstruction::from_line方法来将指令字符串拆分成基础指令和字段,然后将其传递给Instruction::code_from_tokens进一步处理。 Instruction::code_from_tokens 功能:根据解析后的令牌(TokenizedInstruction),构造对应的机器码。 https://blog.csdn.net/m0_74331272/article/details/144032801
2.Python教程:?codecs模块(编码+解码)codecs模块还有哪些功能? 1.查找字符编码的对应关系:codecs模块提供了lookup方法,可以查找字符编码的对应关系,lookup函数返回一个包含4个元素的元组,其中look[0]是encoder的函数引用,look[1]是decoder的函数引用,look[2] 是UTF-8编码方式的StreamReader类对象引用,look[3]是UTF-8编码方式的StreamWriter类对象引用。https://yundeesoft.com/109681.html
3.POS机JSONCode解析错误,原因影响及解决方案POS机(Point of Sale,销售终端)是商业领域的重要设备,用于处理商品销售、收款等事务,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于数据接口和配置文件,当POS机解析JSON代码时,可能会遇到错误,导致POS机无法正常工作,本文将从多个方面对POS机JSON Code解析错误进行详细分析,并提出解决方案。 POS机...https://www.xipos.cn/m/60957.html
4.主题一致性python代码LDAmob64ca12f4d1ad的技术博客什么是LDA? LDA是一种生成模型,假定文档由多个主题构成,而每个主题又由多个单词组成。LDA试图发现这些潜在的主题,并为每个文档分配一个主题分布。通过分析,可以了解文本数据的结构,提取出对我们有用的信息。 安装必要的库 首先,我们需要安装一些必要的Python库,包括gensim、pandas、matplotlib和nltk。可以使用下面的命令...https://blog.51cto.com/u_16213450/12598990
5.PythonDictionary:数据存储和检索的高效利器在Python语言中,Dictionary是一种非常有用的数据类型,尤其是在数据存储和检索方面。Dictionary是一种以键值对形式存储数据的数据结构,它支持快速的检索和插入、删除操作。本文将从多个方面对Python Dictionary做详细的阐述。 一、 Dictionary的基本操作 1)创建Dictionary ...https://www.506064.com/n/159359.html
6.如何使用Codex模型处理代码下面是一些使用 Codex 的示例,可以在部署了code-davinci-002等 Codex 系列模型的Azure AI Studio的操场中进行测试。 说“Hello”(Python) Python """ Ask the user for their name and say "Hello" """ 创建随机名称 (Python) Python """ 1. Create a list of first names 2. Create a list of last...https://learn.microsoft.com/zh-cn/azure/ai-services/openai/how-to/work-with-code
7.什么是CaviarCode它与传统编码方式相比有哪些优势其中,CaviarCode作为一种新型的编码方式,近年来备受关注。那么,什么是CaviarCode?它与传统的编码方式相比究竟有哪些优势和特色呢?本文将为你一一解答。 什么是CaviarCode? CaviarCode是一种新兴的编码技术,旨在简化编程过程,并提高开发效率。与传统的编码方式不同,CaviarCode采用了更加模块化的设计思想,支持更高效的数据...http://m.hbnholdings.com/hbgonglue/609158e52.html
8.<经验杂谈>C#生成条形码{publicclassCode128 {privatereadonlyDataTable _mCode128 =newDataTable();privateuint_mHeight =40;///<summary>///高度///</summary>publicuintHeight {get{return_mHeight; }set{ _mHeight =value; } }privateFont _mValueFont;///<summary>///是否显示可见号码 如果为NULL不显示号码///</summary>...https://www.u72.net/daima/n1n74.html
9....code:lzzSearch1[1].0withdependence.ziptCode Size: 2413kCategory: Java DevelopDevelopment Platform: Javat-base.dic:Code Content Previous Page 1 ... 8 9 10 11 12 13 14 15 16 17 ... 19 Next Page 放臭屁 放荒 放荡 放荡不羁 放虎归山 放虎自卫 放血 放行 放言 放言高论 放话 放诞 放诱饵 放诸四海而皆准 放象 放账 放贷 放...http://en.verysource.com/code/26061387_10/t-base.dic.html
10.GitHubjyang526843/2DFEGlobalDIC:2DFiniteCode Manual It is already included in the code. It's also available at my Researchgate:https://www.researchgate.net/publication/345907429_Finite_Element_Global_Digital_Image_Correlation_FE-Global-DIC_Code_Manual_v10 Code Demo 2D_FE_Global_DIC MATLAB code demo is very similar to the ALDIC cod...https://github.com/jyang526843/2D_FE_Global_DIC
11.精通数据科学算法data = common.load_3row_data_to_dic(input_file) new_data = knn.knn_to_2d_data(data, x_from, x_to, y_from, y_to, k) common.save_3row_data_from_dic(output_file, new_data)# source_code/common/common.py# ***通用例程与函数的库***def dic_inc(dic, key):if key is None: ...https://labs.epubit.com/bookDetails?id=N21557
12....BinaryCodedECDIC的意思 ECDIC 英文缩写ECDIC 英文全称Extended Binary-Coded-Decimal Interchange Code 中文解释扩展的十进制二元编码交换码 缩写分类电子电工 缩写简介一种计算机使用的交换码学习应用类查询 新华字典 汉语词典 成语大全 诗词大全 英文缩写 英语单词 在线翻译 英文名 科技名词 五笔字根表 笔画数 偏旁部首 汉字拼音...https://msuoxie.911cha.com/NW56bQ==.html
13.java设计数据字典应用开发中数据字典项设计实现方案.pdf如下: drop table datadic_groups; create table datadic_groups( group_code varchar2(20) primary key, group_name varchar2(50) ); drop table datadic_items; create table datadic_items( dataitem_code varchar2(20) primary key, dataitem_name varchar2(50), group_code varchar2(20) ); alter ...https://m.book118.com/html/2023/0415/7201124146005064.shtm
14.详解Java如何优雅的实现字典翻译javaprivate JsonSerializer<?> createContextual(String dicCode) { DictSerializer serializer = new DictSerializer(); serializer.setDictCode(dicCode); return serializer; } ? @Override public void serialize(Object value, JsonGenerator gen, SerializerProvider provider){ ? String dictCode = getDictCode()...https://www.jb51.net/article/282688.htm
15.自定义注解用法字典翻译注解@Dict《Jeecg1.配置字典2.后端实体属性上加注解(此处dicCode 对应上述字典编码) /** * 性别(1:男 2:女) */ @Dict(dicCode = "sex") private Integer sex; 3.前端定义column(此处dataIndex原字段名为sex ,这里需要定义为sex_dictText,即原字段名+'__dictText') columns: [ //...省略其他列 { title: '性别',...https://www.bookstack.cn/read/jeecg-boot-2.0/980c9b27872996af.md