发帖

序列号不能自动生成

专业版问答  / 倒序浏览   © 著作权归作者本人所有

#楼主# 2021-11-15

跳转到指定楼层

注册氚云社区,学习低代码知识,与更多氚友互动交流

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
用代码在后端创建待流程的业务对象后,序列号没有自动生成
回复

使用道具

1

主题

10

帖子

126

金币

lv3

Rank: 3Rank: 3Rank: 3

积分
156
撸猫侠 发表于 2021-11-15 15:16:39
创建业务对象,赋值业务对象,创建流程,这几件事的顺序,会导致序列号不能自动生成,显示为{SeqNo}
1、创建业务对象->创建流程,没有问题
2、创建业务对象->创建流程->继续赋值业务对象->Update()业务对象,不能自动生成序列号
3、创建业务对象->继续赋值业务对象->Update()业务对象->创建流程,不能自动生成序列号
继续赋值业务对象,这部分逻辑不便于挪到创建之前。
以下是部分代码:

/* 创建一个新的采购订单 */
                            H3.DataModel.BizObjectSchema orderSchema = this.Request.Engine.BizObjectManager.GetPublishedSchema(idhOrder.ClassName);
                            orderBo = new H3.DataModel.BizObject(this.Request.Engine, orderSchema, this.Request.UserContext.UserId, this.Request.UserContext.User.ParentId);
                            orderBo[idhOrder.Factory] = factoryObjectId;
                            orderBo[idhOrder.NestStep] = "准备采购";
                            orderBo[idhOrder.State] = "准备采购";
                            orderBo.CreatedBy = this.Request.UserContext.UserId;
                            orderBo.OwnerId = this.Request.UserContext.UserId;
                            orderBo.Status = H3.DataModel.BizObjectStatus.Running;
                            if(string.IsNullOrEmpty(orderBo.WorkflowInstanceId))
                            {
                                orderBo.WorkflowInstanceId = System.Guid.NewGuid().ToString();// 必须在Create()方法调用之前,否则流程何业务对象没有完全关联,流程日志为空
                            }
                            orderBo.Create();
/// 继续对orderBo进行写操作,包括写子表项目
orderBo.Update();

///创建流程
H3.Workflow.Instance.WorkflowInstance wInstance = this.Request.Engine.WorkflowInstanceManager.GetWorkflowInstance(orderBo.WorkflowInstanceId);
                    if(wInstance == null)
                    {
                        string workItemID = string.Empty;
                        string errorMsg = string.Empty;
                        H3.Workflow.Template.WorkflowTemplate wTemplate = this.Request.Engine.WorkflowTemplateManager.GetDefaultWorkflow(orderBo.Schema.SchemaCode);
                        this.Request.Engine.Interactor.OriginateInstance(this.Request.UserContext.UserId,
                            orderBo.Schema.SchemaCode,
                            wTemplate.WorkflowVersion,
                            orderBo.ObjectId,
                            orderBo.WorkflowInstanceId,
                            H3.Workflow.WorkItem.AccessMethod.Web,
                            true,// 是否自动提交
                            string.Empty,
                            true,
                            out workItemID,
                            out errorMsg);
                    }

回复

使用道具 举报

1

主题

10

帖子

126

金币

lv3

Rank: 3Rank: 3Rank: 3

积分
156
撸猫侠 发表于 2021-11-15 15:18:51
以上贴的代码,省略了继续使用业务对象的代码,比如这样的(子表赋值):
orderBo[idhOrder.STabJiJiaJian] = children.ToArray();
回复

使用道具 举报

1

主题

10

帖子

126

金币

lv3

Rank: 3Rank: 3Rank: 3

积分
156
撸猫侠 发表于 2021-11-15 15:34:52
解决了:我把继续使用业务对象的代码,移动到创建业务对象(Create)之前
总结,创建带流程的表单,有两个要点:
1、Create之前,必须给业务对象的WorkflowId赋值
orderBo.WorkflowInstanceId = System.Guid.NewGuid().ToString();
否则创建出来的表单,流程日志是空的,但又能看到流程详细,提交会提示流程已存在而无法提交
2、Create之后,直接创建流程,期间不能再对业务对象赋值,否则序列号不能自动生成

之后我又试了一下,其实不能创建序列号这个事情,与流程创建无关,只要create之后,再赋值业务对象,update,都会出问题。
over

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于作者

撸猫侠

lv3

  • 主题

    1

  • 帖子

    10

  • 关注者

    0

楼主新帖

小黑屋|氚云社区 |粤ICP备15096637号-1
Powered by Discuz! X3.4 Licensed  © 2001-2017 Comsenz Inc.