• [线上活动] 【工业数字化大讲堂 第十七期】云端智造,助力制造企业协同生产 轻松应对市场突变—特邀 黑湖科技全国生态总监 王之伟先生分享
    主题:云端智造,助力制造企业协同生产 轻松应对市场突变【直播嘉宾】:王之伟  黑湖科技全国生态总监【直播内容】:本次直播为您分享如何打破制造企业内外部数据孤岛,实现生产现场信息的实时聚合并结合标杆企业案例深度剖析,共同探讨如何助力企业实现降本增效、柔性生产、高效协作。5月19日(周四)16:00-17:00 点此观看直播~ 【观看直播抽好礼】直播期间可参与抽奖哦~往期精彩分享>> 【工业数字化大讲堂】第一期 华为数字化转型分享(车海平 华为公司高级副总裁、数字转型首席战略官)live2021/12/22第二期 建立制造领域数字化转型的基石(陈振华 中国机床工具工业协会、工业互联网发展负责人)live2021/12/30第三期 制造业数字化转型势道术(朱少盛 深圳赛瀚德技术有限公司CEO)live2022/1/6第四期 华为供应链数字化分享(范美华 华为供应链管理部CIO)live2022/1/13第五期 华为数字化转型实践(苏立清 华为云首席数字化转型官)live2022/2/17第六期 华为数字化转型实践(张勇强 工业解决方案高级顾问)live2022/2/24第七期 华为服务交付数字化转型之路(叶蓁蓁 华为软件云服务资深产品专家)live2022/3/4第八期 制造业企业数据平台建设最佳实践分享 马千里(数据使能资深解决方案架构师)live2022/3/10第九期 工业数字化和工业云 丘水平(华为工业软件及工业云CTO) 2022/3/17第十期 开天aPaaS赋能工业云 金伟(华为云开天aPaaS首席规划专家)live2022/3/24第十一期 制造业中小企业转型能力建设分享 龚祺(工业云项目群总监)live2022/4/7第十二期 专精特新企业数字化转型如何落地 崔裕(鼎捷软件行业发展中心总监)live2022/4/15第十三期 非标装备制造企业如何破除交付困境 张燕聪(广州盛原成科技有限公司CEO)live2022/4/21第十四期 华为终端供应商数字化生产建设方案 仲金柱(华为供应商质量发展协会会长)live2022/4/28第十五期 国产三维CAD助力制造业创新和转型升级 梅敬成(山大华天软件有限公司CTO)live2022/5/6第十六期 用IoT打开数字化之门 司世南(语祯物联创始人兼CEO)live2022/5/13第十七期 云端智造,助力制造企业协同生产 轻松应对市场突变 王之伟(黑湖科技全国生态总监)live2022/5/19更多精彩直播,请关注微信公众号“工业数字化大讲堂”↓↓
  • [交流吐槽] ef core 创建和删除 API
    EnsureCreated() 和 EnsureDeleted() 方法提供了一种轻型替代方法,可用于管理数据库架构的 Migrations。 当数据是暂时性数据,并且可以在架构更改时删除时,这些方法非常有用。 例如,在原型制作期间、测试期间或用于本地缓存时。某些提供程序(尤其是非关系提供程序)不支持 Migrations。 对于这些提供程序,EnsureCreated 通常是初始化数据库架构的最简单方法。从 EnsureCreated 转换到 Migrations 不是一种无缝体验。 最简单的方法就是删除数据库,然后使用 Migrations 重新创建它。 如果预计将来会使用迁移,最好从 Migrations 开始,而不是使用 EnsureCreated。EnsureDeletedEnsureDeleted 方法将删除数据库(如果存在)。 如果没有适当的权限,则会引发异常。// Drop the database if it existsdbContext.Database.EnsureDeleted();EnsureCreatedEnsureCreated 将创建数据库(如果不存在)并初始化数据库架构。 如果存在任何表 (包括另一 DbContext 类) 的表,则不会初始化架构。// Create the database if it doesn't existdbContext.Database.EnsureCreated();SQL 脚本若要获取所使用的EnsureCreatedSQL,可以使用GenerateCreateScript该方法。var sql = dbContext.Database.GenerateCreateScript();多个 DbContext 类EnsureCreated 仅在数据库中没有表时有效。 如果需要,可以编写自己的检查来查看架构是否需要初始化,并使用基础 IRelationalDatabaseCreator 服务初始化架构。// TODO: Check whether the schema needs to be initialized// Initialize the schema for this DbContextvar databaseCreator = dbContext.GetService<IRelationalDatabaseCreator>();databaseCreator.CreateTables();
  • [技术干货] 体验API Explore,花样玩转AI语音合成接口[转载]
    链接:https://bbs.huaweicloud.com/blogs/352647您将会学到什么您可实时访问和调用API获取语音合成结果,将输入的文字合成为音频。您需要什么硬件要求• PC电脑软件要求• Chrome浏览器需要的知识点• 熟悉常规电脑操作常识环境准备注册华为云账号、实名认证· 如果您已拥有华为账号且已通过实名认证,可直接体验。· 若您还没有通过实名认证的账号,请注册华为账号,然后完成实名认证(推荐使用“扫码认证”方式,即时完成)。· 参考如何实名认证和如何扫码认证。操作指导步骤一:访问API Explorer的AI语音合成接口点击链接进入API Explorer页面,选择【语音合成接口】,(注意:要登录自己的账号哦,没有账号请注册账号)步骤二:体验接口调试功能在text参数里随意输入想合成的文本,发起调试步骤三:将语音编码转成音频文件复制步骤二调试成功的响应体,复制按键如图所示点击【预览代码】进入新页面,并点击右上角【在CloudIDE上】打开(若未开通CloudIDE,进入CloudIDE产品页面点击【立即体验】免费开通即可)进入CloudIDE双击json文件将之前复制的响应体粘贴到json文件预置的空数组中(提示:若要拼凑多个转语音编码,可生成多个语音编码的响应体,复制到数组中,用逗号隔开)点击运行到Explorer下,选择mp3文件,右键,选择download,即可下载生成音频文件来听啦恭喜您已完成体验。华为云PaaS产品体验大本营(答疑交流群)
  • [常见问题] 【答疑汇总vol.1】开天aPaaS▲▲企业工作台▲▲常见问题(2022.5)
    企业工作台根据角色的不同,有企业用户使用的用户平台和企业管理员使用的管理后台请根据所使用的帐号角色,查找对应的用户指南及常见问题~用户操作指南   |   管理后台操作指南一、用户使用常见问题1. 账号或密码错误    Q: 在用户登录界面,进行账号密码登录时提示账号或密码错误。如图:    可能原因:您输入的账号或者个人密码错误。    处理办法:请重新填写正确的账号与密码,如您忘记密码可进行重置,重置密码请联系企业管理员。重置密码方式见>>用户指南-管理后台操作指南-3.4.4重置账号密码 2. 账号无法使用    Q: 在用户登录界面进行登录时,系统提示账号无法使用。    可能原因:1. 您的帐号已被管理员禁用。2. 您的帐号由于密码连续输入错误,被冻结。    处理办法:1. 账号禁用:请联系系统管理员咨询禁用原因及如何重新启用账号。启用方法见>>用户指南-管理后台操作指南-3.4.3启用账号。2. 账号冻结:账号在指定的时间内会自动解冻,一般为30分钟。二、管理后台常见问题1. 订阅应用成功,企业工作台看不到应用    Q: 管理员订阅应用成功,但用户在企业工作台没有看到应用。    A: 修改应用可见范围 cid:link_52. 无法创建自建应用    Q: 管理员创建自建应用时,里面的应用标签为空,无法创建应用。    A: cid:link_63. 企业工作台不是最新的门户站点    Q: 管理员新创建的门户站点启用后,用户登录开天企业工作台,看到的不是最新的门户站点。    A: cid:link_74. 编辑“商品推荐组件”是,点击“...”无效    Q: 在创建门户页面,添加“商品推荐”组件,进行配置该组件,点击“...”无效,或者预览带有“商品推荐”组件的页面时,点击“...”无效。    A: cid:link_85. 自定义门户站点时,布局内容中没有其他菜单选项    Q: 管理员自定义门户站点时,布局模板选择仅有横导航或仅有侧导航时,布局内容只有默认的菜单,无自定义菜单选项。    A: cid:link_96. 如何指定部分用户访问门户站点    Q: 如何指定部分用户访问门户站点    A: cid:link_10第二期:【答疑汇总vol.2】开天aPaaS▲▲企业工作台▲▲常见问题(2022.12)
  • [常见问题] 【答疑汇总vol.1】开天aPaaS■■集成工作台■■常见问题(2022.5)
    开天集成工作台 常见问题汇总第一期一、流管理Q: 流编排能解决什么问题?A: 流编排能帮助用户简化系统集成的过程。开天集成工作台预置了丰富的连接器,并提供多个场景化模板,用户可以通过图形化的方式编排流程,快速上手。Q: 流编排图形化编排是否可以满足复杂场景?A: 目前流编排已支持50+的连接器,并在不断丰富中,编排支持嵌套、条件、数组等操作。 Q: 流编排只支持华为云产品服务的集成吗?A: 流编排目标支持华为云产品和第三方产品的API集成。 Q: 能否共享创建的流?A: 目前不支持。 Q: 可以关闭流或者启用流吗?A: 可以,每个计划流都有一个“开启/待开启”开关,用户可以从正在处理的请求中停止流。手动触发流不点击运行就是关闭状态,点击运行就是开启状态。流在重新打开时的响应方式:轮询,例如 定期 触发器:再次打开流时,会处理所有未处理/挂起的事件。 如果用户不希望处理挂起项,请删除流。Webhook:再次打开流时,只处理在打开流以后生成的新事件。 Q: 支持的浏览器A: 建议使用与操作系统兼容的最新浏览器。 一般常用的浏览器都支持,如:Microsoft Edge、Chrome等。 Q: 同一个账号可以支持同时在多个服务器上登录吗?A: 支持,只需要在IAM配置好。 二、连接器管理Q: 支持哪些身份验证类型?A: 请参考用户指南。可以使用以下身份验证标准:适用于特定服务的 OAuth 2.0;通用 OAuth 2.0;基本认证;API密钥;IAM;AK/SK。 Q: 能否在没有Webhook的情况下生成触发器?A: 可以,可以选择轮询触发器,以指定频率调用服务来检查新数据。开天集成工作台自定义连接器还支持基于Webhook的触发器和轮询触发器,基于Webhook的触发器会等待事件发生。 Q: 用户创建的连接器,同一企业的其他用户可见吗?A: 不可见。 Q: 用户可以删除全部连接器吗?A: 用户只能删除自己创建的本地连接器,而无法删除公共连接器。 Q: 企业管理员与系统集成商,拥有的权限有什么不同?企业管理员能创建、查看、编辑、授权、验收项目。系统集成商可以查看、实施,申请验收。更多信息请参见>>集成工作台用户指南  cid:link_1第二期:【答疑汇总vol.2】开天aPaaS ■■ 集成工作台 ■■ 常见问题(2022.12)
  • [分享交流] 【工业数字化大讲堂 第十六期】用IoT打开数字化之门—特邀语祯物联创始人兼CEO 司世南先生 5月13日分享!
    主题:用IoT打开数字化之门【直播嘉宾】:司世南  语祯物联创始人兼CEO【直播内容】:本期直播为您介绍物联网(IoT )发展趋势,结合案例分享IoT如何助力制造业企业数字化转型,帮助企业降本增效。5月13日(周五)16:00-17:00 点此观看直播~ 【观看直播抽好礼】直播期间可参与抽奖哦~往期精彩分享>> 【工业数字化大讲堂】第一期 华为数字化转型分享(车海平 华为公司高级副总裁、数字转型首席战略官)live2021/12/22第二期 建立制造领域数字化转型的基石(陈振华 中国机床工具工业协会、工业互联网发展负责人)live2021/12/30第三期 制造业数字化转型势道术(朱少盛 深圳赛瀚德技术有限公司CEO)live2022/1/6第四期 华为供应链数字化分享(范美华 华为供应链管理部CIO)live2022/1/13第五期 华为数字化转型实践(苏立清 华为云首席数字化转型官)live2022/2/17第六期 华为数字化转型实践(张勇强 工业解决方案高级顾问)live2022/2/24第七期 华为服务交付数字化转型之路(叶蓁蓁 华为软件云服务资深产品专家)live2022/3/4第八期 制造业企业数据平台建设最佳实践分享 马千里(数据使能资深解决方案架构师)live2022/3/10第九期 工业数字化和工业云 丘水平(华为工业软件及工业云CTO) 2022/3/17第十期 开天aPaaS赋能工业云 金伟(华为云开天aPaaS首席规划专家)live2022/3/24第十一期 制造业中小企业转型能力建设分享 龚祺(工业云项目群总监)live2022/4/7第十二期 专精特新企业数字化转型如何落地 崔裕(鼎捷软件行业发展中心总监)live2022/4/15第十三期 非标装备制造企业如何破除交付困境 张燕聪(广州盛原成科技有限公司CEO)live2022/4/21第十四期 华为终端供应商数字化生产建设方案 仲金柱(华为供应商质量发展协会会长)live2022/4/28第十五期 国产三维CAD助力制造业创新和转型升级 梅敬成(山大华天软件有限公司CTO)live2022/5/6第十六期 用IoT打开数字化之门 司世南(语祯物联创始人兼CEO)live2022/5/13更多精彩直播,请关注微信公众号“工业数字化大讲堂”↓↓
  • [线上活动] 【工业数字化大讲堂 第十六期】用IoT打开数字化之门—特邀语祯物联创始人兼CEO 司世南先生 5月13日分享!
    主题:用IoT打开数字化之门【直播嘉宾】:司世南  语祯物联创始人兼CEO【直播内容】:本期直播为您介绍物联网(IoT )发展趋势,结合案例分享IoT如何助力制造业企业数字化转型,帮助企业降本增效。5月13日(周五)16:00-17:00 点此观看直播~ 【观看直播抽好礼】直播期间可参与抽奖哦~往期精彩分享>> 【工业数字化大讲堂】第一期 华为数字化转型分享(车海平 华为公司高级副总裁、数字转型首席战略官)live2021/12/22第二期 建立制造领域数字化转型的基石(陈振华 中国机床工具工业协会、工业互联网发展负责人)live2021/12/30第三期 制造业数字化转型势道术(朱少盛 深圳赛瀚德技术有限公司CEO)live2022/1/6第四期 华为供应链数字化分享(范美华 华为供应链管理部CIO)live2022/1/13第五期 华为数字化转型实践(苏立清 华为云首席数字化转型官)live2022/2/17第六期 华为数字化转型实践(张勇强 工业解决方案高级顾问)live2022/2/24第七期 华为服务交付数字化转型之路(叶蓁蓁 华为软件云服务资深产品专家)live2022/3/4第八期 制造业企业数据平台建设最佳实践分享 马千里(数据使能资深解决方案架构师)live2022/3/10第九期 工业数字化和工业云 丘水平(华为工业软件及工业云CTO) 2022/3/17第十期 开天aPaaS赋能工业云 金伟(华为云开天aPaaS首席规划专家)live2022/3/24第十一期 制造业中小企业转型能力建设分享 龚祺(工业云项目群总监)live2022/4/7第十二期 专精特新企业数字化转型如何落地 崔裕(鼎捷软件行业发展中心总监)live2022/4/15第十三期 非标装备制造企业如何破除交付困境 张燕聪(广州盛原成科技有限公司CEO)live2022/4/21第十四期 华为终端供应商数字化生产建设方案 仲金柱(华为供应商质量发展协会会长)live2022/4/28第十五期 国产三维CAD助力制造业创新和转型升级 梅敬成(山大华天软件有限公司CTO)live2022/5/6第十六期 用IoT打开数字化之门 司世南(语祯物联创始人兼CEO)live2022/5/13更多精彩直播,请关注微信公众号“工业数字化大讲堂”↓↓
  • [技术干货] 智慧园区数字平台如何获取接口所需access-token值
    调用资产前需要先调用该接口,获取access-token值。注意事项无。基本信息接口名称token接口路径/baas/auth/v1.0/oauth2/token接口协议HTTPS接口方法POST请求参数请求参数如表1所示。表1 请求参数说明参数名称类型必选(M)/可选(O)参数位置参数含义Content-TypeStringMHeadersHTTP协议中设定的一个参数,用于标识返回的内容用什么格式去解析。取值为:“application/x-www-form-urlencoded”,表示urlencode格式。说明:当前使用的是OAuth 2.0的客户端鉴权模式获取用户access_token,由于不需要access-token认证,所以Header中只需要设置“Content-Type”为“application/x-www-form-urlencoded”即可,即需要将Body中的请求消息体参数以www-form-urlencoded格式传入。grant_typeStringMBody类型。取值:client_credentialsclient_idStringMBody客户端id,可在OAuth查看,参考创建OAuth。例如:08b357*****7af28d1client_secretStringMBody客户端密钥,可在OAuth查看,参考创建OAuth。例如:3c4e95*****4a5blocaleStringOBody语言。例如:en_US创建OAuthclient_id和client_secret获取方式如下:创建权限配置信息。管理员账号登录AppCube平台。依次选择“管理 > 用户管理 > 权限配置”,单击“新建”,新建权限配置。填写权限配置名称,如“test”,单击“保存”,创建完毕。自定义编辑步骤1创建的权限配置信息。单击选择步骤1创建的权限配置名称,进入权限配置详情页面。单击右上角编辑按钮,勾选需要调用的API对应的业务权限凭证,如图1所示信息。图1 权限配置详情创建用户。获取AppCube鉴权信息之前,先要创建用户,为用户配置OAuth权限。依次选择“管理 > 用户管理 > 用户”,进入用户列表页面。单击“新建”,输入用户信息,选择用户权限为步骤1创建的权限配置名称,如下图所示。单击“保存”,用户创建完成。获取AppCube的鉴权信息。依次选择“管理 > 系统管理 > OAuth”菜单。单击“新建”,输入名称,选择上个步骤创建的用户,并单击“保存”。系统会自动生成客户端ID和客户端密钥。每个OAuth都有特定的用途,因此需要为AppCube鉴权信息单独新建一个OAuth。单击,下载excel文件,从中获取client_id和client_secret。响应样例{ "access_token": "0000000000***********jbd0qVnm6qhfGBnaEwbMU=", "expires_in": 3600, "token_type": "Bearer" }
  • [交流吐槽] 多谢API回归
    太好了可以多40豆豆了
  • [技术干货] 从一个实际软件故障出发,谈谈企业管理软件领域内那些很难稳定重现故障的处理技巧[转载]
    链接:https://bbs.huaweicloud.com/blogs/351289前言我是做企业管理软件的程序员,有一次我遇到一个问题,一段后台作业代码,运行时偶尔会出现运行时异常(runtime exception),但这个异常不是 100% 能重现,运行十次,大概能重现2,3次。而且在系统负载很重的时候,反而一次也不能重现。更折磨人的是,如果在交互式单步调试模式下,这段代码运行完美,一点问题也没有。既然不能通过单步调试来排错,我的同事们都觉得棘手,最后让我来和这个问题死磕。后来我采用类似二分查找的方式,把可能引起这个问题的代码层层过滤,最后定位到几行有高度嫌疑的代码,我自己编写了一个测试程序来模拟后台作业执行出错时的运行环境,才找到罪魁祸首:我们的一个模型创建 API,不支持模型创建和模型删除,在一秒钟之内完成。也就是说,用户在 UI 界面正常操作时,手速再快,也不可能完成在一秒钟之内,做到先创建模型,然后马上删除的操作。但是后台作业是用代码调用 API,在系统负载不高的情况下,一秒钟之内完成创建并且删除的操作,不是一件困难的事情。这个时序问题也解释了为什么这个问题在单步调试模式下无法重现。下面是文章的正文。企业管理软件面向的是企业级用户,如果软件出现故障(bug),在某些极端情况下,可能会让企业蒙受巨大的经济损失,故而对软件开发人员在编程规范,软件测试和软件交付之前的验证等各方面都提出了更高的要求。同时,由于企业管理软件自身高度的复杂性,有些故障很难重现或者只能在运行了客户特定业务流程的生产系统上才能重现。这些都给企业管理软件分析和故障处理带来了巨大的挑战。本文从 Jerry 处理过的一个实际软件故障出发,谈谈自己对企业管理软件里一些棘手故障的处理体会。在 Jerry 看来,这些棘手故障,可以分为以下几类。企业管理软件领域内棘手故障的一些表现形式我在 SAP 成都研究院处理过很多颇让人头痛的软件故障,它们具有下列一项或几项特征。1. 需要复杂的流程才能重现例如我处理过的 SAP Business ByDesign 里一个客户发票(Customer Invoice)相关的故障。这个故障只有在每次 release 发票时才能重现。为了 release 发票,我们必须先创建一个销售订单(Sales Order),基于该订单创建 Customer Demand,然后创建捡货任务(Pick Task),生成交货单(Delivery Note),最后才能生成一张新的客户发票。这些复杂的流程往往也需要系统事先维护好对应的主数据(Master Data)和事务数据(Transaction Data)才能顺利执行。复杂的业务流程增添了故障重现的难度。2. 故障横跨企业管理软件的多个模块由于企业管理软件自身的复杂度,终端用户眼中看到的貌似简单的一个故障,背后可能横跨了软件实现的多个模块。以上述形式 1 描述的故障为例,假设软件帮助文档上描述的支持功能为:客户在销售订单界面上添加了一个新的自定义字段并维护了对应值,该值能够从销售订单,经捡货任务,交货单,最后传递到客户发票上。我们称这种字段值从多个文档间的传递称为 data flow.那么如果客户在发票页面上,看到这个字段的值为空,客户可能认为是发票模块出了故障。然而,在 data flow 的每个节点对应的模块处理,可能都是造成该故障的罪魁祸首。销售订单和客户发票属于 CRM 模块,而捡货任务和发货单则归属 SCM 的范畴。在实际开发工作中,这意味着分析该故障往往需要跨团队间协作,因为 CRM 和 SCM 模块往往分属不同的开发团队负责。3. 故障只能在客户生产系统重现在企业管理软件交付之前,必定在内部开发,测试和验证系统(validation system)进行过不同层次的测试。即便如此,由于种种客观原因,比如当应用运行在客户生产系统上,基于某些只有该客户才会用到的特定业务流程的配置时,故障才会暴露,而这些配置并没有被企业管理软件供应商的内部系统测试所涵盖到。这类故障因为只能在客户生产系统重现,在分析和定位问题时更加困难重重,尤其当重现步骤会在客户生产系统进行写操作时,通常只能联系客户相关人员,采用远程桌面+电话会议的方式,让客户相关人员进行操作,然后软件供应商的支持人员在线调试。4. 故障只能在后台作业模式下重现,在 online 模式运行时一切正常在企业管理软件领域特别是 ERP 领域,后台作业常常被用来执行一些费时的批处理工作,比如订单批量处理,报表数据分析和聚合汇总等等。后台作业模式不同于挂接了用户界面的 online 模式,给单步调试也带来了困难。5. 故障只能在软件正常运行模式时才能重现,单步调试时,软件工作一切正常当故障出现这种特征时,实际给支持人员传递了一个信号:该故障可能与程序特定的执行时序相关。因为程序正常运行,与处于单步调试模式下运行,执行时序显然不同,比如在调试器单步调试时,可能会破坏多线程程序正常的执行时序。因为缺少了调试器这一强有力的武器,分析该类故障,需要支持人员具有更强的理论分析能力和问题抽象能力。由于篇幅限制,本文仅举一个实际例子,对上述第五类故障的分析处理流程做一个分享。Jerry 曾经负责过 SAP CRM IBASE(Installed Base) 模块的维护工作。IBASE 是一个抽象模型,用于描述已在客户位置安装的资源对象,例如设备、机器,服务或软件。IBASE 模型以树形结构,描述了这些对象的层级结构和它们的各个组件,是服务模块的参考基础。有一天,我收到一个故障报告,另一个团队的同事,使用我所在团队负责的 IBASE API,在同一会话过程内创建 IBASE 组件,修改,随后删除,然后保存,会遇到运行时错误(Runtime Error).在故障描述里提到的运行时错误的截图如上图所示。这位同事发现,这个错误只能在后台作业模式下重现,并且不一定每次都能够重现。该故障也无法在单步调试模式下重现。并不总是能够重现 != 不能重现。为了分析这个问题,我得先找到能够稳定重现的办法。因为该故障对单步调试大法免疫,我只能另想他法。逐字逐句阅读故障报告里的描述,发生故障之前的操作流程为:(1) 创建 IBASE(2) 修改 IBASE(3) 删除 IBASE(4) 保存事务。出现运行时错误。因为我就是 IBASE 模块的负责人,所以我三下五除二就写好了一个不到 200 行的程序,在程序里依次调用 IBASE 的创建,修改和删除 API,再保存事务。程序源代码如下:执行这个报表,遇到了期望中的运行时错误。这是一个好兆头,因为我现在找到了稳定重现问题的办法。下一步,我需要缩小问题的范围,找出我这 200 行代码里,到底哪一行代码的执行,引起了运行时错误。Jerry 喜欢称自己开发的这种专门用于分析故障,重现错误的程序,为“脚手架程序”或者“故障触发器”。因为这 200 行代码是我自己编写的,所以我可以任意修改。首先把所有代码全部注释掉,只留下 IBASE 创建 API 的调用。执行程序,一切正常。再解除 IBASE 修改 API 调用代码的注释,让其参与到程序执行中,一切正常。再反注释 IBASE 删除 API 调用代码,执行程序,出现了运行时错误!由此说明,这个运行时错误和 IBASE 删除的场景相关。回到故障提交报告里的运行时错误截图:第 103 行抛出了一个类型为 X 的错误,因为调用函数 CRM_IBASE_COMP_GET_DETAIL, 并没有读取到通过输入参数 i_date 和 i_time 指定的时间戳对应的 IBASE 数据,因此程序决定通过抛出错误的方式来终止执行。通过运行时错误的上下文调用栈,我找到了 CRM_IBASE_COMP_GET_DETAIL API 没有返回任何 IBASE 数据的原因:下图第 53 行高亮代码的 CHECK 语句,检查当前传入的时间戳(默认为 IBASE 创建时的时间戳)是否小于待读取 IBASE 抬头的 valto(即 valid to,指 IBASE 有效截止日期的时间戳)字段。如果小于,则顺序执行 CHECK 下一条即 54 行。如果大于或等于,则退出数据读取逻辑所在的循环体。在后台作业运行模式,以及我的脚手架程序执行时,第 53 行时间戳判断条件没有满足,因此退出了循环,导致 CRM_IBASE_COMP_GET_DETAIL 读取失败,所以引发了故障。要想满足 53 行的判断条件,只有两种可能:当前时间戳 > IBASE valto 字段值当前时间戳 = IBASE valto 字段值需要强调的是,ABAP 编程语言里的时间戳字段,精确到秒,比如 20211024102424 代表 2021年10月24日10点24分24秒。虽然我的脚手架应用在单步调试模式下也无法重现故障,但是直接执行可以重现。因此,执行执行脚手架应用,在运行时故障页面点击工具栏的 Debugger 按钮,能弹出调试器,查看应用程序抛出运行时错误的各种信息:这一回,在调试器里,所有的谜题都揭晓了:当前时间戳 = IBASE valto 字段值,因此导致 API CRM_IBASE_COMP_GET_DETAIL 读取失败,抛出运行时错误。在调用 IBASE 创建 API 时,会把待创建的 IBASE 抬头的 valfr 字段,赋以系统的当前时间戳。在调用 IBASE 删除 API 时,会把该待删除 IBASE 抬头的 valto 字段,赋以系统的当前时间戳。为什么在单步调试模式下,无法重现这个错误呢?我们来看一张简单的时序图。横轴代表时间戳。t3 代表代码 53 行判断语句里的 <ibinadm>-valto 字段值, t1 代表代码 53 行判断语句里的 lv_timestamp 字段值。在单步调试模式下,假设我们从 IBASE 创建 API 开始依次单步执行,则由于按键手速原因,t3 必定大于 t1.而在后台作业模式以及脚手架程序正常运行情况下,如果 IBASE 创建,修改和删除的 API 执行得足够快速,能够在一秒钟之内完成,则 t3 与 t1 之差小于 1 秒,故 CHECK 语句执行失败,直接返回。换言之,这个故障提交时,CRM IBASE API 的开发人员,并没有考虑到 IBASE 的创建和删除会在同一秒之内完成的场景。毕竟正常情况下,客户不可能在 1 秒钟之内,在 UI 完成 IBASE 先创建再删除的操作。这种场景只可能在客户使用 IBASE API 进行一些二次开发场景下才有可能出现。当然,最后这个问题,也绝非仅仅是把 53 行 CHECK 语句的 < 符号,改成小于等于操作那么简单。我们仔细评估了改动可能带来的其他副作用,并和提交该故障的团队开发人员进行了讨论,最后采取了其他的方式来避免这个故障的发生。回到这个故障分析过程本身,最开始接到故障时,因为单步调试无法重现,因此Jerry很是一筹莫展了一阵,后来想到编写脚手架程序来稳定重现该故障,这一步是问题分析的突破口。有了脚手架程序之后,先注释掉所有的 API 调用,再逐步开放 IBASE 创建,修改和删除的代码,最终把问题范围缩小到 IBASE 删除过程。通过脚手架应用的直接执行触发的运行时错误,利用调试器查看程序抛出错误时的变量值,将问题锁定到时间戳的处理逻辑上,进而找出根源。这一分析步骤有点像上世纪末本世纪初电脑 DIY 发烧友们遇到组装机无法启动时的排查措施。当组装机无法启动时,只保留电源,主板和 CPU,尝试启动,如果成功,再逐一添加显卡,硬盘等其他设备。当新添加的设备导致系统重新回到无法启动状态,说明该设备有问题。当时发烧友们把这种方式称为“最小系统法”。而整个分析过程的重中之重,就是把故障报告中无法稳定重现故障的后台作业里执行的内容,抽象成一个不到 200 行的脚手架程序。《编程珠玑》第五章曾经分享过一个关于故障调试的有趣故事:IBM 研究中心一位程序员,新安装了一台工作站,发现一个故障:他只能采取坐着的姿势登录系统;一旦站起来,就无法登陆系统了。大家知道这个故障最后怎么定位的吗?去读读原书吧!希望本文能给大家在企业管理软件领域内的故障排除方法带来一些启发,感谢阅读。
  • [技术干货] 智慧园区应用工程构建规范
    应用工程指使用AppCube平台开发的App和BO,应用工程规范包括App、BO的命名规范、目录结构规范,工程配置规范和工程服务规范。App是一个可复用的独立业务应用。例如,智慧园区解决方案中的综合安防应用。App的交付件包括:接口Interface:对外暴露的接口服务,Restful API接口可以直接被前台或第三方系统调用。事件Event:对外暴露、共外部订阅的事件。菜单Menu:面向租户业务使用人员,提供配置操作能力。BO是一个可复用的领域服务,是最小粒度的复用单元。例如,为了使业务应用开发人员高效地实现与物联设备的交互,对物联设备进行业务抽象,封装为设备BO。BO是资产封装的规范,可以基于平台元数据能力实现,也可以用其他方式实现。BO是有边界的。BO与BO之间不能共享数据。BO对外开放数据视图、接口服务、配置机制、事件等来进行交互,内部实现对外闭源不可见。BO的数据视图以聚合根的形式开放供外部查询。BO可以同时开放多个聚合根。BO与BO之间允许有接口调用的引用关系,但设计时应尽量避免BO与BO之间的直接交互,并完全禁止双向依赖。BO中可以包含UI内容如Layout、Widget,但仅作为参考实现。BO应尽量利用配置能力来适配不同的业务场景。配置无法满足时才考虑对BO做Addon扩展。扩展不能影响BO的向前兼容性。BO被打包在App或Addon中,租户通过安装App或Addon来获取BO。本文中字符数均以英文字符作为计数单位,一个汉字算3个字符。开发态的名称定义使用英文,展现给租户使用的配置参数显示则使用中文。BO的交付件包括:接口Interface:BO对外暴露的接口服务,一类是可以直接被前台或第三方系统调用的Restful API接口,一类是只能在开发平台上通过编排来调用的SDK API。事件Event:对外暴露、共外部订阅的事件。配置Configuration:面向开发人员或IT管理人员的,提供的配置能力。其中,配置菜单是BO提供的配置界面,选项列表是BO内部使用的字典项,系统参数是BO内部需要读取的控制参数。
  • [交流吐槽] API还没弄好吗?今天偷偷上线了一下又立马下线了
    刚做了2个任务,第三个怎么都完不成,再刷新就又下线了
  • [技术干货] Entity Framework Core 创建并配置模型
    Entity Framework Core 使用一组约定来根据实体类的形状生成模型。 可指定其他配置以补充和/或替代约定的内容。本文介绍可应用于面向任何数据存储的模型的配置,以及面向任意关系数据库时可应用的配置。 提供程序还可支持特定于具体数据存储的配置。 有关提供程序特定配置的文档,请参阅数据库提供程序部分。使用 fluent API 配置模型可在派生上下文中替代 OnModelCreating 方法,并使用 ModelBuilder API 来配置模型。 此配置方法最为有效,并可在不修改实体类的情况下指定配置。 Fluent API 配置具有最高优先级,并将替代约定和数据注释。分组配置为了减小 OnModelCreating 方法的大小,可以将实体类型的所有配置提取到实现 IEntityTypeConfiguration<TEntity> 的单独类中。使用数据注释来配置模型也可将特性(称为数据注释)应用于类和属性。 数据注释会替代约定,但会被 Fluent API 配置替代。
  • [分享交流] 【工业数字化大讲堂 第十五期】国产三维CAD助力制造业创新和转型升级,特邀山大华天软件有限公司CTO 梅敬成博士分享!
    主题:国产三维CAD助力制造业创新和转型升级【直播嘉宾】:梅敬成博士  山大华天软件有限公司CTO【直播内容】:1.在三维CAD软件市场被国外软件厂商垄断,重大装备制造、军工等关键工业领域,存在封锁和信息安全等诸多问题的背景下,国产三维CAD如何克服阻难的发展历程以及面向未来的发展趋势2.结合行业案例分享国产三维CAD如何助力制造业创新和转型升级,大幅提升提升企业的设计效率和设计质量。5月6日(周五)16:00-17:00,点此观看直播~直播期间可参与抽奖哦~往期精彩分享>> 【工业数字化大讲堂】第一期 华为数字化转型分享(车海平 华为公司高级副总裁、数字转型首席战略官)live第二期 建立制造领域数字化转型的基石(陈振华 中国机床工具工业协会、工业互联网发展负责人)live第三期 制造业数字化转型势道术(朱少盛 深圳赛瀚德技术有限公司CEO)live第四期 华为供应链数字化分享(范美华 华为供应链管理部CIO)live第五期 华为数字化转型实践(苏立清 华为云首席数字化转型官)live第六期 华为数字化转型实践(张勇强 工业解决方案高级顾问)live第七期 华为服务交付数字化转型之路(叶蓁蓁 华为软件云服务资深产品专家)live第八期 制造业企业数据平台建设最佳实践分享 马千里(数据使能资深解决方案架构师)live第九期 工业数字化和工业云 丘水平(华为工业软件及工业云CTO)第十期 开天aPaaS赋能工业云 金伟(华为云开天aPaaS首席规划专家)live第十一期 制造业中小企业转型能力建设分享 龚祺(工业云项目群总监)live第十二期 专精特新企业数字化转型如何落地 崔裕(鼎捷软件行业发展中心总监)live第十三期 非标装备制造企业如何破除交付困境 张燕聪(广州盛原成科技有限公司CEO)live第十四期 华为终端供应商数字化生产建设方案 仲金柱(华为供应商质量发展协会会长)live第十五期 国产三维CAD助力制造业创新和转型升级 梅敬成(山大华天软件有限公司CTO)live更多精彩直播,请关注微信公众号“工业数字化大讲堂”↓↓
  • [线上活动] 【工业数字化大讲堂 第十五期】国产三维CAD助力制造业创新和转型升级,特邀山大华天软件有限公司CTO 梅敬成博士分享!
    主题:国产三维CAD助力制造业创新和转型升级【直播嘉宾】:梅敬成博士  山大华天软件有限公司CTO【直播内容】:1.在三维CAD软件市场被国外软件厂商垄断,重大装备制造、军工等关键工业领域,存在封锁和信息安全等诸多问题的背景下,国产三维CAD如何克服阻难的发展历程以及面向未来的发展趋势2.结合行业案例分享国产三维CAD如何助力制造业创新和转型升级,大幅提升提升企业的设计效率和设计质量。5月6日(周五)16:00-17:00,点此观看直播~直播期间可参与抽奖哦~往期精彩分享>> 【工业数字化大讲堂】第一期 华为数字化转型分享(车海平 华为公司高级副总裁、数字转型首席战略官)live第二期 建立制造领域数字化转型的基石(陈振华 中国机床工具工业协会、工业互联网发展负责人)live第三期 制造业数字化转型势道术(朱少盛 深圳赛瀚德技术有限公司CEO)live第四期 华为供应链数字化分享(范美华 华为供应链管理部CIO)live第五期 华为数字化转型实践(苏立清 华为云首席数字化转型官)live第六期 华为数字化转型实践(张勇强 工业解决方案高级顾问)live第七期 华为服务交付数字化转型之路(叶蓁蓁 华为软件云服务资深产品专家)live第八期 制造业企业数据平台建设最佳实践分享 马千里(数据使能资深解决方案架构师)live第九期 工业数字化和工业云 丘水平(华为工业软件及工业云CTO)第十期 开天aPaaS赋能工业云 金伟(华为云开天aPaaS首席规划专家)live第十一期 制造业中小企业转型能力建设分享 龚祺(工业云项目群总监)live第十二期 专精特新企业数字化转型如何落地 崔裕(鼎捷软件行业发展中心总监)live第十三期 非标装备制造企业如何破除交付困境 张燕聪(广州盛原成科技有限公司CEO)live第十四期 华为终端供应商数字化生产建设方案 仲金柱(华为供应商质量发展协会会长)live第十五期 国产三维CAD助力制造业创新和转型升级 梅敬成(山大华天软件有限公司CTO)live更多精彩直播,请关注微信公众号“工业数字化大讲堂”↓↓