阅读:5136
回复:0
|
(5.1~5.31)问题互助板块月汇总(5.1~5.31)问题互助板块月汇总 1.H3 BPM支持流程期限的设置么 ?
最佳答案:@越王勾践 请参考高级里面的超时策略,不过这个是要在流程的每个节点做设置 2.数据项-----痕迹 最佳答案:@岩竹玉雨 H3CloudLog 库 OT_BizObjectPropertyTrack BizObjectId 业务数据库数据ObjectId PropertyName 修改字段列 ModifiedBy 修改人id ModifiedValue 修改后的值 ModifiedTime 修改时间 3.表单样式,有什么简单方法美化吗 最佳答案:@t156965365 现有大部分是bootstrap的样式,是各浏览器兼容性比较好的方案了 4.关于C#代码连接服务器发起流程,如何连接服务器?参数如何填写? 最佳答案:@实名用户_f294cd19 参考这段代码: OThinker.H3.Connection conn = new OThinker.H3.Connection(); OThinker.Clusterware.ConnectionResult result = conn.Open("127.0.0.1", 8211,"DefaultEngine", "administrator", "000000"); if (result == OThinker.Clusterware.ConnectionResult.Success) { //... } 5.默认表单的aspx窗口,不能写入方法 最佳答案:@t156965365 /** 数字金额大写转换(可以处理整数,小数,负数) */ var digitUppercase = function (n) { var fraction = ['角', '分']; var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']; var unit = [ ['元', '万', '亿'], ['', '拾', '佰', '仟'] ]; (详细代码见原帖) 6.浏览portal报错 最佳答案:@t156965365 如果是使用IIS Express,修改IIS Express的配置文件applicationhost.config。 (详细见原帖) 7.默认生成的表单为什么是只读的? 最佳答案:@岩竹玉雨 没有配置数据权限, 参考文档:http://121.40.136.138/WIKI/Default.aspx?code=hdsx 8.数据模型下的查询列表不能查询流水号??? 最佳答案:@t156965365 流水号是在OT_INSTANCECONTEXT表中的,跟数据模型并不是一对一的关系。 9.子表:其中一个字段绑定查询,其他字段通过映射 最佳答案:@t156965365 在不需要编辑的字段加个 readonly 属性 10.使用业务服务方法 最佳答案:@t156965365 1 检查一下业务服务方法里面是否有增加对应的查询字段,xml是否有生成对应的条件。 2 最后在查询列表选择上对应的查询条件. 3 如果是后修改的sql,需要主数据更新业务方法,然后删掉查询列表,重做一个查询列表,不然不会更新。 11.主数据中的查询列表不能添加查询条件 最佳答案:@t156965365 如果需要系统字段,见一个不存数据库的字段,用来在界面接收需要的系统项值。在字段的DefaultValue里面,设定为系统字段值,然后传入进去。 12.数据模型中查询列表里面的方法,移除按钮点击无效,删除不了数据 最佳答案:@t156965365 (1)编辑数据回显不出来,是需要点击编辑界面的关闭才会刷新父页面,直接关闭页面没有效果。另外还需要选择保存后关闭并刷新父页面。 (2)传入ID不对,下页面的设置条件见原帖图。remove勾选传入ID。 13.怎么在VS里面找不到流程 最佳答案:@岩竹玉雨 (1)默认表单的页面是存在数据库中的。自定义页面在VS中新建页面 (2)mvcDemo,这个Demo的重点不是流程,而是学习一些基本的前台后台代码参考 14.某一个字段需要修改字段类型怎么办? 最佳答案:@t156965365 把字段删了,发布以后,再把这个字段建回来。 大部分情况都是没有问题的。 后台改表是不行的,数据结构什么的是有缓存在服务引擎里面的。 15.如何备份代码 最佳答案:@t156965365 只能自己复制出来保存一下。如果是自定义表单,我现在是用vs自带的团队资源管理器的git,备份在本机。 既可以备份又可以版本控制,文件对比。 16.映射子表单通过哪种方式去映射进去?能否通过JS去控制映射? 最佳答案:@t156965365 在表单中,控件类型为子表的数据项,其对于的前台代码其实就是Table 下面简单介绍遍历子表的方法 循环子表取、赋值方法: //此方法的功能是将子表TravelExpensesList复制到子表FinancialAudit中 //步骤解析: //1、取到子表FinancialAudit的总行数 //2、由于是将子表TravelExpensesList复制到子表FinancialAudit中,也就是子表TravelExpensesList是有值的,而子表FinancialAudit是刚初始化的,没有值,所以在同步值之前需要先要保持两个子表的行数一致,故每次循环需比较行数是否一致 //3、通过行号取到子表TravelExpensesList各列的数据值,并赋值给子表FinancialAudit (详情见原帖) 17.是否可以设置自由流程 最佳答案:@t156965365 加个审批人字段,流程里面判断这个字段为参与者。 表单用自定义表单,在提交的时候弹出窗口选择人员,写入到审批人字段。 或者更简单一点,直接把字段放到表单上,设定成必填字段,让流程发起人员选择。 18.表单开发时流水号不显示怎么解决? 最佳答案:@t156965365 保存或者提交以后才会产生流水号。 另外查看一下流水号的规则有没有设定好 19.9.2.7 子表中补充增加列后,默认表单的子表怎么添加后来补充的列? 最佳答案:@t156965365 (1)表单还没怎么修改的话,就直接点还原。 (2)如果表单改动了很多,就新建一个表单,把里面的aspx代码复制过去,记得把表头和表尾的代码复制过去。 20.子表单添加是默认值不出现? 最佳答案:@岩竹玉雨 根据以往经验判断,你应该是在添加默认值得时候是根据环节是否为发起模式作为判断条件的。所以值带不出来。 21.关于主流程触发子流程 最佳答案:@武汉技术支持团队 这种场景不能用系统的父子流程功能实现,只能通过代码去发起其他流程! 先拟清思路。从数据库取要下发到子流程的数据。因为主要根据子表N行列数发起N行流程。所以要关联子表。联查出N行数据。然后循环这N行数据。每循环一次调用接口发起流程。直到循环结束。(要传入发起子流程的参数。我这里是主流程的发起人既子流程的发起人) 22.数据模型权限里的新增是控制哪个方面 最佳答案:@tanw 此权限在未启用流程,使用表单新增业务数据有效。 1.数据模型->查询列表可配置查询列表项,功能编码->添加功能 动作编码AddNew 即对应以上新增权限。 2.在应用中心配置应用菜单,链接地址配置为1中查询编码,保存后前台页面可现实查询列表及对应新增表单等操作按钮(需要重新登录)。 23.后台如何手工增加表单实例 最佳答案:@t156965365 后台发起一个流程。只不过有些流程就是填写完直接结束就行了。 \Portal\WebServices\BPMService.asmx 看下文件里面用法, H3里的表单数据是依托流程的。要增加相关数据就是发起流程,写入表单数据。 后台发起流程参考如下Java跨平台发起表单申请开始详解:http://bbs.h3bpm.com/read.php?tid=1438&fid=30&page=1 如果直接是修改表单的数据,参考帮助文档的业务对象管理器:http://wiki.h3yun.com/Default.aspx?code=IBizObjectManager 24.我发起流程,不是表单页面,是流程页面 最佳答案:@武汉技术支持团队 看一下流程图发起节点参与者配置是否为空,把参与者重新配置成{originator}试试,打印模板在默认表单里设置 25.填写时映射子表单 最佳答案:@t156965365 可以的,通过ajax的方式取数,下面是官方的子表操作实例:在表单中,控件类型为子表的数据项,其对于的前台代码其实就是Table 下面简单介绍遍历子表的方法. 循环子表取、赋值方法: //此方法的功能是将子表TravelExpensesList复制到子表FinancialAudit中 //步骤解析: //1、取到子表FinancialAudit的总行数 //2、由于是将子表TravelExpensesList复制到子表FinancialAudit中,也就是子表TravelExpensesList是有值的,而子表FinancialAudit是刚初始化的,没有值,所以在同步值之前需要先要保持两个子表的行数一致,故每次循环需比较行数是否一致 //3、通过行号取到子表TravelExpensesList各列的数据值,并赋值给子表FinancialAudit function InitFinancialAuditData() { //取到FinancialAudit的总行数(JQuery) var FinancialAuditLength = $("table[data-datafield='FinancialAudit']").find("tr.rows").length; //由于是FinancialAudit向TravelExpensesList同步,所以开始遍历子表TravelExpensesList,取到每行的值再赋值到子表FinancialAudit的对应行中 $("table[data-datafield='TravelExpensesList']").find("tr.rows").each(function () { //获取到子表TravelExpensesList当前遍历的这一行的行号 //注:一个子表就是一个table,table下面的每个tr、td都有一个属性“data-row”,它是记录当前这个tr、td所在行的行号(就是每行前面的序号) var row = $(this).attr("data-row"); //比较当前获取的行号是否大于FinancialAudit子表的总行数,大于的话,需要FinancialAudit增加一行进行同步,不然即使两个子表的数据同步完毕,也会因为FinancialAudit的行是初始化的1行,导致第2行以及第2行之后的所有数据看不见 //当然这部分的循环添加行的方法可以用再次优化,也可提到循环外完成 if (row > FinancialAuditLength) { //H3给子表添加行的方法,属于H3封装的方法 $("#Control23").SheetUIManager()._AddRow(); } //同步两张表的数据 //方法$.MvcSheetUI.SetControlValue("参数1","参数2",参数3);是用来给子表赋值的,针对子表数据;是$.MvcSheetUI.SetControlValue("参数4",参数5);的重载而$.MvcSheetUI.SetControlValue("参数4",参数5);针对的是表单数据 //$.MvcSheetUI.SetControlValue("参数1","参数2",参数3);参数说明: //参数1:对应你需要赋值的子表中的数据项的数据项编码 //参数2:你需要给这个数据项赋值的值 //参数3:子表行号 //方法功能说明:根据你提供的行号和编码(类似于横纵坐标),找到对应子表数据项,进行赋值 // //方法$.MvcSheetUI.GetControlValue("参数1",参数2);是取子表值,针对子表数据;是$.MvcSheetUI.GetControlValue("参数4");的重载而$.MvcSheetUI.SetControlValue("参数4");针对的是表单数据 //$.MvcSheetUI.SetControlValue("参数1",参数2);参数说明: //参数1:对应你需要赋值的子表中的数据项的数据项编码 //参数2:子表行号 //方法功能说明:根据你提供的行号和编码(类似于横纵坐标),找到对应子表数据项 $.MvcSheetUI.SetControlValue("FinancialAudit.Hyperlink", $.MvcSheetUI.GetControlValue("TravelExpensesList.Hyperlink", row), row); $.MvcSheetUI.SetControlValue("FinancialAudit.StartPlace", $.MvcSheetUI.GetControlValue("TravelExpensesList.StartPlace", row), row); $.MvcSheetUI.SetControlValue("FinancialAudit.StartDate", $.MvcSheetUI.GetControlValue("TravelExpensesList.StartDate", row), row); $.MvcSheetUI.SetControlValue("FinancialAudit.Destination", $.MvcSheetUI.GetControlValue("TravelExpensesList.Destination", row), row); $.MvcSheetUI.SetControlValue("FinancialAudit.ReturnDate", $.MvcSheetUI.GetControlValue("TravelExpensesList.ReturnDate", row), row); $.MvcSheetUI.SetControlValue("FinancialAudit.Days", $.MvcSheetUI.GetControlValue("TravelExpensesList.Days", row), row); $.MvcSheetUI.SetControlValue("FinancialAudit.Customer", $.MvcSheetUI.GetControlValue("TravelExpensesList.Days", row), row); $.MvcSheetUI.SetControlValue("FinancialAudit.CityType", $.MvcSheetUI.GetControlValue("TravelExpensesList.CityType", row), row); $.MvcSheetUI.SetControlValue("FinancialAudit.TotalCost", $.MvcSheetUI.GetControlValue("TravelExpensesList.TotalCost", row), row); $.MvcSheetUI.SetControlValue("FinancialAudit.AttachmentNumber", $.MvcSheetUI.GetControlValue("TravelExpensesList.AttachmentNumber", row), row); var val = $.MvcSheetUI.GetControlValue("FinancialAudit.CheckMoney", row); if (val != null && val != "") { } else { $.MvcSheetUI.SetControlValue("FinancialAudit.CheckMoney", $.MvcSheetUI.GetControlValue("TravelExpensesList.TotalCost", row), row); } }); //JQuery方法 //通过子表数据项编码找到子表FinancialAudit的对应列,给整个列附加上不可编辑的属性 $("input[data-datafield='FinancialAudit.Hyperlink']").attr("disabled", "disabled"); $("input[data-datafield='FinancialAudit.StartPlace']").attr("disabled", "disabled"); $("input[data-datafield='FinancialAudit.StartDate']").attr("disabled", "disabled"); $("input[data-datafield='FinancialAudit.Destination']").attr("disabled", "disabled"); $("input[data-datafield='FinancialAudit.ReturnDate']").attr("disabled", "disabled"); $("input[data-datafield='FinancialAudit.Days']").attr("disabled", "disabled"); $("input[data-datafield='FinancialAudit.Customer']").attr("disabled", "disabled"); $("input[data-datafield='FinancialAudit.CityType']").attr("disabled", "disabled"); $("input[data-datafield='FinancialAudit.TotalCost']").attr("disabled", "disabled"); //$("input[data-datafield='FinancialAudit.AttachmentNumber']").attr("disabled", "disabled"); } 此示例只是针对同步子表这个功能的讲解,希望大家能从这个例子中更加了解子表,并灵活运用 此示例也是较多方式中的其中一种,希望大家也不要局限于此! 26.FindPostByJobCode这个函数无效? 最佳答案:@t156965365 FindPostByJobCode() : 指定的职务编码的岗位 这个是传入职务编码返回岗位的函数,并不会返回人员 FindStaffByPostCode() 指定岗位中管理范围为指定组织的编制用户; 要传入岗位编码。 wiki里面有详细解释 http://wiki.h3yun.com/Default.aspx?code=FormatRule 27.错误:方法"123"的设置不是XML 最佳答案:@岩竹玉雨 错误原因:xml解析大于号 小于号时错误。 解决方法:用转义字符代替; 28.时间控件设置 最佳答案:@t156965365 @开始懂了 t156965365: 只有当前时间是有字符串代替的,其余的要放具体的时间进去。你可以用js先算出来再放进去。 如下// 控件初始化事件 $.MvcSheet.ControlInit = function () { if (this.Type == "SheetTime" && this.DataField == "字段名") { var d = new Date(); d.setDate(d.getDate() + 30); this.MaxValue = d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate(); } }; ......... 开始懂了: 可以用WdatePicker空间的json表达式 比如设置智能选择今天以前的日期,并且用绿色界面 {skin:'whyGreen',maxDate:'%y-%M-%d'} ....... 29.登陆报错无法进入 最佳答案:@t156965365 找到Portal目录下的web.config文件。 把里面的BPMEngine节点后的Password的000000改成你修改后的密码 <!-- Portal链接引擎配置 --> <add key="BPMEngine" 30.假如一个表单使用给一个公用审批意见 最佳答案:@t156965365 流程中的字段状态,参考如下帖子: http://bbs.h3bpm.com/read.php?tid=1738#read_8429 如果只是 为了获取审批的状态或者意见,可以尝试下这个。 可以记录下当前节点的意见和状态。 31.工作流邮件提示设置 最佳答案:@t156965365 邮件参数设置在 集群配置 里面 http://localhost:8010/Cluster http://wiki.h3yun.com/Default.aspx?code=xiaoxi 32.H3 9.2 后台怎么调用H3的方法执行SQL语句 最佳答案:@岩竹玉雨 OThinker.H3.Controllers.AppUtility.Engine.Query.QueryTable("sql语句") 33.部门树形控件通过JS获取ID 最佳答案:@t156965365 $('#<%=UserSelector.UserIDs.ClientID%>').val() 获取选中人员id $('#<%=UserSelector.UserNames.ClientID%>').val() 获取选中人员name OnChange 里面的代码是选中后eval调用的,不是回调也没法传入后台字段. 如果要用到onchange的话,可以试下直接给控件注册个onchange事件。 34.如何设置表单全局的字体样式? 最佳答案:@t156965365 全局表单: 修改WFRES\CSS\MvcSheet.css ,在body节点里面增加 font-family:"字体名" !important; 某个表单的话加个样式 body{ font-family:"字体名" !important; } 用F12查看控制整个页面的div,找到相应的CSS文件和对应行数,修改字体就可以了 ps:部分未解决问题将移交产品中心解决
|
|