统一拖拽图文只收到一半UDMF 多 Entry 的类型协商、校验与失败回滚从浏览器或富文本页面拖一段“文字 两张图片”到应用文字出现了第二张图却因格式不支持而失败用户再次拖入后文字又重复一份。官方统一拖拽指南明确指出图文混排应按 UDMF 多 Entry 处理。工程上最容易漏掉的是多条记录属于一次用户意图不能把每条记录当成互不相关的成功。验证边界本文依据华为开发者官网截至 2026-09-25 可访问的资料整理。文中的状态机、去重器和坐标计算已经在 Node.js 宿主环境执行断言当前本机仍是 API 24 SDK且没有连接 HDC 真机因此不把这些断言写成 API 26 编译或真机实测。涉及窗口、拖拽和跨设备能力的正式交付仍需在 API 26 SDK、模拟器或对应真机上补齐接口编译、交互录像与日志证据。先把失败链画出来只读取第一条UnifiedRecord会静默丢数据边读边写业务库则在中途失败时留下半成品。更隐蔽的问题是来源应用可能同时提供 HTML、纯文本和图片的多个表示目标端如果不做类型协商会把同一内容导入两遍。复现时要分别测试完整支持、部分不支持、同一内容多表示和中途取消。协议必须携带什么先扫描全部 Entry按目标能力选择每个逻辑内容的最佳表示再生成导入计划。计划阶段只校验类型、大小、数量和权限不写业务库所有必需项通过后才一次提交。可选项失败可以降级并记录必需项失败则整体回滚。用 dragSessionId 与内容摘要建立幂等键防止用户重试造成重复。type RecordKindtext|html|image; interface Entry { logicalId:string; kind:RecordKind; bytes:number; required:boolean } export function choose(entries:Entry[], supported:SetRecordKind): Entry[] { const rank:RecordKind[][html,image,text]; const groupsMap.groupBy(entries,ee.logicalId); return [...groups.values()].map(grouprank.map(kgroup.find(ee.kindksupported.has(k))).find(Boolean)) .filter((x):x is Entry!!x); } export function canCommit(all:Entry[], chosen:Entry[]):boolean { const idsnew Set(chosen.map(xx.logicalId)); return all.filter(xx.required).every(xids.has(x.logicalId)); }案例一HTML 与纯文本代表同一段说明目标端支持富文本时选择 HTML纯文本只作为降级表示不应再创建第二段。导入计划保存 logicalId、选中类型和原始来源用户撤销时按一次事务删除而不是逐条猜哪些内容来自本次拖拽。案例二两张图片中一张超过大小上限若图片都被标记为必需项计划阶段直接拒绝并列出超限文件不先插入文字若超限图片是可选附件可以提交文字和第一张图但必须给出明确的部分导入提示并把结果写入同一个 session 记录。与常见方案对比观察项容易写错更可靠的处理记录读取只取第一条 Record先扫描全部 Entry类型选择支持什么就全导入同一 logicalId 只选最佳表示写入时机边解析边写数据库计划通过后一次提交重试处理用户重拖就再插入sessionId 内容摘要幂等多 Entry 拖拽本质上是小型数据导入协议。计划与提交分离后应用可以提前显示将导入哪些内容、哪些会降级失败也不会污染业务数据。这套封装还能复用到剪贴板粘贴和文件批量导入。上线前协议检查扫描全部 Entry 并识别多表示。必需项与可选项策略明确。大小、数量和类型在提交前校验。一次拖拽只有一个事务与幂等键。部分成功必须有可见提示和可撤销记录。官方资料与适用范围统一拖拽多设备通用适配指南图文拖拽不是“能拿到几条就存几条”。先协商表示、再验证完整性、最后一次提交用户的一个动作才会得到一个可解释的结果。
企业数字化 ERP 产品动态
相关推荐
植物大战僵尸E版支线v1.97安装配置与实战避坑指南 植物大战僵尸这个IP的生命力确实离谱,原版通关十遍之后,很多人开始往“改版”“支线”“融合版”这些方向折腾。E版支线就是其中一个流传很广的改版分支,它把原版的关卡结构做了重新编排,加入了新的僵尸波次、新的植物机制和一批自… · 2026/9/26 4:18:36
COMSOL仿真表面等离子共振:从模型搭建到共振角提取全流程 1. 项目背景:从一束反射光里“挖”出折射率做光学仿真的人,尤其是碰过生物传感、薄膜光学或者气体检测的朋友,对SPR这个词一定不陌生。表面等离子共振(Surface Plasmon Resonance)说白了就是金属薄膜表面自由电子在光波… · 2026/9/26 4:18:30
智能表格:普通人的外置大脑,轻松管理生活与工作 把“外置大脑”这个词挂在嘴边的人不少,但真正把生活和工作整理得井井有条的人,真不多。我做过项目、带过团队,也亲历过被琐事追着跑的阶段,最后发现一个很朴素的道理:普通人最需要的不是更聪明的头脑,而是… · 2026/9/26 4:18:24
彻底清理Edge主页劫持:2345导航与注册表修复指南 1. 主页劫持这件事,比你想的更普遍Edge浏览器主页被2345导航劫持,大概是国内Windows用户遇到频率最高的浏览器异常之一。我身边不少朋友、同事,甚至一些做开发的朋友都中过招——打开Edge,首页不是自己设置的页面,而是… · 2026/9/26 5:07:52
Hyper-V虚拟机脱域密码遗忘?离线救援与重置实战指南 接手过不少Hyper-V虚拟机脱域的求助,情况几乎都是一个模子刻出来的:虚拟机从域环境里脱离,域账号怎么输都是“用户名或密码错误”;本地管理员密码又没人记得,登录界面成了真正的死胡同。更气人的是,这时候重… · 2026/9/26 5:07:52
如何挑选3DGS预设:Spirula Studio的3dgs/360-camera/in-the-wild场景指南 如何挑选3DGS预设:Spirula Studio的3dgs/360-camera/in-the-wild场景指南 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-s… · 2026/9/26 5:07:52
Git Worktree实战:用影分身实现多AI并行开发 过去这一年,我几乎每天都要和 AI 编程助手打交道,尤其是同时推进好几个需求的时候。手头一个项目刚用 AI 补完接口逻辑,另一个分支又等着 AI 改前端样式,切来切去没几次,工作区里一堆未提交的改动就开始互相打架&#… · 2026/9/26 5:07:52
Git Worktree驱动的多AI并行开发实战指南 你已经让 AI 帮你写了不少代码,大概率也经历过这个场景:一个功能改到一半,模型帮你生成了大半个模块,另一个需求又冒出来让你马上切过去。在传统工作流里,这一切意味着 stash、切换分支、重新构建、找回上下文… · 2026/9/26 5:07:52
BERT+BILSTM+CRF中文NER源码实战:从训练到调优避坑指南 简介:这份资源面向计算机相关专业正在做课程设计或期末大作业的学生,以及需要中文命名实体识别项目实战练习的学习者,提供了一套基于BERTBILSTMCRF的完整Python实现方案。项目由大三学生完成并经导师指导认可,评审得分99分&#x… · 2026/9/26 5:07:46
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46