feat(aia): Complete AIA V2.0 with universal streaming capabilities

Major Changes:
- Add StreamingService with OpenAI Compatible format
- Upgrade Chat component V2 with Ant Design X integration
- Implement AIA module with 12 intelligent agents
- Update API routes to unified /api/v1 prefix
- Update system documentation

Backend (~1300 lines):
- common/streaming: OpenAI Compatible adapter
- modules/aia: 12 agents, conversation service, streaming integration
- Update route versions (RVW, PKB to v1)

Frontend (~3500 lines):
- modules/aia: AgentHub + ChatWorkspace (100% prototype restoration)
- shared/Chat: AIStreamChat, ThinkingBlock, useAIStream Hook
- Update API endpoints to v1

Documentation:
- AIA module status guide
- Universal capabilities catalog
- System overview updates
- All module documentation sync

Tested: Stream response verified, authentication working
Status: AIA V2.0 core completed (85%)
This commit is contained in:
2026-01-14 19:15:01 +08:00
parent 3d35e9c58b
commit 1b53ab9d52
386 changed files with 52096 additions and 65238 deletions

View File

@@ -1,63 +1,52 @@
# **REDCap二次开发深度研究报告:架构体系、移动端交互与最佳实践全景解析**
# **REDCap鈭峕活撘<EFBFBD><EFBFBD>烐楛摨衣<EFBFBD>蝛嗆𥁒<EFBFBD>𠺪<EFBFBD><EFBFBD><EFBFBD>雿梶頂<EFBFBD><EFBFBD><EFBFBD>函垢鈭支<EFBFBD>銝擧<EFBFBD>雿喳<EFBFBD>頝萄<EFBFBD><EFBFBD>航圾<EFBFBD>?*
## **1\. 执行摘要与架构背景**
## **1\. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝擧沲<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?*
Research Electronic Data Capture (REDCap) 已经从一个单一的数据收集工具演变为一个能够支持复杂临床试验、运营工作流和纵向研究的强大生态系统。虽然范德堡大学Vanderbilt University开发的核心应用程序提供了一套完善的调查管理和数据录入工具但对于企业级研究和复杂临床数据管理而言REDCap真正的潜力在于其“二次开发”能力。这一术语涵盖了通过外部模块External Module, EM框架、应用程序编程接口API、数据录入触发器DET以及涉及REDCap移动应用程序和MyCap的移动集成策略对REDCap进行的程序化扩展1。
本报告旨在提供关于REDCap二次开发的详尽技术分析。它不仅探讨了架构先决条件、从旧版插件Plugin向现代外部模块框架的过渡、安全编码实践还深入剖析了移动端同步的复杂机制。此外报告详细列出了特定的源代码模式分析了常见的陷阱即开发中的“坑”并提供了在定制功能时维护系统完整性的最佳实践。
### **1.1 联盟模式与源码访问权限的特殊性**
与传统的开源软件不同REDCap在一种独特的管理模式下运行。它对非营利组织免费提供但并非公共领域的开源软件。为了获得二次开发所需的源代码组织必须通过与范德堡大学签署最终用户许可协议EULA加入REDCap联盟3。
这种区别对开发者至关重要。源代码无法在GitHub等公共存储库中以可运行的格式获取严格来说核心代码库是联盟的专有财产。然而扩展机制——特别是外部模块框架——是公开文档化的且社区通过REDCap Repo分享了数百个模块1。为了进行深度的二次开发开发者通常需要其所在机构的REDCap管理员授予本地服务器访问权限以便检查核心PHP文件和进行调试6。
Research Electronic Data Capture (REDCap) 撌脩<EFBFBD>隞𦒘<EFBFBD>銝芸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>格𤣰<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䀝蛹銝<EFBFBD>銝芾<EFBFBD><EFBFBD>𣈲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>葩摨𡃏<EFBFBD>撉䎚<EFBFBD><EFBFBD><EFBFBD><EFBFBD>亙極雿𨀣<EFBFBD><EFBFBD>𣬚熊<EFBFBD>𤑳<EFBFBD>蝛嗥<EFBFBD>撘箏之<EFBFBD><EFBFBD><EFBFBD><EFBFBD>頂蝏麄<EFBFBD><EFBFBD><EFBFBD><EFBFBD>敺瑕嵗憭批郎嚗Āanderbilt University嚗匧<E59A97><E58CA7>𤑳<EFBFBD><F0A491B3><EFBFBD>摨𠉛鍂蝔见<E89D94><E8A781>𣂷<EFBFBD><EFBFBD><E988AD>憟堒<E6869F><E5A092><EFBFBD><EFBFBD><EFBFBD>䰻蝞∠<E89D9E><E288A0>峕㺭<E5B395><EFBFBD><E6A180>亙極<E4BA99><EFBFBD><EFBFBD>笆鈭𦒘<E988AD>銝𡁶漣<F0A181B6>𠉛弦<F0A0899B><E5BCA6><EFBFBD><EFBFBD><EFBFBD>葩摨𦠜㺭<F0A6A09C>桃恣<E6A183><E681A3><EFBFBD><EFBFBD>嚗朙EDCap<61><70><EFBFBD><E8BFA4><EFBFBD><EFBFBD>𥕦銁鈭𤾸<E988AD><F0A4BEB8><EFBFBD><E79488><E288AA><EFBFBD><EFBFBD><E882BD><EFBFBD><E49C98><EFBFBD><EFBFBD><E98A9D>航祗瘨萇<E798A8><EFBFBD><E988AD><EFBFBD>憭㚚<E686AD><E79285>嚗𠄌xternal Module, EM嚗㗇<E59A97><E39787><EFBFBD><E5979A><EFBFBD><EFBFBD><EFBFBD>摨讐<E691A8>蝔𧢲𦻖<F0A7A2B2><F0A6BB96><EFBFBD>API嚗剹<E59A97><E589B9><EFBFBD><EFBFBD><E6A180>亥圻<E4BAA5>穃膥嚗㇄ET嚗劐誑<E58A90>𦠜<EFBFBD><F0A6A09C>䟕EDCap蝘餃𢆡摨𠉛鍂蝔见<E89D94><E8A781>愢yCap<61><70><EFBFBD><EFBFBD><E588B8><EFBFBD><E99E9F>亙笆REDCap餈𥡝<E9A488><F0A5A19D><EFBFBD><EFBFBD>摨誩<E691A8><E8AAA9><EFBFBD>1<EFBFBD>?
<EFBFBD>祆𥁒<EFBFBD>𦠜秄<EFBFBD><EFBFBD>靘𥕦<EFBFBD>鈭竃EDCap鈭峕活撘<EFBFBD><EFBFBD>𤑳<EFBFBD>霂血偷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝滢<EFBFBD><EFBFBD>悄鈭<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>單辺隞嗚<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>雴辣嚗㇊lugin嚗匧<EFBFBD><EFBFBD>唬誨憭㚚<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>頝蛛<EFBFBD>餈䀹楛<EFBFBD><EFBFBD><EFBFBD>𣂷<EFBFBD>蝘餃𢆡蝡臬<EFBFBD>甇亦<EFBFBD>憭齿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>迨憭吔<EFBFBD><EFBFBD><EFBFBD>霂衣<EFBFBD><EFBFBD>堒枂鈭<EFBFBD>鸌摰𡁶<EFBFBD>皞𣂷誨<EFBFBD><EFBFBD>芋撘𧶏<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>虜閫<EFBFBD><EFBFBD><EFBFBD>琿𩐠嚗<EFBFBD>朖撘<EFBFBD><EFBFBD>睲葉<EFBFBD><EFBFBD><EFBFBD>𨅯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣂷<EFBFBD><EFBFBD>銁摰𡁜<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嗥輕<EFBFBD>斤頂蝏笔<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>雿喳<EFBFBD>頝萸<EFBFBD>?
### **1.1 <20>𠉛<EFBFBD><E79285>銝擧<E98A9D><E693A7><EFBFBD><EFBFBD><EFBFBD><E6A0BC><EFBFBD><E99E9F><EFBFBD><E5AF9E>?*
銝𦒘<EFBFBD>蝏毺<EFBFBD><EFBFBD>皞鞱蔓隞嗡<EFBFBD><EFBFBD><EFBFBD>REDCap<EFBFBD><EFBFBD>蝘滨𡠺<EFBFBD><EFBFBD>蝞∠<EFBFBD><EFBFBD>銝贝<EFBFBD>銵䎚<EFBFBD><EFBFBD><EFBFBD>撖寥<EFBFBD><EFBFBD>亙⏚蝏<EFBFBD><EFBFBD><EFBFBD>滩晶<EFBFBD>𣂷<EFBFBD>嚗䔶<EFBFBD>撟園<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>皞鞱蔓隞嗚<EFBFBD><EFBFBD>蛹鈭<EFBFBD>繮敺𦯀<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗𣬚<EFBFBD><EFBFBD><EFBFBD>憿駁<EFBFBD><EFBFBD>銝舘<EFBFBD>敺瑕嵗憭批郎蝑曄蔡<EFBFBD><EFBFBD><EFBFBD><EFBFBD>瑁捂<EFBFBD><EFBFBD>霈殷<EFBFBD>EULA嚗匧<EFBFBD><EFBFBD>充EDCap<EFBFBD>𠉛<EFBFBD>3<EFBFBD>?
餈嗵<EFBFBD><EFBFBD><EFBFBD>撖孵<EFBFBD><EFBFBD>𤏸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>沁itHub蝑匧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝凋誑<EFBFBD><EFBFBD>銵𣬚<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗𥕢艇<EFBFBD>潭䔉霂湛<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>摨𤘪糓<EFBFBD>𠉛<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㕑揣鈭扼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𠉛鸌<EFBFBD>急糓憭㚚<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>娍糓<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣇉<EFBFBD>嚗䔶<EFBFBD>蝷曉躹<EFBFBD><EFBFBD>REDCap Repo<70><6F>澈鈭<E6BE88><EFBFBD>曆葵璅<E79285>1<EFBFBD><31>蛹鈭<E89BB9><E988AD>銵峕楛摨衣<E691A8>鈭峕活撘<E6B4BB><E69298>𡢅<EFBFBD><EFBFBD><E69298>𤏸<EFBFBD><F0A48FB8><EFBFBD>𡁜虜<F0A1819C><E8999C><EFBFBD><E996AC><EFBFBD><EFBFBD><EFBFBD>冽㦤<E586BD><E3A6A4><EFBFBD>REDCap蝞∠<E89D9E><E288A0><EFBFBD><EFBFBD>𧋦<EFBFBD><EFBFBD><E594B3>膥霈輸䔮<E8BCB8><E494AE><EFBFBD>嚗䔶誑靘踵<E99D98><E8B8B5>交瓲敹<E793B2>HP<48><50><EFBFBD><EFBFBD>銵諹<E98AB5>霂?<3F>?
### **1.2 <20><><EFBFBD>舀沲<E88880><E6B2B2><EFBFBD>LAMP<4D><50><EFBFBD>EAV璅<E79285>**
鈭峕活撘<EFBFBD><EFBFBD>𤏸<EFBFBD><EFBFBD>笆REDCap<EFBFBD><EFBFBD><EFBFBD><EFBFBD>抅蝖<EFBFBD>霈暹鴌<EFBFBD>㗇楛<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EDCap<EFBFBD><EFBFBD><EFBFBD>汪AMP<EFBFBD><EFBFBD><EFBFBD>銝𠺪<EFBFBD>
* **Linux/Windows** 托管应用程序的操作系统。
* **Apache/IIS/Nginx** 处理HTTP请求的Web服务器。
* **MySQL/MariaDB** 关系型数据库管理系统。
* **PHP** 用于核心逻辑和扩展的服务器端脚本语言。
REDCap被描述为“轻量级”通常需要Web服务器和独立的数据库服务器。对于标准使用Web服务器和数据库各分配10GB的存储空间通常足以支持第一年的高强度使用7。然而二次开发往往会带来更高的资源需求。执行复杂查询或通过API处理大数据的自定义模块如果未经过优化可能会给数据库带来巨大压力。
数据库模式主要采用实体-属性-值Entity-Attribute-Value, EAV模型特别是redcap\_data表它以狭窄的纵向格式record\_id, project\_id, field\_name, value存储绝大部分项目数据。这一架构决策允许在不更改数据库模式的情况下流畅地创建元数据驱动的表单但这显著增加了二次开发中直接SQL查询的复杂性2。开发者必须小心地浏览此模式以避免性能下降。
* **Linux/Windows嚗?* <20>条恣摨𠉛鍂蝔见<E89D94><E8A781><EFBFBD><EFBFBD>雿𦦵頂蝏麄<E89D8F>?
* **Apache/IIS/Nginx嚗?* 憭<><E686AD>HTTP霂瑟<E99C82><E7919F><EFBFBD>eb<65>滚𦛚<E6BB9A><EFBFBD>?
* **MySQL/MariaDB嚗?* <20>喟頂<E5969F>𧢲㺭<F0A7A2B2><EFBFBD>蝞∠<E89D9E>蝟餌<E89D9F><E9A48C>?
* **PHP嚗?* <20><EFBFBD><E585B6><EFBFBD><E8A9A8><EFBFBD><E9A489><EFBFBD>撅閧<E69285><E996A7>滚𦛚<E6BB9A>函垢<E587BD>𡁏𧋦霂剛<E99C82><E5899B>?
REDCap鋡急<EFBFBD>餈唬蛹<EFBFBD>𡏭蝠<EFBFBD>讐漣<EFBFBD><EFBFBD><EFBFBD>𡁜虜<EFBFBD><EFBFBD><EFBFBD>eb<EFBFBD>滚𦛚<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>滚𦛚<EFBFBD><EFBFBD><EFBFBD>笆鈭擧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Web<EFBFBD>滚𦛚<EFBFBD><EFBFBD><EFBFBD>唳旿摨枏<EFBFBD><EFBFBD><EFBFBD><EFBFBD>10GB<EFBFBD><EFBFBD><EFBFBD><EFBFBD>函征<EFBFBD><EFBFBD>𡁜虜頞喃誑<EFBFBD><EFBFBD>蝚砌<EFBFBD>撟渡<EFBFBD>擃睃撩摨虫蝙<EFBFBD>?<3F><><EFBFBD><EFBFBD><EFBFBD>鈭峕活撘<E6B4BB><E69298><EFBFBD><EFBFBD>隡𡁜蒂<F0A1819C>交凒擃条<E69383><EFBFBD><E99F8F><EFBFBD><EFBFBD><EFBFBD><E79899><EFBFBD><EFBFBD><EFBFBD><E98AB5><EFBFBD><EFBFBD>䰻霂<E99C82><EFBCB8><EFBFBD>API憭<49><E686AD>憭扳㺭<E689B3><EFBFBD><E6A183><EFBFBD>銋㗇芋<E39787><EFBFBD><E5A092>𨀣𧊋蝏讛<E89D8F>隡睃<E99AA1><EFBFBD><EFBFBD><EFBFBD>蝏蹱㺭<E8B9B1><EFBFBD>撣行䔉撌典之<E585B8><EFBFBD><E8A781>?
<EFBFBD>唳旿摨𤘪芋撘譍蜓閬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>雿?撅墧<E69285>?<3F><EFBFBD>Entity-Attribute-Value, EAV嚗㗇芋<E39787><EFBFBD><E9A1B5><EFBFBD><E5ADB5>盍edcap\_data銵剁<E98AB5><EFBFBD><EFBFBD><EFBFBD><E58994><EFBFBD><EFBFBD>烐聢撘𧶏<E69298>record\_id, project\_id, field\_name, value嚗匧<E59A97><E58CA7><EFBFBD>憭折<E686AD><E68A98><EFBFBD><EFBFBD>格㺭<E6A0BC><EFBFBD><E69FB4><EFBFBD><EFBFBD><E98A9D><EFBFBD><E59786><EFBFBD><E5969F><EFBFBD><EFBFBD><EFBFBD><E585B6>湔㺿<E6B994>唳旿摨𤘪芋撘讐<E69298><E8AE90><EFBFBD><EFBFBD>銝𧢲<E98A9D><F0A7A2B2><EFBFBD>𧑐<EFBFBD>𥕦遣<F0A595A6><E981A3><EFBFBD>桅店<E6A185><EFBFBD>銵典<E98AB5>嚗䔶<E59A97>餈蹱遬<E8B9B1><EFBFBD><E5A092><EFBFBD>鈭峕活撘<E6B4BB><E69298>睲葉<E79DB2>湔𦻖SQL<51>亥砭<E4BAA5><E7A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F><><EFBFBD><EFBFBD>𤏸<EFBFBD><F0A48FB8><EFBFBD>憿餃<E686BF><EFBFBD>𧑐瘚讛<E7989A>甇斗芋撘譍誑<E8AD8D><EFBFBD><E8B8B9><EFBFBD>銝钅<E98A9D><E99285>?
## ---
**2\. 憭㚚<E686AD><E79285><EFBFBD>沲嚗𠄌xternal Module Framework嚗㚁<E59A97>摰𡁜<E691B0><F0A1819C>𣇉<EFBFBD><F0A38789>唬誨<E594AC><E8AAA8><EFBFBD>**
历史上REDCap的定制是通过“Hooks钩子”和“Plugins插件”实现的——即直接注入Web服务器文件路径的脚本。虽然这种方法有效但它非常脆弱REDCap核心的升级经常导致定制功能失效且跨多个项目管理版本在行政上是繁琐的9。
**外部模块External Module, EM框架**的引入彻底改变了二次开发的格局。它将自定义代码封装在带版本的包中可以全局启用或按项目启用并通过图形用户界面GUI进行管理且能在联盟内共享1。
<EFBFBD><EFBFBD>蟮銝𠺪<EFBFBD>REDCap<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嗆糓<EFBFBD><EFBFBD><EFBFBD>𣿯ooks嚗<EFBFBD>偬摮琜<EFBFBD><EFBFBD><EFBFBD><EFBFBD>憕lugins嚗<EFBFBD><EFBFBD>隞塚<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𥪜朖<EFBFBD>湔𦻖瘜典<EFBFBD>Web<EFBFBD>滚𦛚<EFBFBD><EFBFBD>隞嗉楝敺<EFBFBD><EFBFBD><EFBFBD>𡁏𧋦<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝘齿䲮瘜閙<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𧼮虜<EFBFBD><EFBFBD>摹嚗𢡱EDCap<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝥抒<EFBFBD>撣詨紡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>賢仃<EFBFBD><EFBFBD><EFBFBD>銝磰楊憭帋葵憿寧𤌍蝞∠<EFBFBD><EFBFBD><EFBFBD>𧋦<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>9<EFBFBD>?
**憭㚚<E686AD><E79285>嚗𠄌xternal Module, EM嚗㗇<E59A97><E39787>?*<2A><><EFBFBD><EFBFBD>亙蝠摨閙㺿<E99699><EFBFBD>鈭峕活撘<E6B4BB><E69298>𤑳<EFBFBD><F0A491B3><EFBFBD><E6BE86><EFBFBD><EFBFBD><EFBFBD>䌊摰帋<E691B0><EFBFBD><E99A9E><EFBFBD><E692A0><EFBFBD>典蒂<E585B8><E89282>𧋦<EFBFBD><F0A78BA6><EFBFBD>銝哨<E98A9D><E593A8>臭誑<E887AD><EFBFBD><E585B8>舐鍂<E88890>𡝗<EFBFBD>憿寧𤌍<E5AFA7>舐鍂嚗<E98D82><EFBFBD><EFBFBD><E69C9E>曉耦<E69B89><EFBFBD><E586BD>屸𢒰嚗𠃑UI嚗㕑<E59A97>銵𣬚恣<F0A3AC9A><E681A3><EFBFBD>銝磰<E98A9D><E7A3B0><EFBFBD><E588BB><EFBFBD><E7AC94>曹澈1<E6BE88>?
### **2.1 憭㚚<E686AD><E79285><E288AA><EFBFBD><EFBFBD>硋郎蝏𤘪<E89D8F>**
一个外部模块是位于\<redcap-root\>/modules/目录下的文件集合。其命名约定非常严格:\<prefix\>\_v\<version\_number\>。例如一个由前缀为“company”的开发者开发的名为“Hello World”的模块可能位于modules/company\_hello\_world\_v1.0.010
<EFBFBD>銝芸<EFBFBD><EFBFBD>冽芋<EFBFBD>埈糓雿滢<EFBFBD>\<redcap-root\>/modules/<EFBFBD><EFBFBD>銝讠<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝥血<EFBFBD><EFBFBD>𧼮虜銝交聢嚗䨵<prefix\>\_v\<version\_number\><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝芰眏<EFBFBD><EFBFBD>銝算<EFBFBD>𦣇ompany<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𤏸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𤑳<EFBFBD><EFBFBD>滢蛹<EFBFBD>𣿯ello World<6C><EFBFBD><E79285><E288AA><EFBFBD>雿滢<E99BBF>modules/company\_hello\_world\_v1.0.010<EFBFBD>?
憭㚚<EFBFBD><EFBFBD><EFBFBD><EFBFBD>瓲敹<EFBFBD><EFBFBD>隞嗅<EFBFBD>銝贝”<EFBFBD><EFBFBD>蝷綽<EFBFBD>
| 组件名称 | 文件名 | 功能描述 |
| <EFBFBD><EFBFBD>滨妍 | <20><><EFBFBD>?| <20><EFBFBD><E8A098>讛膩 |
| :---- | :---- | :---- |
| **配置清单** | config.json | 定义元数据、权限、链接、系统/项目设置以及Cron作业。它是模块的入口点。 |
| **逻辑类** | Module.php | 继承自AbstractExternalModule的PHP类。包含业务逻辑和钩子实现。 |
| **文档** | README.md | 使用说明对于提交到Repo至关重要|
| **许可证** | LICENSE | 许可条款通常为MIT或类似条款以便于联盟共享|
| **辅助文件** | /pages, /js | 用于存放自定义页面、JavaScript或CSS资源的子目录。 |
| **<EFBFBD>滨蔭皜<EFBFBD><EFBFBD>** | config.json | 摰帋<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>頂蝏?憿寧𤌍霈曄蔭隞亙<E99A9E>Cron雿靝<E99BBF><E99D9D><EFBFBD><EFBFBD><EFBFBD>舀芋<E88880><EFBFBD><E39B96>亙藁<E4BA99><EFBFBD>?|
| **<EFBFBD><EFBFBD>蝐?* | Module.php | 蝏扳㗁<EFBFBD>bstractExternalModule<EFBFBD><EFBFBD>HP蝐颯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>屸偬摮𣂼<EFBFBD><EFBFBD><EFBFBD>?|
| **<EFBFBD><EFBFBD>** | README.md | 雿輻鍂霂湔<EFBFBD><EFBFBD>笆鈭擧<EFBFBD>鈭文<EFBFBD>Repo<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗剹<EFBFBD>?|
| **霈詨虾霂?* | LICENSE | 霈詨虾<EFBFBD>⊥狡嚗<EFBFBD><EFBFBD>𡁜虜銝撤IT<EFBFBD>𣇉掩隡潭辺甈曆誑靘蹂<EFBFBD><EFBFBD>𠉛<EFBFBD><EFBFBD>曹澈嚗剹<EFBFBD>?|
| **<EFBFBD>𨭌<EFBFBD><EFBFBD>** | /pages, /js | <EFBFBD><EFBFBD>摮䀹𦆮<EFBFBD><EFBFBD>銋厰△<EFBFBD><EFBFBD><EFBFBD>avaScript<EFBFBD>𥟟SS韏<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?|
#### **2.1.1 配置文件 (config.json) 的深度解析**
config.json文件不仅是配置它是模块的声明书。它告诉REDCap该模块能做什么以及它需要什么权限。如果JSON文件配置错误模块将无法加载。
#### **2.1.1 <EFBFBD>滨蔭<EFBFBD><EFBFBD> (config.json) <EFBFBD><EFBFBD>楛摨西圾<EFBFBD>?*
config.json<6F><6E>辣銝滢<E98A9D><E6BBA2><EFBFBD>蝵殷<E89DB5><EFBFBD>糓璅<E79285><E288AA><EFBFBD><EFBFBD>𦒘髡<F0A69298><E9ABA1><EFBFBD><EFBFBD>𡃏<EFBFBD>REDCap霂交芋<E4BAA4>𡑒<EFBFBD><F0A19192><EFBFBD><EFBFBD><EFBFBD>𠰴<EFBFBD><F0A0B0B4><EFBFBD><EFBFBD><E996AC><EFBFBD><E98A8B><EFBFBD><EFBFBD><E58390><EFBFBD><EFBFBD>䯀SON<4F><4E><EFBFBD>滨蔭<E6BBA8>躰秤嚗峕芋<E5B395><EFBFBD><E5A092><EFBFBD><E4ADBE>㰘蝸<E3B098>?
**皞𣂷誨<F0A382B7><E8AAA8><EFBFBD><E585A7><EFBFBD>config.json蝏𤘪<E89D8F>**
JSON
{
"name": "Advanced Data Processor",
"description": "在保存时处理数据并与外部API集成。",
"description": "<EFBFBD><EFBFBD>摮䀹𧒄憭<EFBFBD><EFBFBD><EFBFBD>唳旿撟嗡<EFBFBD>憭㚚<EFBFBD>API<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?,
"permissions": \[
"redcap\_save\_record",
"redcap\_every\_page\_top"
@@ -65,14 +54,14 @@ JSON
"links": {
"project": \[
{
"name": "数据处理仪表盘",
"name": "<EFBFBD>唳旿憭<EFBFBD><EFBFBD>隞芾”<EFBFBD>?,
"icon": "fas fa-chart-line",
"url": "pages/dashboard.php"
}
\],
"control-center": \[
{
"name": "处理器日志",
"name": "<EFBFBD><EFBFBD><EFBFBD>冽𠯫敹?,
"icon": "fas fa-server",
"url": "pages/admin\_logs.php"
}
@@ -82,12 +71,10 @@ JSON
"authors":
}
*案例分析:* permissions数组显式请求对特定钩子的访问权限。如果此处未列出某个钩子即使在PHP类中定义了该函数它也永远不会执行。project-settings数组在项目设置页面中创建了一个GUI允许用户在不接触代码的情况下配置模块11。
#### **2.1.2 模块类 (ExternalModule.php) 的实现逻辑**
这个文件包含扩展AbstractExternalModule的PHP类。这种继承提供了对框架辅助方法的访问如getProjectSetting、query和日志记录功能。
*獢<><E78DA2><EFBFBD><EFBFBD><EFBFBD>嚗? permissions<6E><EFBFBD><E59581><EFBFBD>霂瑟<E99C82>撖寧鸌摰𡁻偬摮鞟<E691AE>霈輸䔮<E8BCB8><E494AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𨀣迨憭<E8BFA8>𧊋<EFBFBD>堒枂<E5A092>𣂷葵<F0A382B7><EFBFBD><EFBFBD>朖雿踹銁PHP蝐颱葉摰帋<E691B0><EFBFBD><EFBFBD>賣㺭嚗<E3BAAD><E59A97><EFBFBD>偶餈靝<E9A488>隡𡁏<E99AA1>銵䎚<E98AB5><E48E9A>roject-settings<67><EFBFBD><E59581>券★<E588B8>株挽蝵桅△<E6A185><EFBCB6>𥕦遣鈭<E981A3><E988AD>銝果UI嚗<49><E59A97>霈貊鍂<E8B28A>瑕銁銝齿𦻖閫虫誨<E899AB><E8AAA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝钅<E98A9D>蝵格芋<E6A0BC>?1<>?
#### **2.1.2 璅<E79285>蝐?(ExternalModule.php) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
餈嗘葵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AbstractExternalModule<EFBFBD><EFBFBD>HP蝐颯<EFBFBD><EFBFBD><EFBFBD>蝘滨誧<EFBFBD><EFBFBD>靘𥕢<EFBFBD>撖寞<EFBFBD><EFBFBD><EFBFBD><EFBFBD>拇䲮瘜閧<EFBFBD>霈輸䔮嚗<EFBFBD><EFBFBD>getProjectSetting<EFBFBD><EFBFBD>uery<EFBFBD>峕𠯫敹𡑒扇敶訫<EFBFBD><EFBFBD><EFBFBD>?
**皞𣂷誨<F0A382B7><E8AAA8><EFBFBD><E585A7><EFBFBD>蝐餌<E89D90><E9A48C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E692A0>**
PHP
@@ -100,7 +87,7 @@ use REDCap;
class AdvancedDataProcessor extends AbstractExternalModule {
// 当记录保存时自动触发的方法
// 敶栞扇敶蓥<EFBFBD>摮䀹𧒄<EFBFBD>芸𢆡閫血<EFBFBD><EFBFBD><EFBFBD>䲮瘜?
public function redcap\_save\_record($project\_id, $record, $instrument, $event\_id, $group\_id, $survey\_hash, $response\_id, $repeat\_instance) {
// 1\. 璉<><E79289>亥砲憿寧𤌍<E5AFA7>臬炏<E887AC>舐鍂鈭<E98D82><EFBFBD><EFBFBD><EFBFBD>
@@ -108,9 +95,9 @@ class AdvancedDataProcessor extends AbstractExternalModule {
return;
}
// 2\. 防止无限循环!(Infinite Loop Trap)
// 如果此函数保存数据,它可能会再次触发redcap\_save\_record
// 使用静态标志或检查保存是否由本模块触发是必须的。
// 2\. <EFBFBD>脫迫<EFBFBD>𣳇<EFBFBD>敺芰㴓嚗?Infinite Loop Trap)
// <EFBFBD><EFBFBD>甇文遆<EFBFBD><EFBFBD>摮䀹㺭<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>齿活閫血<EFBFBD>redcap\_save\_record<EFBFBD>?
// 雿輻鍂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>敹埈<EFBFBD><EFBFBD><EFBFBD><EFBFBD>摮䀹糓<EFBFBD>衣眏<EFBFBD>祆芋<EFBFBD>𡑒圻<EFBFBD>烐糓敹<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
static $is\_processing \= false;
if ($is\_processing) return;
$is\_processing \= true;
@@ -119,7 +106,7 @@ class AdvancedDataProcessor extends AbstractExternalModule {
// 3\. <20><EFBFBD><E689AF><EFBFBD><E8A9A8><EFBFBD>
$this\-\>processData($project\_id, $record, $instrument);
} catch (\\Exception $e) {
$this\-\>emError("处理记录 $record 时出错: ". $e\-\>getMessage());
$this\-\>emError("<EFBFBD><EFBFBD>霈啣<EFBFBD> $record <EFBFBD>嗅枂<EFBFBD>? ". $e\-\>getMessage());
}
$is\_processing \= false;
@@ -132,50 +119,40 @@ class AdvancedDataProcessor extends AbstractExternalModule {
}
}
这种结构确保了封装性。通过使用namespace模块避免了与其他可能使用相似类名的模块发生冲突13。
餈嗵<EFBFBD>蝏𤘪<EFBFBD>蝖桐<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>雿輻鍂namespace嚗峕芋<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝𤾸<EFBFBD>隞硋虾<EFBFBD>賭蝙<EFBFBD>函㮾隡潛掩<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𤑳<EFBFBD><EFBFBD><EFBFBD>13<EFBFBD>?
### **2.2 <20>喲睸<E596B2><EFBFBD>嚗𠃍ooks嚗劐<E59A97>鈭衤辣憭<E8BEA3><E686AD><EFBFBD><EFBFBD>**
钩子是干预REDCap工作流的主要机制。它们允许开发者在应用程序生命周期的特定点执行代码9。
<EFBFBD><EFBFBD><EFBFBD>臬僕憸<EFBFBD>EDCap撌乩<EFBFBD><EFBFBD><EFBFBD>銝餉<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>隞砍<EFBFBD>霈詨<EFBFBD><EFBFBD>𤏸<EFBFBD><EFBFBD>銁摨𠉛鍂蝔见<EFBFBD><EFBFBD>笔𦶢<EFBFBD><EFBFBD><EFBFBD><EFBFBD>鸌摰𡁶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>9<EFBFBD>?
#### **2.2.1 redcap\_save\_record嚗𡁏瓲敹<E793B2><EFBFBD><EFBFBD><E6A180>?*
#### **2.2.1 redcap\_save\_record核心数据处理**
这是二次开发中最重要的钩子。它在数据已提交到数据库*之后*,但在用户看到确认消息之前(在某些上下文中)或在后台保存后立即触发。
* **参数详解:** $project\_id项目ID, $record记录名, $instrument表单名, $event\_id事件ID, $group\_id数据访问组ID, $survey\_hash调查哈希, $response\_id响应ID, $repeat\_instance重复实例14。
餈蹱糓鈭峕活撘<EFBFBD><EFBFBD>睲葉<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>偬摮僐<EFBFBD><EFBFBD><EFBFBD><EFBFBD>冽㺭<EFBFBD>桀歇<EFBFBD>𣂷漱<EFBFBD>唳㺭<EFBFBD><EFBFBD>*銋见<E98A8B>*嚗䔶<E59A97><E494B6>函鍂<E587BD><EFBFBD><E7919E>霈斗<E99C88><E69697><EFBFBD><E887AD><EFBFBD><E3B5AA><EFBFBD>鈭𥕢<E988AD>銝𧢲<E98A9D>銝哨<E98A9D><E593A8>硋銁<E7A18B>𤾸蝱靽嘥<E99DBD><E598A5>𡒊<EFBFBD><F0A1928A>唾圻<E594BE><EFBFBD>?
* **<2A><>㺭霂西圾嚗?* $project\_id嚗<64><EFBFBD>埋D嚗? $record嚗<64>扇敶訫<E695B6>嚗? $instrument嚗<74><EFBFBD><EFBFBD>嚗? $event\_id嚗<64><E59A97>隞貂D嚗? $group\_id嚗<64><EFBFBD>株挪<E6A0AA><EFBFBD>ID嚗? $survey\_hash嚗<68><E59A97><EFBFBD><EFBFBD>撣䕘<E692A3>, $response\_id嚗<64><E59A97>摨㶏D嚗? $repeat\_instance嚗<65><E59A97>憭滚<E686AD>靘页<E99D98>14<31>?
* **<2A><>雿喳<E99BBF><E596B3>典㦤<E585B8><EFBFBD>**
* **自动评分与计算:** 处理REDCap内置计算字段无法处理的复杂评分例如跨事件计算或涉及条件逻辑的聚合
* **数据录入触发器DET模拟** 保存时立即将数据推送到外部注册表或电子病历系统EMR
* **数据同步:** 自动将“筛选”项目中的数据复制到“主研究”项目中17。
* **致命陷阱The Infinite Loop** 一个常见的错误是redcap\_save\_record内部调用REDCap::saveData。由于saveData会再次触发redcap\_save\_record,这会导致无限递归,最终导致服务器崩溃(段错误或内存耗尽)。
* *解决方案:* 开发者必须包含逻辑来检查保存是否已在进行中,或使用标志在函数由模块本身触发时提前退出。
* **<EFBFBD>芸𢆡霂<EFBFBD><EFBFBD>銝舘恣蝞梹<EFBFBD>** 憭<><E686AD>REDCap<61><70>蔭霈∠<E99C88>摮埈挾<E59F88><EFBFBD><EFBFBD><E686AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>靘见<E99D98>嚗諹楊鈭衤辣霈∠<E99C88><E288A0>𡝗<EFBFBD><F0A19D97>𦠜辺隞園<E99A9E><EFBFBD><E9A489><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
* **<EFBFBD>唳旿敶訫<EFBFBD>閫血<EFBFBD><EFBFBD><EFBFBD>DET嚗㗇芋<EFBFBD><EFBFBD><EFBFBD>** 靽嘥<E99DBD><E598A5><EFBFBD><E597A5><EFBFBD><E596B3>唳旿<E594B3><EFBFBD><E588B8><EFBFBD>憭㚚<E686AD>瘜典<E7989C>銵冽<E98AB5><E586BD><EFBFBD><E89084><EFBFBD><EFBFBD>蝟餌<E89D9F>嚗𠄌MR嚗剹<E59A97>?
* **<EFBFBD>唳旿<EFBFBD>峕郊嚗?* <20>芸𢆡撠<F0A286A1><E692A0>𦦵<EFBFBD><F0A6A6B5><EFBFBD>嗪★<E597AA>桐葉<E6A190><E89189><EFBFBD><EFBFBD><E6A180><EFBFBD><E59785>靝蜓<E99D9D>𠉛弦<F0A0899B>嗪★<E597AA>桐葉17<31>?
* **<EFBFBD>游𦶢<EFBFBD>琿𩐠嚗㇍he Infinite Loop嚗㚁<EFBFBD>** 銝<>銝芸虜閫<E8999C><E996AB><EFBFBD>躰秤<E8BAB0>edcap\_save\_record<EFBFBD><EFBFBD><EFBFBD><EFBFBD>REDCap::saveData<EFBFBD><EFBFBD>眏鈭粃aveData隡𡁜<EFBFBD>甈∟圻<EFBFBD>𩹨edcap\_save\_record嚗諹<EFBFBD>隡𡁜紡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗峕<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>膥撏拇<EFBFBD><EFBFBD><EFBFBD>躰秤<EFBFBD><EFBFBD>摮䁅<EFBFBD>堒偷嚗剹<EFBFBD>?
* *<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗? 撘<><E69298>𤏸<EFBFBD><F0A48FB8><EFBFBD>憿餃<E686BF><E9A483><EFBFBD><EFBFBD><E9A489><EFBFBD><E4BAA4><EFBFBD>摮䀹糓<E480B9>血歇<E8A180><EFBFBD>銵䔶葉嚗峕<E59A97>雿輻鍂<E8BCBB><E98D82><EFBFBD><EFBFBD>典遆<E585B8>啁眏璅<E79285><E288AA>祈澈閫血<E996AB><E8A180><EFBFBD><E59786><EFBFBD><E6BCA4><EFBFBD><EFBFBD>?
#### **2.2.2 redcap\_every\_page\_top嚗䦧I瘜典<E7989C>銝𤾸<E98A9D><EFBFBD><E69285><EFBFBD>**
此钩子在每个项目上下文的页面加载时执行。
甇日偬摮𣂼銁瘥譍葵憿寧𤌍銝𠹺<EFBFBD><EFBFBD><EFBFBD><EFBFBD>憿菟𢒰<EFBFBD>㰘蝸<EFBFBD><EFBFBD>銵䎚<EFBFBD>?
* **<2A><>雿喳<E99BBF><E596B3>典㦤<E585B8><EFBFBD>**
* **UI/DOM操作:** 注入JavaScript类似Shazam模块的方法来修改DOM基于复杂逻辑隐藏字段或更改仪器的外观13。
* **CSS注入:** 加载自定义样式表以对项目进行品牌化。
* **性能警告:** 由于此钩子在*每一页*运行,在此钩子内进行繁重的数据库查询将严重降低用户体验。此处的代码必须极度轻量。
#### **2.2.3 redcap\_survey\_complete参与者流程控制**
类似于save\_record但专用于调查完成时。这是根据参与者的回答将他们重定向到不同URL或发送超出标准“警报和通知”模块功能的自定义电子邮件通知的理想钩子18。
* **UI/DOM<EFBFBD><EFBFBD>嚗?* 瘜典<E7989C>JavaScript嚗<74>掩隡嘯hazam璅<E79285><E288AA><EFBFBD>䲮瘜𤏪<E7989C><F0A48FAA>乩耨<E4B9A9>道OM嚗<4D>抅鈭𤾸<E988AD><F0A4BEB8><EFBFBD><EFBFBD><EFBFBD><E9A489><EFBFBD>摮埈挾嚗峕<E59A97><E5B395>湔㺿隞芸膥<E88AB8><E886A5><EFBFBD>閫?3<>?
* **CSS瘜典<EFBFBD>嚗?* <20>㰘蝸<E3B098><EFBFBD>銋㗇甅撘讛”隞亙笆憿寧𤌍餈𥡝<E9A488><F0A5A19D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
* **<EFBFBD><EFBFBD>霅血<EFBFBD>嚗?* <20><EFBFBD>甇日偬摮𣂼銁*瘥譍<E798A5>憿?餈鞱<E9A488><EFBFBD>銁甇日偬摮𣂼<E691AE>餈𥡝<E9A488><EFBFBD><E89D9C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6A180>亥砭撠<E7A0AD><EFBFBD><EFBFBD>雿𡒊鍂<F0A1928A><EFBFBD>撉䎚<E69289><E48E9A>迨憭<E8BFA8><E686AD><EFBFBD><E99A9E><EFBFBD><EFBFBD><E29786>漲頧駁<E9A0A7><E9A781>?
#### **2.2.3 redcap\_survey\_complete嚗𡁜<E59A97>銝舘<E98A9D><E88898><EFBFBD>蝔𧢲綉<F0A7A2B2>?*
蝐颱撮鈭粃ave\_record嚗䔶<E59A97>銝梶鍂鈭舘<E988AD><E88898><EFBFBD><E4BA99>鞉𧒄<E99E89><F0A79284><EFBFBD><EFBFBD>舀覔<E88880><EFBFBD>銝舘<E98A9D><E88898><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E692A0>隞祇<E99A9E>摰𡁜<E691B0><F0A1819C><EFBFBD><E594AC>𪄇RL嚗峕<E59A97><E5B395><EFBFBD><E785BE><EFBFBD><EFBFBD><EFBFBD><E7AEB8><EFBFBD><EFBFBD>𡏭郎<F0A18FAD><EFBFBD><E4BA99>𡁶䰻<F0A181B6>脲芋<E884B2><EFBFBD><E5A092><EFBFBD><E8B39C><EFBFBD>銋厩㩞摮鞾<E691AE>隞園<E99A9E>𡁶䰻<F0A181B6><E4B0BB><EFBFBD><EFBFBD>喲偬摮?8<>?
## ---
**3\. <20>唳旿摨㮖漱鈭雴<E988AD>摰匧<E691B0>撌亦<E6928C>**
二次开发中最大的风险之一是不当的数据库交互这可能导致SQL注入SQLi漏洞。鉴于REDCap存储敏感的受保护健康信息PHI安全性至关重要。
鈭峕活撘<EFBFBD><EFBFBD>睲葉<EFBFBD><EFBFBD>憭抒<EFBFBD>憌𡡞埯銋衤<EFBFBD><EFBFBD><EFBFBD>敶梶<EFBFBD><EFBFBD>唳旿摨㮖漱鈭𡜐<EFBFBD>餈坔虾<EFBFBD>賢紡<EFBFBD>巽QL瘜典<EFBFBD>嚗𠄎QLi嚗㗇<EFBFBD>瘣𠺶<EFBFBD><EFBFBD><EFBFBD>鈭竃EDCap摮睃<EFBFBD><EFBFBD>𤩺<EFBFBD><EFBFBD><EFBFBD><EFBFBD>靽脲擪<EFBFBD>亙熒靽⊥<EFBFBD>嚗㇊HI嚗㚁<EFBFBD>摰匧<EFBFBD><EFBFBD>扯秐<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
### **3.1 <20>質情<E8B3AA>亥砭<E4BAA5><EFBFBD>銝燑QL瘜典<E7989C><E585B8>脣鴃**
在旧版插件中开发者经常使用db\_query("SELECT \* FROM table WHERE id \= $id")。**这是严重的安全违规**,因为如果$id是用户输入它允许SQL注入19。
外部模块框架引入了安全的查询类。开发者应使用$this-\>query()或ExternalModules::query该方法支持参数化查询。
**脆弱代码(严禁使用):**
<EFBFBD>冽唂<EFBFBD><EFBFBD><EFBFBD>隞嗡葉嚗<EFBFBD><EFBFBD><EFBFBD>𤏸<EFBFBD><EFBFBD><EFBFBD>撣訾蝙<EFBFBD>b\_query("SELECT \* FROM table WHERE id \= $id")<EFBFBD>?*餈蹱糓銝仿<E98A9D><E4BBBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>閫?*嚗<><E59A97>銝箏<E98A9D><E7AE8F>?id<69>舐鍂<E88890><EFBFBD><E79181><EFBFBD><EFBFBD><E691B0>霈祿QL瘜典<E7989C>19<31>?
憭㚚<EFBFBD><EFBFBD><EFBFBD>沲撘訫<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>亥砭蝐颯<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𤏸<EFBFBD><EFBFBD><EFBFBD>雿輻鍂$this-\>query()嚗<><E59A97>ExternalModules::query嚗㚁<E59A97>霂交䲮瘜閙𣈲<E99699><F0A388B2><EFBFBD><EFBFBD><EFBFBD><E595A3>亥砭<E4BAA5>?
**<EFBFBD><EFBFBD>摹隞<EFBFBD><EFBFBD><EFBFBD>艇蝳<EFBFBD><EFBFBD><EFBFBD>嚗?*
PHP
@@ -183,11 +160,11 @@ PHP
$sql \= "SELECT value FROM redcap\_data WHERE project\_id \= ". $\_GET\['pid'\]. " AND field\_name \= '". $\_GET\['field'\]. "'";
$q \= db\_query($sql);
**安全代码(最佳实践):**
**摰匧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>雿喳<EFBFBD>頝蛛<EFBFBD>嚗?*
PHP
// 参数化查询
// <EFBFBD><EFBFBD><EFBFBD>𡝗䰻霂?
$sql \= "SELECT value FROM redcap\_data WHERE project\_id \=? AND field\_name \=?";
$q \= $this\-\>query($sql, \[$project\_id, $field\_name\]);
@@ -195,55 +172,43 @@ while ($row \= $q\-\>fetch\_assoc()) {
// 摰匧<E691B0><EFBFBD><E686AD><EFBFBD>唳旿
}
使用?占位符确保数据库驱动程序对输入进行转义从而中和攻击者注入的任何恶意SQL命令11。
雿輻鍂?<3F><EFBFBD>蝚衣靽脲㺭<E884B2><EFBFBD>撽勗𢆡蝔见<E89D94>撖寡<E69296><E5AFA1><EFBFBD>銵諹蓮銋㚁<E98A8B>隞舘<E99A9E>䔶葉<E494B6>峕𤫇<E5B395><EFBFBD><E9A489><EFBFBD><EFBFBD>隞颱<E99A9E><E9A2B1><EFBFBD>SQL<51>賭誘11<31>?
### **3.2 頝函<E9A09D><E587BD>𡁏𧋦<F0A1818F>餃稬嚗ǍSS嚗厩<E59A97><E58EA9>脣鴃**
当模块向浏览器输出数据时——尤其是用户输入的数据——必须防止XSS。如果用户在文本字段中输入\<script\>alert('Hack');\</script\>,而模块在仪表板上显示该字段且未进行转义,脚本将在查看者的浏览器中执行。
敶𤘪芋<EFBFBD><EFBFBD>瘚讛<EFBFBD><EFBFBD><EFBFBD><EFBFBD>箸㺭<EFBFBD>格𧒄<EFBFBD><EFBFBD>𥪜陘<EFBFBD>嗆糓<EFBFBD><EFBFBD>颲枏<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𥪜<EFBFBD>憿駁俈甇°SS<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𦦵鍂<EFBFBD>瑕銁<EFBFBD><EFBFBD>𧋦摮埈挾銝剛<EFBFBD><EFBFBD>功<script\>alert('Hack');\</script\>嚗諹<E59A97>峕芋<E5B395>堒銁隞芾”<E88ABE><EFBFBD><E8B982>曄內霂亙<E99C82>畾萎<E795BE><E8908E><EFBFBD>銵諹蓮銋㚁<E98A8B><E39A81>𡁏𧋦撠<F0A78BA6><EFBFBD><EFBFBD><E4BAA6><EFBFBD><EFBFBD>瘚讛<E7989A><E8AE9B>其葉<E585B6><EFBFBD><E689AF>?
<EFBFBD><EFBFBD>雿喳<EFBFBD>頝蛛<EFBFBD>
始终将输出包裹在REDCap::escapeHtml()中,或使用框架的强制方法。
憪讠<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鋆孵銁REDCap::escapeHtml()銝哨<EFBFBD><EFBFBD>碶蝙<EFBFBD><EFBFBD><EFBFBD><EFBFBD>撘箏<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
PHP
echo "<22><EFBFBD><EFBFBD>釣: ". REDCap::escapeHtml($user\_note);
未能执行此操作是模块在联盟审查过程中被拒绝的主要原因22。
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>甇斗<EFBFBD>雿𨀣糓璅<EFBFBD><EFBFBD><EFBFBD><EFBFBD>笔恣<EFBFBD><EFBFBD>蝔衤葉鋡急<EFBFBD>蝏萘<EFBFBD>銝餉<EFBFBD><EFBFBD><EFBFBD>22<EFBFBD>?
### **3.3 <20>唳旿霈輸䔮蝏<E494AE><E89D8F>DAGs嚗劐<E59A97><E58A90><EFBFBD><EFBFBD><EFBFBD>𠉛氖**
当直接针对redcap\_data编写SQL查询时模块会绕过REDCap的应用程序级安全性包括数据访问组DAGs。查询可能会无意中返回项目中的所有记录从而允许站点A的用户看到站点B的数据。
敶梶凒<EFBFBD>仿<EFBFBD>撖雹edcap\_data蝻硋<EFBFBD>SQL<EFBFBD>亥砭<EFBFBD><EFBFBD><EFBFBD>隡𡁶<EFBFBD>餈𧍒EDCap<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>摨讐漣摰匧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𡠺<EFBFBD>唳旿霈輸䔮蝏<EFBFBD><EFBFBD>DAGs嚗剹<EFBFBD><EFBFBD>䰻霂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝剛<EFBFBD><EFBFBD>鮋★<EFBFBD>桐葉<EFBFBD><EFBFBD><EFBFBD><EFBFBD>㕑扇敶𤏪<EFBFBD>隞舘<EFBFBD><EFBFBD><EFBFBD>霈貊<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
<EFBFBD><EFBFBD>雿喳<EFBFBD>頝蛛<EFBFBD>
只要可能,请使用REDCap::getData()方法代替原始SQL。REDCap::getData()会自动尊重DAG和用户权限。
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗諹窈雿輻鍂REDCap::getData()<EFBFBD><EFBFBD><EFBFBD>𤜯<EFBFBD><EFBFBD>SQL<EFBFBD><EFBFBD>EDCap::getData()隡朞䌊<EFBFBD><EFBFBD><EFBFBD>䄂AG<EFBFBD>𣬚鍂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
PHP
$data \= REDCap::getData($project\_id, 'array', $record\_id);
如果出于性能原因必须使用原始SQL开发者*必须*手动连接redcap\_data\_access\_groups表并根据当前用户的group\_id进行过滤24。
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>◆雿輻鍂<EFBFBD><EFBFBD>SQL嚗<EFBFBD><EFBFBD><EFBFBD>𤏸<EFBFBD>?敹<>◆*<2A>见𢆡餈墧𦻖redcap\_data\_access\_groups銵剁<E98AB5>撟嗆覔<E59786><EFBFBD><E6A180>滨鍂<E6BBA8><EFBFBD>group\_id餈𥡝<E9A488><EFBFBD>誘24<32>?
## ---
**4\. 蝘餃𢆡蝡臭漱鈭𡜐<E988AD>REDCap Mobile App瘛勗漲閫<E6BCB2><E996AB>**
REDCap服务器与移动设备之间的交互是二次开发的关键领域,特别是在互联网连接较差的地区进行实地研究时。
### **4.1 REDCap Mobile App的架构与工作流**
REDCap Mobile App是一个“胖客户端”它将项目结构元数据和数据可选下载到本地设备。它充当本地Web服务器允许离线数据收集。当恢复连接时它通过REDCap API将数据同步回中央服务器25。
REDCap<EFBFBD>滚𦛚<EFBFBD><EFBFBD>蝘餃𢆡霈曉<EFBFBD>銋钅𡢿<EFBFBD><EFBFBD>漱鈭埝糓鈭峕活撘<EFBFBD><EFBFBD>𤑳<EFBFBD><EFBFBD>喲睸憸<EFBFBD><EFBFBD>嚗𣬚鸌<EFBFBD>急糓<EFBFBD><EFBFBD><EFBFBD>𠉛<EFBFBD>餈墧𦻖颲<EFBFBD><EFBFBD><EFBFBD>𧑐<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝛嗆𧒄<EFBFBD>?
### **4.1 REDCap Mobile App<70><70><EFBFBD><E6B2B2><EFBFBD>撌乩<E6928C>瘚?*
REDCap Mobile App<70><EFBFBD>銝芬<E98A9D>𡏭<EFBFBD><E691B0>蝡胼<E89DA1><EFBFBD><EFBFBD><E691B0>憿寧𤌍蝏𤘪<E89D8F><EFBFBD><E59A97><EFBFBD>唳旿嚗匧<E59A97><E58CA7>唳旿嚗<E697BF><EFBFBD><EFBFBD>銝贝蝸<E8B49D>唳𧋦<E594B3>啗挽憭<E68CBD><E686AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>砍𧑐Web<65>滚𦛚<E6BB9A><EFBFBD><E58981><EFBFBD>捂蝳餌瑪<E9A48C>唳旿<E594B3><EFBFBD><E59C92><EFBFBD><EFBFBD><EFBFBD><EFBFBD>餈墧𦻖<E5A2A7><EFBFBD><EFBFBD><E691B0><EFBFBD>REDCap API撠<49><EFBFBD><EFBFBD>甇亙<E79487>銝剖亢<E58996>滚𦛚<E6BB9A>?5<>?
### **4.2 API<50>峕郊<E5B395><EFBFBD>銝𥣡SON Payload**
同步过程高度依赖于API令牌Token
1. **令牌生成:** 用户在服务器端生成令牌。
2. **初始化:** 应用程序扫描包含初始化代码的二维码该代码验证设备并下载项目XML元数据25。
3. **数据传输:** 设备上收集的数据存储在加密的SQLCipher数据库中iOS/Android。同步时App向importRecords API端点发送JSON有效负载。
JSON Payload结构同步
API期望数据采用特定的JSON结构。对于构建自己的移动接口替代官方App的二次开发者来说遵守此模式是强制性的。
<EFBFBD>峕郊餈<EFBFBD><EFBFBD>擃睃漲靘肽<EFBFBD>鈭垾PI隞斤<EFBFBD>嚗㇍oken嚗剹<EFBFBD>?
1. **隞斤<E99A9E><E696A4><EFBFBD><EFBFBD>嚗?* <20><EFBFBD><E586BD><EFBFBD><E586BD>膥蝡舐<E89DA1><E88890>𣂷誘<F0A382B7><EFBFBD>?
2. **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>** 摨𠉛鍂蝔见<E89D94><E8A781><EFBFBD><E680A5><EFBFBD><EFBFBD><EFBFBD><E598A5>碶誨<E7A2B6><E8AAA8><EFBFBD>鈭𣬚輕<F0A3AC9A><E8BC95><EFBFBD>霂乩誨<E4B9A9><E8AAA8><EFBFBD><EFBFBD>挽憭<E68CBD>僎銝贝蝸憿寧𤌍XML嚗<4C><E59A97><EFBFBD>唳旿嚗?5<>?
3. **<EFBFBD>唳旿隡㰘<EFBFBD>嚗?* 霈曉<E99C88>銝𦠜𤣰<F0A6A09C><F0A4A3B0><EFBFBD><EFBFBD>唳旿摮睃<E691AE><E79D83><EFBFBD><EFBFBD><E69296>SQLCipher<65>唳旿摨㮖葉嚗ǎOS/Android嚗剹<E59A97><E589B9><EFBFBD>甇交𧒄嚗淾pp<70>魀mportRecords API蝡舐<E89DA1><E88890><EFBFBD><E785BE>SON<4F><EFBFBD>韐蠘蝸<E8A098>?
JSON Payload蝏𤘪<E89D8F><EFBFBD><E59A97>甇伐<E79487>嚗?
API<EFBFBD><EFBFBD><EFBFBD><EFBFBD>唳旿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SON蝏𤘪<EFBFBD><EFBFBD><EFBFBD>笆鈭擧<EFBFBD>撱箄䌊撌梁<EFBFBD>蝘餃𢆡<EFBFBD>亙藁嚗<EFBFBD>𤜯隞<EFBFBD><EFBFBD><EFBFBD>農pp嚗厩<EFBFBD>鈭峕活撘<EFBFBD><EFBFBD>𤏸<EFBFBD><EFBFBD>䔉霂湛<EFBFBD><EFBFBD><EFBFBD>甇斗芋撘𤩺糓撘箏<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
JSON
\[
@@ -256,57 +221,44 @@ JSON
}
\]
28
### **4.3 冲突解决与风险管理**
移动集成中的一个主要“陷阱”是**同步冲突**。如果用户A在服务器上编辑记录101而用户B在离线移动应用程序上编辑记录101则同步期间会发生冲突。REDCap Mobile App具有基本的冲突解决界面要求用户选择“服务器版本”或“设备版本”。
**二次开发启示:** 如果您正在构建自动脚本例如DET来修改正在被移动数据收集者使用的记录则会增加冲突的风险。
* *最佳实践:* 移动用户应分配新的、唯一的记录或特定的DAG以防止与服务器端进程发生重叠编辑30。
28<EFBFBD>?
### **4.3 <20><EFBFBD><EFBFBD><E996AB>銝𡡞<E98A9D><F0A1A19E>拍恣<E68B8D>?*
蝘餃𢆡<EFBFBD><EFBFBD><EFBFBD>銝剔<EFBFBD><EFBFBD>銝芯蜓閬<EFBFBD><EFBFBD>𣈯萅<EFBFBD><EFBFBD>脲糓**<2A>峕郊<E5B395><EFBFBD>**<2A><><EFBFBD><EFBFBD>𦦵鍂<F0A6A6B5><EFBFBD><EFBFBD><E586BD>膥銝羓<E98A9D>颲𤏸扇敶?01嚗諹<E59A97>𣬚鍂<F0A3AC9A><EFBFBD>函氖蝥輻宏<E8BCBB><EFBFBD><E585B8><EFBFBD>摨譍<E691A8>蝻𤥁<E89DBB>霈啣<E99C88>101嚗<31><E59A97><EFBFBD>峕郊<E5B395>罸𡢿隡𡁜<E99AA1><F0A1819C><EFBFBD><EFBFBD><E89D92><EFBFBD>EDCap Mobile App<70><EFBFBD><E7919F>箸𧋦<E7AEB8><F0A78BA6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5969F><EFBFBD><EFBFBD><E996AC><EFBFBD><EFBFBD><E586BD>㗇𥋘<E39787>𨀣<EFBFBD><F0A880A3><E288AA><E886A5>𧋦<EFBFBD><EFBFBD><E884B2>𡏭挽憭<E68CBD><E686AD><EFBFBD><EFBFBD><EFBFBD>?
**鈭峕活撘<E6B4BB><E69298>穃鍳蝷綽<E89DB7>**<><E68692><EFBFBD>冽迤<E586BD><EFBFBD>撱箄䌊<E7AE84><EFBFBD><E588BB>穿<EFBFBD>靘见<E99D98>DET嚗㗇䔉靽格㺿甇<E3BABF>銁鋡怎宏<E6808E>冽㺭<E586BD>格𤣰<E6A0BC><F0A4A3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>霈啣<E99C88><EFBFBD><E59A97>隡𡁜<E99AA1><F0A1819C><EFBFBD><EFBFBD><E89D92>憌𡡞埯<F0A1A19E>?
* *<EFBFBD><EFBFBD>雿喳<EFBFBD>頝蛛<EFBFBD>* 蝘餃𢆡<E9A483><EFBFBD>摨𥪜<E691A8><F0A5AA9C>齿鰵<E9BDBF><E9B0B5><EFBFBD><EFBFBD>𣈲銝<F0A388B2><E98A9D><EFBFBD>扇敶閙<E695B6><E99699><EFBFBD><E5ADB5><EFBFBD>AG嚗䔶誑<E494B6>脫迫銝擧<E98A9D><E693A7>膥蝡航<E89DA1>蝔见<E89D94><E8A781><EFBFBD><E7BDB8><EFBFBD>颲?0<>?
## ---
**5\. MyCap嚗𡁜<E59A97>銝舘<E98A9D><E88898><EFBFBD><E59EA2><EFBFBD><EFBFBD><EFBFBD>鈭支<E988AD>**
虽然REDCap Mobile App是面向研究人员的,但**MyCap**是面向参与者的。MyCap最初是一个外部模块后在13.0版本中被集成到REDCap核心中突显了其重要性32。
<EFBFBD><EFBFBD>REDCap Mobile App<EFBFBD>舫𢒰<EFBFBD>𤑳<EFBFBD>蝛嗡犖<EFBFBD><EFBFBD>嚗䔶<EFBFBD>**MyCap**<2A>舫𢒰<E888AB><EFBFBD>銝舘<E98A9D><E88898><EFBFBD><EFBFBD><EFBFBD>yCap<61><70><EFBFBD>脲糓銝<E7B393>銝芸<E98A9D><E88AB8>冽芋<E586BD><EFBFBD><E6A2B9>𤾸銁13.0<EFBFBD><EFBFBD>𧋦銝剛◤<EFBFBD><EFBFBD><EFBFBD><EFBFBD>訌EDCap<EFBFBD><EFBFBD>銝哨<EFBFBD><EFBFBD>遬鈭<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?2<>?
### **5.1 <20><EFBFBD>嚗鑹esearchKit銝竃esearchStack**
MyCap利用了Apple的**ResearchKit**iOS**ResearchStack**Android。这些是专为医学研究应用程序设计的开源框架。MyCap充当桥梁
1. **配置:** 研究人员在REDCap中配置任务。
2. **转换:** MyCap将REDCap元数据转换为ResearchKit对象定义。
3. **执行:** 应用程序将这些对象渲染为原生移动视图而非Web视图提供流畅的App体验34。
MyCap<EFBFBD>拍鍂鈭<EFBFBD>pple<EFBFBD>?*ResearchKit**嚗ǎOS嚗匧<EFBFBD>**ResearchStack**嚗㇁ndroid嚗剹<EFBFBD><EFBFBD><EFBFBD>鈭𥟇糓銝㮖蛹<EFBFBD>餃郎<EFBFBD>𠉛弦摨𠉛鍂蝔见<EFBFBD>霈曇恣<EFBFBD><EFBFBD><EFBFBD>皞鞉<EFBFBD><EFBFBD><EFBFBD><EFBFBD>yCap<EFBFBD><EFBFBD><EFBFBD>獢交<EFBFBD>嚗?
1. **<EFBFBD>滨蔭嚗?* <20>𠉛弦鈭箏<E988AD><E7AE8F>沖EDCap銝剝<E98A9D>蝵桐遙<E6A190><EFBFBD>?
2. **頧祆揢嚗?* MyCap撠<70>EDCap<61><70><EFBFBD>株蓮<E6A0AA>蛹ResearchKit撖寡情摰帋<E691B0><E5B88B>?
3. **<EFBFBD><EFBFBD>嚗?* 摨𠉛鍂蝔见<E89D94><EFBFBD><E692A0>鈭𥕦笆鞊⊥葡<E28AA5>㮖蛹<E3AE96><EFBFBD>蝘餃𢆡閫<F0A286A1>㦛嚗<E3A69B><E59A97><EFBFBD>Web閫<62>㦛嚗㚁<E59A97><E39A81>𣂷<EFBFBD><EFBFBD><E7989A><EFBFBD><EFBFBD>pp雿㯄<E99BBF>34<33>?
### **5.2 銝餃𢆡隞餃𦛚嚗㇁ctive Tasks嚗厩<E59A97>摰𡁜<E691B0>**
MyCap最独特的功能是“主动任务”——利用手机传感器加速度计、麦克风、陀螺仪测量认知或身体功能的活动例如敲击速度、步态与平衡、空间记忆37。
MyCap<EFBFBD><EFBFBD><EFBFBD>祉鸌<EFBFBD><EFBFBD><EFBFBD><EFBFBD>賣糓<EFBFBD>靝蜓<EFBFBD>其遙<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𥪜⏚<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>笔膥嚗<EFBFBD><EFBFBD><EFBFBD>笔漲霈<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>箔貌嚗㗇<EFBFBD><EFBFBD>讛恕<EFBFBD><EFBFBD>頨思<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>靘见<EFBFBD>嚗峕䛵<EFBFBD><EFBFBD>笔漲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>撟唾﹛<EFBFBD><EFBFBD><EFBFBD>渲扇敹<EFBFBD><EFBFBD>37<EFBFBD>?
鈭峕活撘<EFBFBD><EFBFBD>烐㦤隡𡄯<EFBFBD>
开发者可以创建自定义的主动任务但这需要SwiftiOSKotlin/JavaAndroid的高级知识并修改MyCap源代码这需要不同于REDCap核心许可的特定联盟App源代码许可。然而标准的二次开发通常侧重于触发MyCap操作或处理MyCap数据。
* *案例:* 一个外部模块通过redcap\_save\_record监控传入的MyCap主动任务数据如果参与者的“步态速度”低于特定阈值表明跌倒风险则触发警报38。
<EFBFBD><EFBFBD>𤏸<EFBFBD><EFBFBD>虾隞亙<EFBFBD>撱箄䌊摰帋<EFBFBD><EFBFBD><EFBFBD><EFBFBD>其遙<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wift嚗ǎOS嚗㗇<EFBFBD>Kotlin/Java嚗㇁ndroid嚗厩<EFBFBD>擃条漣<EFBFBD><EFBFBD><EFBFBD>僎靽格㺿MyCap皞𣂷誨<EFBFBD><EFBFBD><EFBFBD>餈䠷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>REDCap<EFBFBD><EFBFBD>霈詨虾<EFBFBD><EFBFBD>鸌摰朞<EFBFBD><EFBFBD>鬹pp皞𣂷誨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𡁜虜靘折<EFBFBD>鈭舘圻<EFBFBD>餹yCap<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>yCap<EFBFBD>唳旿<EFBFBD>?
* *獢<><E78DA2>嚗? 銝<>銝芸<E98A9D><E88AB8>冽芋<E586BD><EFBFBD><E6A2B9><EFBFBD>redcap\_save\_record<72>烐綉隡惩<E99AA1><E683A9><EFBFBD>yCap銝餃𢆡隞餃𦛚<E9A483>唳旿嚗<E697BF><E59A97><EFBFBD>𨅯<EFBFBD>銝舘<E98A9D><E88898><EFBFBD><EFBFBD>𨀣郊<F0A880A3><E9838A><EFBFBD>笔漲<E7AC94><EFBFBD>鈭𡒊鸌摰𡁻<E691B0><F0A181BB><EFBFBD>銵冽<E98AB5><EFBFBD><E9A09D><EFBFBD><E398BE><EFBFBD><EFBFBD><E59A97>閫血<E996AB>霅行𥁒38<33>?
### **5.3 <20><EFBFBD>憭㚚<E686AD><E79285>摰𡁜<E691B0>MyCap**
尽管MyCap是核心功能EM仍然可以增强它。例如生成用于参与者入职的自定义二维码并自动通过电子邮件发送。App Links功能允许从外部源深度链接到MyCap应用程序39。
撠賜恣MyCap<EFBFBD>舀瓲敹<EFBFBD><EFBFBD><EFBFBD><EFBFBD>EM隞滨<EFBFBD><EFBFBD>臭誑憓𧼮撩摰<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣬚<EFBFBD><EFBFBD><EFBFBD>銋劐<EFBFBD>蝏渡<EFBFBD>撟嗉䌊<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>桐辣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pp Links<6B><EFBFBD><E8A098><EFBFBD>捂隞𤾸<E99A9E><F0A4BEB8><EFBFBD>瘛勗漲<E58B97>暹𦻖<E69AB9>衽yCap摨𠉛鍂蝔见<E89D94>39<33>?
## ---
**6\. REDCap API:生态系统的自动化桥梁**
**6\. REDCap API嚗𡁶<EFBFBD><EFBFBD><EFBFBD>頂蝏毺<EFBFBD><EFBFBD>芸𢆡<EFBFBD>𡝗璇?*
API是互操作性的支柱。对于二次开发而言它通常是编写外部模块的替代方案。如果逻辑可以通过在Cron作业上运行的外部脚本Python/R来处理那么这通常比在服务器上安装PHP模块更安全。
### **6.1 导出与导入的最佳实践**
* **分批处理Batching** 导出大型数据集时,一次请求所有记录会导致超时。
* *解决方案:* 使用batch\_size参数或分块循环遍历记录。
* **类型处理:** 默认情况下API在JSON中将所有数据作为字符串返回。
* *陷阱:* 在PHP/Python布尔检查中字段值“0”字符串在某些上下文中为真但“0”整数为假。开发者必须严格对API响应进行类型转换40。
* **“扁平”与“EAV”导出** API创建一个“扁平”文件每个记录/事件一行。这与后端的EAV结构不同。二次开发者通常构建“数据录入触发器”DET每当保存记录时该触发器都会收到来自REDCap的POST请求然后调用API导出该特定记录进行处理42。
API<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>笆鈭𦒘<EFBFBD><EFBFBD><EFBFBD>𤏸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𡁜虜<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>冽芋<EFBFBD><EFBFBD><EFBFBD>蹂誨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣈯<EFBFBD><EFBFBD><EFBFBD>臭誑<EFBFBD><EFBFBD><EFBFBD>每ron雿靝<EFBFBD>銝𡃏<EFBFBD>銵𣬚<EFBFBD>憭㚚<EFBFBD><EFBFBD>𡁏𧋦嚗㇊ython/R嚗㗇䔉憭<E49489><E686AD>嚗屸<E59A97><EFBFBD><E98A8B><EFBFBD>𡁜虜瘥𥪜銁<F0A5AA9C>滚𦛚<E6BB9A><EFBFBD>摰㕑<E691B0>PHP璅<E79285><E288AA><EFBFBD><E6B8B8><EFBFBD>?
### **6.1 撖澆枂銝𤾸紡<F0A4BEB8><EFBFBD><E4BAA6><EFBFBD>雿喳<E99BBF>頝?*
* **<2A><>鸌憭<E9B88C><E686AD>嚗㇂atching嚗㚁<E59A97>** 撖澆枂憭批<E686AD><E689B9>唳旿<E594B3><E697BF>𧒄嚗䔶<E59A97>甈∟窈瘙<E7AA88><E79899><EFBFBD>㕑扇敶蓥<E695B6>撖潸稲頞<E7A8B2>𧒄<EFBFBD>?
* *閫<><E996AB><EFBFBD><EFBFBD>嚗? 雿輻鍂batch\_size<7A><65><EFBFBD><EFBFBD><E7A18B>堒儐<E5A092><EFBFBD><E888AB><EFBFBD>扇敶𨰻<E695B6>?
* **蝐餃<E89D90><EFBFBD><E686AD>嚗?* 暺䁅恕<E48185><E68195><EFBFBD>銝页<E98A9D>API<50>沅SON銝剖<E98A9D><E58996><EFBFBD><EFBFBD>㗇㺭<E39787><EFBFBD>銝箏<E98A9D>蝚虫葡餈𥪜<E9A488><F0A5AA9C>?
* *<2A>琿𩐠嚗? <20>沌HP/Python撣<6E><E692A3><EFBFBD><E79289>乩葉嚗<E89189><E59A97>畾萄<E795BE><EFBFBD>?<3F><EFBFBD>摮㛖泵銝莎<E98A9D><E88E8E><EFBFBD>鈭𥕢<E988AD>銝𧢲<E98A9D>銝凋蛹<E5878B><E89BB9><EFBFBD><EFBFBD><E99BBF>?<3F><EFBFBD><E59885>湔㺭嚗劐蛹<E58A90><E89BB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𤏸<EFBFBD><F0A48FB8><EFBFBD>憿颱艇<E9A2B1>澆笆API<50><EFBFBD>餈𥡝<E9A488>蝐餃<E89D90>頧祆揢40<34>?
* **<2A>𨀣<EFBFBD>撟喇<E6929F><EFBFBD><E88BB7>諪AV<41>嘥紡<E598A5><EFBFBD>** API<50>𥕦遣銝<E981A3>銝芬<E98A9D>𨀣<EFBFBD>撟喇<E6929F><EFBFBD>隞塚<E99A9E>瘥譍葵霈啣<E99C88>/鈭衤辣銝<E8BEA3>銵䕘<E98AB5><E49598><EFBFBD><EFBFBD>銝𤾸<E98A9D>蝡舐<E89DA1>EAV蝏𤘪<E89D8F>銝滚<E98A9D><E6BB9A><EFBFBD><EFBFBD><E79488><E288AA>𤏸<EFBFBD><F0A48FB8><EFBFBD>𡁜虜<F0A1819C><E8999C><EFBFBD>𨀣㺭<F0A880A3><EFBFBD><E6A180>亥圻<E4BAA5>穃膥<E7A983><EFBFBD>DET嚗㚁<E59A97>瘥誩<E798A5>靽嘥<E99DBD>霈啣<E99C88><E595A3><EFBFBD>霂亥圻<E4BAA5>穃膥<E7A983><EFBFBD><E8B3AD><EFBFBD><E59785>亥䌊REDCap<61><70>OST霂瑟<E99C82>嚗𣬚<E59A97><F0A3AC9A><EFBFBD><E88898>杗PI撖澆枂霂亦鸌摰朞扇敶閗<E695B6><EFBFBD><E98AB5><EFBFBD>?2<>?
**隞<><E99A9E>蝷箄<E89DB7>嚗䥪ython API撖澆枂<E6BE86>𡁏𧋦**
Python
@@ -315,7 +267,7 @@ import requests
import pandas as pd
api\_url \= 'https://redcap.institution.edu/api/'
\# payload构造
\# payload<EFBFBD><EFBFBD><EFBFBD>?
payload \= {
'token': 'YOUR\_32\_CHAR\_TOKEN',
'content': 'record',
@@ -339,74 +291,60 @@ except requests.exceptions.RequestException as e:
except ValueError:
print("JSON閫<4E><E996AB>憭梯揖 \- <20><EFBFBD><E6BB9A><EFBFBD><E888AA>酶SON<4F><EFBFBD>")
44
44<EFBFBD>?
## ---
**7\. 最佳案例研究(Case Studies**
为了说明“最佳应用”,我们分析三种突出的二次开发方法。
**7\. <EFBFBD><EFBFBD>雿單<EFBFBD>靘讠<EFBFBD>蝛塚<EFBFBD>Case Studies嚗?*
銝箔<EFBFBD>霂湔<EFBFBD><EFBFBD>𨀣<EFBFBD>雿喳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>睲賑<EFBFBD><EFBFBD><EFBFBD>銝厩<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>烐䲮瘜𨰻<EFBFBD>?
### **7.1 獢<><E78DA2><EFBFBD>嚗锭hazam嚗㇎I銝𤾸<E98A9D>蝡舀㺿<E88880>𩤃<EFBFBD>**
* **目标:** 为调查创建自定义布局,将字段分组为矩阵或非标准视觉格式。
* **机制:** Shazam是一个外部模块它注入JavaScript/CSS。它解析描述性文本字段中的特定“Shazam”标签然后重新排列数据录入表单的HTML DOM
* **洞察:** 这展示了EM如何在不更改服务器端数据结构的情况下从*客户端*彻底改变用户体验1。
* **<EFBFBD><EFBFBD>嚗?* 銝箄<E98A9D><E7AE84><EFBFBD>撱箄䌊摰帋<E691B0><EFBFBD><E692A3><EFBFBD><E59A97>摮埈挾<E59F88><E68CBE><EFBFBD>銝箇畆<E7AE87><EFBFBD><E88F9C><EFBFBD><E5A2A7><EFBFBD><EFBFBD>閫㗇聢撘譌<E69298>?
* **<EFBFBD><EFBFBD>嚗?* Shazam<EFBFBD><EFBFBD>銝芸<EFBFBD><EFBFBD>冽芋<EFBFBD><EFBFBD><EFBFBD><EFBFBD>仔avaScript/CSS<53><53><EFBFBD><EFBFBD><E996AB><EFBFBD>讛膩<E8AE9B><EFBFBD><E689B3><EFBFBD>畾萎葉<E8908E><E89189>鸌摰尠<E691B0>侻hazam<61><EFBFBD>蝑橘<E89D91><E6A998><EFBFBD><E59785>齿鰵<E9BDBF><EFBFBD><E98DA6>唳旿敶訫<E695B6>銵典<E98AB5><E585B8><EFBFBD>TML DOM<EFBFBD>?
* **瘣𧼮<EFBFBD>嚗?* 餈坔<E9A488>蝷箔<E89DB7>EM憒<4D><E68692><EFBFBD><EFBFBD><E585B6>湔㺿<E6B994>滚𦛚<E6BB9A>函垢<E587BD>唳旿蝏𤘪<E89D8F><F0A498AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗䔶<E59A97>*摰<E691B0>蝡?敶餃<E695B6><E9A483><EFBFBD><E5ADB5><EFBFBD>雿㯄<E99BBF>1<EFBFBD>?
### **7.2 獢<><E78DA2>鈭䕘<E988AD>Auto-Schedule嚗<65>極雿𨀣<E99BBF><F0A880A3>芸𢆡<E88AB8><EFBFBD>**
* **目标:** 基于基线日期(例如手术日期)自动生成纵向事件的时间表。
* **机制:** 使用redcap\_save\_record钩子。当保存“surgery\_date”字段时,模块计算未来日期(+30天+60天并填充项目日历。
* **洞察:** 这替代了人工计算减少了协调员的错误展示了后端钩子在运营效率中的作用45。
* **<EFBFBD><EFBFBD>嚗?* <20><EFBFBD><E7AE94>箇瑪<E7AE87><EFBFBD><EFBFBD><E59A97><EFBFBD><E68692><EFBFBD>舀𠯫<E88880><F0A0AFAB><EFBFBD><EFBFBD>芸𢆡<E88AB8><F0A286A1><EFBFBD>蝥萄<E89DA5>鈭衤辣<E8A1A4><E8BEA3>𧒄<EFBFBD>渲”<E6B8B2>?
* **<EFBFBD><EFBFBD>嚗?* 雿輻鍂redcap\_save\_record<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>靽嘥<EFBFBD><EFBFBD>𦨴urgery\_date<EFBFBD><EFBFBD>畾菜𧒄嚗峕芋<EFBFBD>𡑒恣蝞埈𧊋<EFBFBD>交𠯫<EFBFBD><EFBFBD><EFBFBD>+30憭抬<E686AD>+60憭抬<E686AD>撟嗅<E59785><E280B5><EFBFBD>格𠯫<E6A0BC><F0A0AFAB><EFBFBD>?
* **瘣𧼮<EFBFBD>嚗?* 餈蹱𤜯隞<F0A49CAF><E99A9E>鈭箏極霈∠<E99C88><EFBFBD><E59A97>撠睲<E692A0><E79DB2><EFBFBD><E8AE9B><EFBFBD><E69DA1>躰秤嚗<E7A7A4><E59A97>蝷箔<E89DB7><E7AE94>𡒊垢<F0A1928A><EFBFBD><E68B99><EFBFBD><E588BB><EFBFBD><E4BAA4><EFBFBD><EFBFBD><E89189><EFBFBD><EFBFBD>?5<>?
### **7.3 獢<><E78DA2>銝㚁<E98A9D>Cross-Project Piping嚗<67>楊憿寧𤌍<E5AFA7>唳旿鈭㘾<E988AD>𡄯<EFBFBD>**
* **目标:** 将人口统计数据从中央“注册”项目拉取到特定的“研究”项目中。
* **机制:** 一个EM它查询源项目的数据库使用REDCap::getData并将数据插入当前项目表单。
* **成功关键:** 它使用“触发字段”。只有在修改特定字段时才会进行复制防止不断覆盖47。
* **<EFBFBD><EFBFBD>嚗?* 撠<><EFBFBD><E78A96><EFBFBD>霈⊥㺭<E28AA5><EFBFBD>銝剖亢<E58996>𨀣釣<F0A880A3>𢞖<EFBFBD>嗪★<E597AA><EFBFBD><E6A0BC><EFBFBD><E7A18B><EFBFBD><E5ADB5><EFBFBD><EFBFBD>𦦵<EFBFBD>蝛嗯<E89D9B>嗪★<E597AA>桐葉<E6A190>?
* **<EFBFBD><EFBFBD>嚗?* 銝<>銝枕M嚗<4D><E59A97><EFBFBD>亥砭皞鞾★<E99EBE><EFBFBD><E6A183>唳旿摨橒<E691A8>雿輻鍂REDCap::getData嚗匧僎撠<E5838E><EFBFBD><EFBFBD><E6A0BC><EFBFBD><E4BA99>漤★<E6BCA4>株”<E6A0AA>𨰻<EFBFBD>?
* **<EFBFBD>𣂼<EFBFBD><EFBFBD>喲睸嚗?* 摰<><EFBFBD><EFBFBD>𡏭圻<F0A18FAD><EFBFBD>畾菊<E795BE><EFBFBD><E88588><EFBFBD>匧銁靽格㺿<E6A0BC><EFBFBD>摮埈挾<E59F88><EFBFBD>隡朞<E99AA1><EFBFBD><E98AB5><EFBFBD><EFBFBD><E5A19A>脫迫銝齿鱏閬<E9B18F><E996AC>47<34>?
## ---
**8\. <20><EFBFBD><E8B8B9><EFBFBD><EFBFBD>嚗𡁜虜閫<E8999C>䔮憸䀝<E686B8><EFBFBD><E996AB><EFBFBD><EFBFBD>**
二次开发充满风险。以下是联盟中报告的最常见问题:
### **8.1 “升级致死”The Upgrade Death**
* **场景:** 开发者使用非标准文件路径编写插件或依赖于REDCap内部私有核心函数。
* **后果:** 当REDCap更新时函数名称更改或路径移动导致插件崩溃。
* **避坑指南:** 严格坚持使用外部模块框架并仅调用REDCap::类方法,这些方法为了向后兼容性而受到维护。
鈭峕活撘<EFBFBD><EFBFBD><EFBFBD>皛⊿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>誑銝𧢲糓<EFBFBD>𠉛<EFBFBD>銝剜𥁒<EFBFBD><EFBFBD><EFBFBD><EFBFBD>撣貉<EFBFBD><EFBFBD><EFBFBD>嚗?
### **8.1 <20>𨅯<EFBFBD>蝥扯稲甇領<E79487><EFBFBD>The Upgrade Death嚗?*
* **<2A>箸艶嚗?* 撘<><E69298>𤏸<EFBFBD><F0A48FB8><EFBFBD><EFBFBD><E588B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>辣頝臬<E9A09D>蝻硋<E89DBB><E7A18B>雴辣嚗峕<E59A97>靘肽<E99D98>鈭竃EDCap<61><70><EFBFBD><EFBFBD><E59A97><EFBFBD><EFBFBD><E39A81><EFBFBD><E8A9A8>賣㺭<E8B3A3>?
* **<2A><EFBFBD>嚗?* 敶𣫮EDCap<61>湔鰵<E6B994><EFBFBD><E5A19A>賣㺭<E8B3A3>滨妍<E6BBA8>湔㺿<E6B994>𤥁楝敺<E6A59D><EFBFBD><EFBFBD>撖潸稲<E6BDB8>雴辣撏拇<E6928F><E68B87>?
* **<2A><EFBFBD><E8B8B9><EFBFBD><EFBFBD>嚗?* 銝交聢<E4BAA4>𡁏<EFBFBD>雿輻鍂憭㚚<E686AD><E79285><EFBFBD>沲嚗<E6B2B2>僎隞<E5838E><E99A9E><EFBFBD>沖EDCap::蝐餅䲮瘜𤏪<E7989C>餈嗘<E9A488><E59798><EFBFBD>銝箔<E98A9D><E7AE94><EFBFBD><E7A983>澆捆<E6BE86><EFBFBD><E689AF><EFBFBD><EFBFBD>啁輕<E59581><EFBFBD>?
### **8.2 redcap\_data<74><61><EFBFBD><EFBFBD><E689AF><EFBFBD>**
* **场景:** 模块搜索“所有年龄 \> 50的记录”。
* **陷阱:** 在一个拥有10万条记录的项目中通过SELECT \* FROM redcap\_data WHERE value \> 50执行此操作会强制对表进行全表扫描(因为该表包含*所有*项目的数据)。
* **解决方案:** 始终在SQL查询中包含project\_id作为首要过滤条件。利用REDCap::getData()的过滤逻辑或者如果需要原始SQL确保有效地利用了project\_id和field\_name上的索引。
* **<EFBFBD>箸艶嚗?* 璅<E79285><E288AA>𦦵揣<F0A6A6B5>𨀣<EFBFBD><F0A880A3>匧僑樴?\> 50<35><30>扇敶𨰝<E695B6><EFBFBD>?
* **<EFBFBD>琿𩐠嚗?* <20><EFBFBD>銝芣𥅾<E88AA3>?0銝<30>辺霈啣<E99C88><E595A3><EFBFBD><EFBFBD>桐葉嚗屸<E59A97><EFBFBD>SELECT \* FROM redcap\_data WHERE value \> 50<EFBFBD><EFBFBD>甇斗<EFBFBD>雿靝<EFBFBD>撘箏<EFBFBD>撖寡”餈𥡝<EFBFBD><EFBFBD>刻”<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝箄砲銵典<EFBFBD><EFBFBD>?<3F><><EFBFBD>?憿寧𤌍<E5AFA7><F0A48C8D><EFBFBD><EFBFBD><E6AEB7>?
* **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?* 憪讠<E686AA><E8AEA0>沒QL<51>亥砭銝剖<E98A9D><E58996>厚roject\_id雿靝蛹擐𤥁<E69390><EFBFBD><EFBFBD>∩辣<E288A9><E8BEA3><EFBFBD>沖EDCap::getData()<29><><EFBFBD>皛日<E79A9B><EFBFBD>嚗峕<E59A97><E5B395><EFBFBD><EFBFBD><EFBFBD>𣈯<EFBFBD><EFBFBD><E996AC>憪喹QL嚗𣬚靽脲<E99DBD><E884B2><EFBFBD>𧑐<EFBFBD>拍鍂鈭<E98D82>roject\_id<EFBFBD>ield\_name銝羓<EFBFBD><EFBFBD><EFBFBD>?
### **8.3 靚<>䰻憿菟𢒰甇餃儐<E9A483><EFBFBD>Survey Loop嚗?*
### **8.3 调查页面死循环Survey Loop**
* **场景:** 使用redcap\_survey\_page\_top钩子在满足条件时重定向用户。
* **陷阱:** 如果重定向逻辑有缺陷(例如,重定向条件在目标页面上也为真),用户将被弹回同一页面,导致浏览器挂起或崩溃。
* **解决方案:** 在执行重定向之前检查当前URL是否已经是目标URL。
### **8.4 移动同步中的“孤儿数据”**
* **场景:** 当移动设备检出项目时,管理员更改了项目结构(例如,删除了一个字段)。
* **后果:** 移动用户无法将数据同步回来,因为服务器上不再存在该字段。数据被困在设备上。
* **规则:** **绝对不要**在项目处于“生产”状态且有活跃移动用户时修改项目设计30。
* **<2A>箸艶嚗?* 雿輻鍂redcap\_survey\_page\_top<6F><EFBFBD><E68B99>冽說頞單辺隞嗆𧒄<E59786><EFBFBD><E6BB9A>𤑳鍂<F0A491B3><EFBFBD>?
* **<2A>琿𩐠嚗?* 憒<><E68692><EFBFBD><EFBFBD><E6BB9A><EFBFBD><EFBFBD><E9A489>厩撩<E58EA9><EFBFBD>靘见<E99D98>嚗屸<E59A97>摰𡁜<E691B0><F0A1819C>∩辣<E288A9>函𤌍<E587BD><F0A48C8D><EFBFBD><EFBFBD>銋煺蛹<E785BA><E89BB9><EFBFBD>嚗𣬚鍂<F0A3AC9A><EFBFBD>鋡怠撕<E680A0>𧼮<EFBFBD><EFBFBD>憿菟𢒰嚗<F0A292B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E886A5><EFBFBD>硋援皞<E68FB4><E79A9E>?
* **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?* <20><EFBFBD>銵屸<E98AB5>摰𡁜<E691B0>銋见<E98A8B>嚗峕<E59A97><E5B395><EFBFBD><E4BA99>䔛RL<52>臬炏撌脩<E6928C><E884A9>舐𤌍<E88890>䱗RL<52>?
### **8.4 蝘餃𢆡<E9A483>峕郊銝剔<E98A9D><E58994>𨅯迨<F0A885AF>踵㺭<E8B8B5><EFBFBD>?*
* **<2A>箸艶嚗?* 敶梶宏<E6A2B6>刻挽憭<E68CBD><E686AD><EFBFBD>粹★<E7B2B9>格𧒄嚗𣬚恣<F0A3AC9A><E681A3><EFBFBD><EFBFBD>湔㺿鈭<E3BABF><EFBFBD><EFBFBD><E6A183><EFBFBD><EFBFBD>靘见<E99D98><EFBFBD><E59A97><EFBFBD><EFBFBD><EFBFBD>銝芸<E98A9D>畾蛛<E795BE><E89B9B>?
* **<2A><EFBFBD>嚗?* 蝘餃𢆡<E9A483><EFBFBD><E586BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>甇亙<E79487><E4BA99><EFBFBD><E4BC90>牐蛹<E78990>滚𦛚<E6BB9A><EFBFBD>銝滚<E98A9D>摮睃銁霂亙<E99C82>畾萸<E795BE><E890B8><EFBFBD>株◤<E6A0AA>啣銁霈曉<E99C88>銝𨳍<E98A9D>?
* **閫<><E996AB>嚗?* **蝏嘥笆銝滩<E98A9D>**<EFBFBD>券★<EFBFBD><EFBFBD>鈭𢛶<EFBFBD>𦦵<EFBFBD>鈭把<EFBFBD>萘𠶖<EFBFBD><EFBFBD><EFBFBD><EFBFBD>㗇暑頝<EFBFBD><EFBFBD>函鍂<EFBFBD>瑟𧒄靽格㺿憿寧𤌍霈曇恣30<EFBFBD>?
## ---
**9\. 蝏栞捏**
REDCap的二次开发将一个被动的数据存储库转变为一个主动的研究操作系统。从临时插件向结构化外部模块框架的迁移代表了生态系统的成熟,优先考虑了安全性、可维护性和共享能力。
对于开发者而言成功的路径在于严格遵守框架规则使用抽象查询方法防止SQL注入清理输出以防止XSS并利用带有无限循环保护的标准钩子如redcap\_save\_record。
在移动领域MyCap和Mobile App的集成将REDCap的触角延伸到了患者的口袋和偏远的实地现场。然而这种连接性要求在API令牌管理和项目版本控制方面有严格的操作纪律以防止数据丢失。
通过利用这些高级功能——同时尊重联盟源代码的架构边界——机构可以部署既安全又可扩展的复杂、自动化和用户友好的研究环境。
REDCap<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝芾◤<EFBFBD><EFBFBD><EFBFBD>唳旿摮睃<EFBFBD>摨栞蓮<EFBFBD>䀝蛹銝<EFBFBD>銝芯蜓<EFBFBD><EFBFBD><EFBFBD>𠉛弦<EFBFBD><EFBFBD>蝟餌<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝湔𧒄<EFBFBD>雴辣<EFBFBD>𤑳<EFBFBD><EFBFBD><EFBFBD><EFBFBD>憭㚚<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝘颱誨銵其<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>頂蝏毺<EFBFBD><EFBFBD><EFBFBD>嚗䔶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>虾蝏湔擪<EFBFBD><EFBFBD><EFBFBD>曹澈<EFBFBD><EFBFBD><EFBFBD>?
撖嫣<EFBFBD><EFBFBD><EFBFBD>𤏸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗峕<EFBFBD><EFBFBD><EFBFBD>頝臬<EFBFBD><EFBFBD><EFBFBD>銝交聢<EFBFBD><EFBFBD><EFBFBD>沲閫<EFBFBD><EFBFBD>嚗帋蝙<EFBFBD>冽𡂝鞊⊥䰻霂䲮瘜閖俈甇㏎QL瘜典<EFBFBD>嚗峕<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>箔誑<EFBFBD>脫迫XSS嚗<EFBFBD><EFBFBD>拍鍂撣行<EFBFBD><EFBFBD>𣳇<EFBFBD>敺芰㴓靽脲擪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>偬摮𣂼<EFBFBD>redcap\_save\_record<72>?
<EFBFBD>函宏<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MyCap<EFBFBD>愢obile App<70><70><EFBFBD><EFBFBD>𣂼<EFBFBD>REDCap<61><70>圻閫鍦辣隡詨<E99AA1><EFBFBD><E988AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>餈𦦵<E9A488>摰𧼮𧑐<F0A7BCAE>啣㦤<E595A3><E3A6A4><EFBFBD><EFBFBD><EFBFBD>餈嗵<E9A488>餈墧𦻖<E5A2A7><EFBFBD><EFBFBD>銁API隞斤<E99A9E>蝞∠<E89D9E><E288A0>屸★<E5B1B8><EFBFBD><E6A183>祆綉<E7A586>嗆䲮<E59786><EFBFBD>銝交聢<E4BAA4><E881A2><EFBFBD>雿𦦵漯敺页<E695BA>隞仿俈甇<EFBCB8>桐腺憭晞<E686AD>?
<EFBFBD><EFBFBD><EFBFBD>拍鍂餈嗘<EFBFBD>擃条漣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𥪜<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𢞖<EFBFBD><EFBFBD>娍㦤<EFBFBD><EFBFBD>虾隞仿<EFBFBD>蝵脫𠳿摰匧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣬚鍂<EFBFBD><EFBFBD>憟賜<EFBFBD><EFBFBD>𠉛弦<EFBFBD><EFBFBD><EFBFBD>?
## ---
**10\. <20><><EFBFBD><EFBFBD>敶𤏪<E695B6><F0A48FAA><EFBFBD>皞𣂷誨<F0A382B7><E8AAA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
@@ -420,19 +358,19 @@ public function redcap\_save\_record($project\_id, $record, $instrument, $event\
// 蝖桐<E89D96><E6A190>睲賑<E79DB2>冽迤蝖桃<E89D96>憿寧𤌍銝𠹺<E98A9D><F0A0B9BA><EFBFBD>
if ($project\_id\!= $this\-\>getProjectSetting('target\_project')) return;
// 加载数据以检查条件
// <EFBFBD>㰘蝸<EFBFBD>唳旿隞交<EFBFBD><EFBFBD>交辺隞?
$data \= \\REDCap::getData($project\_id, 'array', $record);
// 检查'status'字段是否为'complete' (2)
// 注意:事件结构处理
// <EFBFBD><EFBFBD>?status'摮埈挾<EFBFBD>臬炏銝?complete' (2)
// 瘜冽<EFBFBD>嚗帋<EFBFBD>隞嗥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
if ($data\[$record\]\[$event\_id\]\['status'\] \== '2') {
// 霈啣<E99C88><E595A3><EFBFBD>
$this\-\>log("记录 $record 完成状态检查。", \[
$this\-\>log("霈啣<EFBFBD> $record 摰峕<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?, \[
'record' \=\> $record,
'status' \=\> 'complete'
\]);
// 执行自定义逻辑(例如,调用外部API
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>銋厰<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鍂憭㚚<EFBFBD>API嚗?
$this\-\>sendToExternalRegistry($record, $data);
}
}
@@ -441,10 +379,10 @@ public function redcap\_save\_record($project\_id, $record, $instrument, $event\
PHP
// 错误的写法SQL注入风险
// <EFBFBD>躰秤<EFBFBD><EFBFBD><EFBFBD>瘜𤏪<EFBFBD>SQL瘜典<EFBFBD>憌𡡞埯嚗?
// $sql \= "select value from redcap\_data where record \= '$record\_id'";
// 正确的写法
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>瘜?
$sql \= "select value from redcap\_data where project\_id \=? and record \=? and field\_name \=?";
$result \= $this\-\>query($sql, \[$project\_id, $record\_id, 'target\_field'\]);
@@ -454,13 +392,13 @@ while($row \= $result\-\>fetch\_assoc()){
//...憭<><E686AD><EFBFBD><EFBFBD>
}
### **A.3 API Python 交互(处理大批量数据)**
### **A.3 API Python 鈭支<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>唳旿嚗?*
Python
def export\_large\_project(api\_url, token):
"""
分批导出大型项目数据以避免超时
<EFBFBD><EFBFBD>鸌撖澆枂憭批<EFBFBD>憿寧𤌍<EFBFBD>唳旿隞仿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
"""
\# 1\. 擐硋<E69390><E7A18B><EFBFBD><E79195><EFBFBD><EFBFBD>㕑扇敶𣗏D
payload \= {
@@ -472,13 +410,13 @@ def export\_large\_project(api\_url, token):
r \= requests.post(api\_url, data=payload)
records \= \[x\['record\_id'\] for x in r.json()\]
\# 2\. 分块处理 (例如每块100条)
\# 2\. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (靘见<E99D98>瘥誩<E798A5>100<EFBFBD>?
chunk\_size \= 100
all\_data \=
for i in range(0, len(records), chunk\_size):
chunk \= records\[i:i \+ chunk\_size\]
\# 构建请求特定的记录
\# <EFBFBD><EFBFBD>遣霂瑟<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>扇敶?
batch\_payload \= {
'token': token,
'content': 'record',
@@ -491,57 +429,57 @@ def export\_large\_project(api\_url, token):
r\_batch \= requests.post(api\_url, data=batch\_payload)
all\_data.extend(r\_batch.json())
print(f"已导出 {len(all\_data)} 条记录...")
print(f"撌脣紡<EFBFBD>?{len(all\_data)} <EFBFBD>∟扇敶?..")
return pd.DataFrame(all\_data)
#### **引用的著作**
#### **撘閧鍂<EFBFBD><EFBFBD><EFBFBD>雿?*
1. Supporting rapid innovation in research data capture and management: the REDCap external module framework \- PubMed Central, 访问时间为 十二月 29, 2025 [https://pmc.ncbi.nlm.nih.gov/articles/PMC12202089/](https://pmc.ncbi.nlm.nih.gov/articles/PMC12202089/)
2. The Process of Installing REDCap, a Web Based Database Supporting Biomedical Research: The First Year \- PubMed Central, 访问时间为 十二月 29, 2025 [https://pmc.ncbi.nlm.nih.gov/articles/PMC4287671/](https://pmc.ncbi.nlm.nih.gov/articles/PMC4287671/)
3. Join & Get REDCap, 访问时间为 十二月 29, 2025 [https://projectredcap.org/join/](https://projectredcap.org/join/)
4. How to Acquire a REDCap License \- NACC Docs, 访问时间为 十二月 29, 2025 [https://docs.naccdata.org/edc/data-capture-development/how-to-acquire-a-redcap-license](https://docs.naccdata.org/edc/data-capture-development/how-to-acquire-a-redcap-license)
5. 访问时间为 十二月 29, 2025 [https://projectredcap.org/join/\#:\~:text=Although%20REDCap%20is%20available%20at,your%20organization%20must%20be%20executed.](https://projectredcap.org/join/#:~:text=Although%20REDCap%20is%20available%20at,your%20organization%20must%20be%20executed.)
6. FAQ \- REDCap, 访问时间为 十二月 29, 2025 [https://projectredcap.org/about/faq/](https://projectredcap.org/about/faq/)
7. Installation & Technical Requirements \- REDCap, 访问时间为 十二月 29, 2025 [https://projectredcap.org/software/requirements/](https://projectredcap.org/software/requirements/)
8. REDCap Technical Overview Introduction REDCap Infrastructure: Best Practices and Dependencies, 访问时间为 十二月 29, 2025 [https://projectredcap.org/wp-content/resources/REDCapTechnicalOverview.pdf](https://projectredcap.org/wp-content/resources/REDCapTechnicalOverview.pdf)
9. REDCap External Module Development for REDCap Admins and Developers, 访问时间为 十二月 29, 2025 [https://ctsit.github.io/redcap\_external\_module\_development\_guide/guide\_for\_admins\_and\_devs.html](https://ctsit.github.io/redcap_external_module_development_guide/guide_for_admins_and_devs.html)
10. REDCap 'Hello World' external module development guide \- Ayesh Alshukri, 访问时间为 十二月 29, 2025 [https://ayeshalshukri.co.uk/category/guides/redcap-external-module-development-guide-hello-world/](https://ayeshalshukri.co.uk/category/guides/redcap-external-module-development-guide-hello-world/)
11. REDCap External Module Development for Developers \- GitHub Pages, 访问时间为 十二月 29, 2025 [https://ctsit.github.io/redcap\_external\_module\_development\_guide/guide\_for\_devs.html](https://ctsit.github.io/redcap_external_module_development_guide/guide_for_devs.html)
12. REDCap External Module Development Beginner's Guide \- GitHub, 访问时间为 十二月 29, 2025 [https://github.com/vanderbilt-redcap/external-module-framework-docs/blob/main/guide.md](https://github.com/vanderbilt-redcap/external-module-framework-docs/blob/main/guide.md)
13. Shazam.php \- GitHub, 访问时间为 十二月 29, 2025 [https://github.com/susom/redcap-em-shazam/blob/master/Shazam.php](https://github.com/susom/redcap-em-shazam/blob/master/Shazam.php)
14. redcap-copy-data-on-save/CopyDataOnSave.php at main · lsgs ..., 访问时间为 十二月 29, 2025 [https://github.com/lsgs/redcap-copy-data-on-save/blob/main/CopyDataOnSave.php](https://github.com/lsgs/redcap-copy-data-on-save/blob/main/CopyDataOnSave.php)
15. README.md · main · BRIC / Epic Hl7 Integration · GitLab, 访问时间为 十二月 29, 2025 [https://gitlab.msu.edu/bric/epic-hl7-integration/-/blob/main/README.md](https://gitlab.msu.edu/bric/epic-hl7-integration/-/blob/main/README.md)
16. REDCap-Changelog\_8.1.0.docx, 访问时间为 十二月 29, 2025 [https://www.bu.edu/ctsi/files/2016/02/REDCap-Changelog\_8.1.0.docx](https://www.bu.edu/ctsi/files/2016/02/REDCap-Changelog_8.1.0.docx)
17. vanderbilt-redcap/auto-record-generation: Module that allows for a new record to be generated in another project (or the same project) on a flagging field being saved. Allows for data fields to be transferred to the new record as well. \- GitHub, 访问时间为 十二月 29, 2025 [https://github.com/vanderbilt-redcap/auto-record-generation](https://github.com/vanderbilt-redcap/auto-record-generation)
18. 2018 REDCapCon Poster Competition, 访问时间为 十二月 29, 2025 [https://projectredcap.org/wp-content/uploads/2018/08/2018-REDCapCon-Posters.pdf](https://projectredcap.org/wp-content/uploads/2018/08/2018-REDCapCon-Posters.pdf)
19. vanderbilt-redcap/external-module-framework-docs \- GitHub, 访问时间为 十二月 29, 2025 [https://github.com/vanderbilt-redcap/external-module-framework-docs](https://github.com/vanderbilt-redcap/external-module-framework-docs)
20. CVE-2017-7351: REDCap 7.0.0 \- 7.0.10 SQL Injection \- LRQA, 访问时间为 十二月 29, 2025 [https://www.lrqa.com/en/cyber-labs/cve-2017-7351-redcap-7-0-0-7-0-10-sql-injection/](https://www.lrqa.com/en/cyber-labs/cve-2017-7351-redcap-7-0-0-7-0-10-sql-injection/)
21. ctsit/redcap\_webservices: REDCap external module that provides a way to expose SQL query results to the external world. \- GitHub, 访问时间为 十二月 29, 2025 [https://github.com/ctsit/redcap\_webservices](https://github.com/ctsit/redcap_webservices)
22. REDCap: Multiple Cross-Site Scripting (XSS) Vulnerabilities \- LevelBlue, 访问时间为 十二月 29, 2025 [https://levelblue.com/blogs/spiderlabs-blog/redcap-multiple-cross-site-scripting-xss-vulnerabilities](https://levelblue.com/blogs/spiderlabs-blog/redcap-multiple-cross-site-scripting-xss-vulnerabilities)
23. Yale External Module (EM): Checklist for EM Development \- REDCap@Yale, 访问时间为 十二月 29, 2025 [https://portal.redcap.yale.edu/media/91/download?inline](https://portal.redcap.yale.edu/media/91/download?inline)
24. Article \- REDCap Security Information \- TeamDynamix, 访问时间为 十二月 29, 2025 [https://ecu.teamdynamix.com/TDClient/1409/Portal/KB/ArticleDet?ID=67288](https://ecu.teamdynamix.com/TDClient/1409/Portal/KB/ArticleDet?ID=67288)
25. Mobile App Guide \- CENTER FOR RESEARCH INFORMATICS, 访问时间为 十二月 29, 2025 [https://cri.uchicago.edu/wp-content/uploads/2015/12/REDCap-Mobile-App-Guide.pdf](https://cri.uchicago.edu/wp-content/uploads/2015/12/REDCap-Mobile-App-Guide.pdf)
26. Mobile App User's Guide, 访问时间为 十二月 29, 2025 [https://www.ctsi.ufl.edu/wordpress/files/2023/12/new-REDCap-Mobile-App-Guide-1.pdf](https://www.ctsi.ufl.edu/wordpress/files/2023/12/new-REDCap-Mobile-App-Guide-1.pdf)
27. CFRI DM REDCap Mobile App Manual, 访问时间为 十二月 29, 2025 [https://projectredcap.org/wp-content/uploads/2016/08/CFRI-DM-REDCap-Mobile-App-Manual.pdf](https://projectredcap.org/wp-content/uploads/2016/08/CFRI-DM-REDCap-Mobile-App-Manual.pdf)
28. Records \- PyCap \- REDCap-Tools, 访问时间为 十二月 29, 2025 [http://redcap-tools.github.io/PyCap/api\_reference/records/](http://redcap-tools.github.io/PyCap/api_reference/records/)
29. API-Best-Practices-and-Guide-1.docx \- UConn Health, 访问时间为 十二月 29, 2025 [https://health.uconn.edu/clinical-research-center/wp-content/uploads/sites/50/2024/02/API-Best-Practices-and-Guide-1.docx](https://health.uconn.edu/clinical-research-center/wp-content/uploads/sites/50/2024/02/API-Best-Practices-and-Guide-1.docx)
30. REDCap: Updating Mobile App Projects \- SMPH Enterprise Applications \- Research KB, 访问时间为 十二月 29, 2025 [https://kb.wisc.edu/smph/informatics/page.php?id=152765](https://kb.wisc.edu/smph/informatics/page.php?id=152765)
31. In-Depth Guide | REDCap, 访问时间为 十二月 29, 2025 [https://projectredcap.org/wp-content/uploads/2019/07/In-Depth-Guide2019.pdf](https://projectredcap.org/wp-content/uploads/2019/07/In-Depth-Guide2019.pdf)
32. Services | REDCap \- The George Washington University, 访问时间为 十二月 29, 2025 [https://redcap.smhs.gwu.edu/services](https://redcap.smhs.gwu.edu/services)
33. MyCap Resources, 访问时间为 十二月 29, 2025 [https://projectmycap.org/mycap-resources/](https://projectmycap.org/mycap-resources/)
34. MyCap Mobilizing the participant voice, 访问时间为 十二月 29, 2025 [https://projectmycap.org/](https://projectmycap.org/)
35. MyCap: a flexible and configurable platform for mobilizing the participant voice \- PMC, 访问时间为 十二月 29, 2025 [https://pmc.ncbi.nlm.nih.gov/articles/PMC9165428/](https://pmc.ncbi.nlm.nih.gov/articles/PMC9165428/)
36. MyCap \- REDCap Support \- University of Alberta, 访问时间为 十二月 29, 2025 [https://help.redcap.ualberta.ca/help-and-faq/mycap](https://help.redcap.ualberta.ca/help-and-faq/mycap)
37. REDCap: MyCap \- Active Task List \- SMPH Enterprise Applications \- Research KB, 访问时间为 十二月 29, 2025 [https://kb.wisc.edu/smph/informatics/133154](https://kb.wisc.edu/smph/informatics/133154)
38. REDCap External Module MyCap, 访问时间为 十二月 29, 2025 [https://projectmycap.org/tag/redcap-external-module/](https://projectmycap.org/tag/redcap-external-module/)
39. MYCAP HELP Table of Contents \- REDCap, 访问时间为 十二月 29, 2025 [https://redcap.med.upenn.edu/redcap\_v14.3.13/Resources/misc/mycap\_help.pdf](https://redcap.med.upenn.edu/redcap_v14.3.13/Resources/misc/mycap_help.pdf)
40. How to use exportRecordsTyped function from the redcapAPI package to import the data without factors? \- Stack Overflow, 访问时间为 十二月 29, 2025 [https://stackoverflow.com/questions/76815004/how-to-use-exportrecordstyped-function-from-the-redcapapi-package-to-import-the](https://stackoverflow.com/questions/76815004/how-to-use-exportrecordstyped-function-from-the-redcapapi-package-to-import-the)
41. JSONDecodeError · Issue \#265 · redcap-tools/PyCap \- GitHub, 访问时间为 十二月 29, 2025 [https://github.com/redcap-tools/PyCap/issues/265](https://github.com/redcap-tools/PyCap/issues/265)
42. Importing data into REDCap Backup options API Basics \- ITHS, 访问时间为 十二月 29, 2025 [https://www.iths.org/wp-content/uploads/REDCap-Importing-Exporting-302.pdf](https://www.iths.org/wp-content/uploads/REDCap-Importing-Exporting-302.pdf)
43. BCCHR-IT/data-entry-trigger-builder: An External Module that provides an interface to create a DET between a source and destination project. \- GitHub, 访问时间为 十二月 29, 2025 [https://github.com/BCCHR-IT/data-entry-trigger-builder](https://github.com/BCCHR-IT/data-entry-trigger-builder)
44. RedCap API export \- Python Discussions, 访问时间为 十二月 29, 2025 [https://discuss.python.org/t/redcap-api-export/32252](https://discuss.python.org/t/redcap-api-export/32252)
45. REDCap External Module for automated generation of record event schedules. \- GitHub, 访问时间为 十二月 29, 2025 [https://github.com/lsgs/redcap-autoschedule](https://github.com/lsgs/redcap-autoschedule)
46. redcap-autoschedule/README.md at master \- GitHub, 访问时间为 十二月 29, 2025 [https://github.com/lsgs/redcap-autoschedule/blob/master/README.md](https://github.com/lsgs/redcap-autoschedule/blob/master/README.md)
47. redcap-repo · GitHub Topics, 访问时间为 十二月 29, 2025 [https://github.com/topics/redcap-repo](https://github.com/topics/redcap-repo)
48. A Comprehensive Guide to REDCap | UNMC, 访问时间为 十二月 29, 2025 [https://www.unmc.edu/vcr/\_documents/unmc\_redcap\_usage.pdf](https://www.unmc.edu/vcr/_documents/unmc_redcap_usage.pdf)
1. Supporting rapid innovation in research data capture and management: the REDCap external module framework \- PubMed Central, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://pmc.ncbi.nlm.nih.gov/articles/PMC12202089/](https://pmc.ncbi.nlm.nih.gov/articles/PMC12202089/)
2. The Process of Installing REDCap, a Web Based Database Supporting Biomedical Research: The First Year \- PubMed Central, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://pmc.ncbi.nlm.nih.gov/articles/PMC4287671/](https://pmc.ncbi.nlm.nih.gov/articles/PMC4287671/)
3. Join & Get REDCap, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://projectredcap.org/join/](https://projectredcap.org/join/)
4. How to Acquire a REDCap License \- NACC Docs, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://docs.naccdata.org/edc/data-capture-development/how-to-acquire-a-redcap-license](https://docs.naccdata.org/edc/data-capture-development/how-to-acquire-a-redcap-license)
5. 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://projectredcap.org/join/\#:\~:text=Although%20REDCap%20is%20available%20at,your%20organization%20must%20be%20executed.](https://projectredcap.org/join/#:~:text=Although%20REDCap%20is%20available%20at,your%20organization%20must%20be%20executed.)
6. FAQ \- REDCap, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://projectredcap.org/about/faq/](https://projectredcap.org/about/faq/)
7. Installation & Technical Requirements \- REDCap, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://projectredcap.org/software/requirements/](https://projectredcap.org/software/requirements/)
8. REDCap Technical Overview Introduction REDCap Infrastructure: Best Practices and Dependencies, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://projectredcap.org/wp-content/resources/REDCapTechnicalOverview.pdf](https://projectredcap.org/wp-content/resources/REDCapTechnicalOverview.pdf)
9. REDCap External Module Development for REDCap Admins and Developers, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://ctsit.github.io/redcap\_external\_module\_development\_guide/guide\_for\_admins\_and\_devs.html](https://ctsit.github.io/redcap_external_module_development_guide/guide_for_admins_and_devs.html)
10. REDCap 'Hello World' external module development guide \- Ayesh Alshukri, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://ayeshalshukri.co.uk/category/guides/redcap-external-module-development-guide-hello-world/](https://ayeshalshukri.co.uk/category/guides/redcap-external-module-development-guide-hello-world/)
11. REDCap External Module Development for Developers \- GitHub Pages, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://ctsit.github.io/redcap\_external\_module\_development\_guide/guide\_for\_devs.html](https://ctsit.github.io/redcap_external_module_development_guide/guide_for_devs.html)
12. REDCap External Module Development Beginner's Guide \- GitHub, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://github.com/vanderbilt-redcap/external-module-framework-docs/blob/main/guide.md](https://github.com/vanderbilt-redcap/external-module-framework-docs/blob/main/guide.md)
13. Shazam.php \- GitHub, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://github.com/susom/redcap-em-shazam/blob/master/Shazam.php](https://github.com/susom/redcap-em-shazam/blob/master/Shazam.php)
14. redcap-copy-data-on-save/CopyDataOnSave.php at main lsgs ..., 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://github.com/lsgs/redcap-copy-data-on-save/blob/main/CopyDataOnSave.php](https://github.com/lsgs/redcap-copy-data-on-save/blob/main/CopyDataOnSave.php)
15. README.md main BRIC / Epic Hl7 Integration GitLab, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://gitlab.msu.edu/bric/epic-hl7-integration/-/blob/main/README.md](https://gitlab.msu.edu/bric/epic-hl7-integration/-/blob/main/README.md)
16. REDCap-Changelog\_8.1.0.docx, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://www.bu.edu/ctsi/files/2016/02/REDCap-Changelog\_8.1.0.docx](https://www.bu.edu/ctsi/files/2016/02/REDCap-Changelog_8.1.0.docx)
17. vanderbilt-redcap/auto-record-generation: Module that allows for a new record to be generated in another project (or the same project) on a flagging field being saved. Allows for data fields to be transferred to the new record as well. \- GitHub, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://github.com/vanderbilt-redcap/auto-record-generation](https://github.com/vanderbilt-redcap/auto-record-generation)
18. 2018 REDCapCon Poster Competition, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://projectredcap.org/wp-content/uploads/2018/08/2018-REDCapCon-Posters.pdf](https://projectredcap.org/wp-content/uploads/2018/08/2018-REDCapCon-Posters.pdf)
19. vanderbilt-redcap/external-module-framework-docs \- GitHub, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://github.com/vanderbilt-redcap/external-module-framework-docs](https://github.com/vanderbilt-redcap/external-module-framework-docs)
20. CVE-2017-7351: REDCap 7.0.0 \- 7.0.10 SQL Injection \- LRQA, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://www.lrqa.com/en/cyber-labs/cve-2017-7351-redcap-7-0-0-7-0-10-sql-injection/](https://www.lrqa.com/en/cyber-labs/cve-2017-7351-redcap-7-0-0-7-0-10-sql-injection/)
21. ctsit/redcap\_webservices: REDCap external module that provides a way to expose SQL query results to the external world. \- GitHub, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://github.com/ctsit/redcap\_webservices](https://github.com/ctsit/redcap_webservices)
22. REDCap: Multiple Cross-Site Scripting (XSS) Vulnerabilities \- LevelBlue, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://levelblue.com/blogs/spiderlabs-blog/redcap-multiple-cross-site-scripting-xss-vulnerabilities](https://levelblue.com/blogs/spiderlabs-blog/redcap-multiple-cross-site-scripting-xss-vulnerabilities)
23. Yale External Module (EM): Checklist for EM Development \- REDCap@Yale, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://portal.redcap.yale.edu/media/91/download?inline](https://portal.redcap.yale.edu/media/91/download?inline)
24. Article \- REDCap Security Information \- TeamDynamix, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://ecu.teamdynamix.com/TDClient/1409/Portal/KB/ArticleDet?ID=67288](https://ecu.teamdynamix.com/TDClient/1409/Portal/KB/ArticleDet?ID=67288)
25. Mobile App Guide \- CENTER FOR RESEARCH INFORMATICS, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://cri.uchicago.edu/wp-content/uploads/2015/12/REDCap-Mobile-App-Guide.pdf](https://cri.uchicago.edu/wp-content/uploads/2015/12/REDCap-Mobile-App-Guide.pdf)
26. Mobile App User's Guide, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://www.ctsi.ufl.edu/wordpress/files/2023/12/new-REDCap-Mobile-App-Guide-1.pdf](https://www.ctsi.ufl.edu/wordpress/files/2023/12/new-REDCap-Mobile-App-Guide-1.pdf)
27. CFRI DM REDCap Mobile App Manual, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://projectredcap.org/wp-content/uploads/2016/08/CFRI-DM-REDCap-Mobile-App-Manual.pdf](https://projectredcap.org/wp-content/uploads/2016/08/CFRI-DM-REDCap-Mobile-App-Manual.pdf)
28. Records \- PyCap \- REDCap-Tools, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[http://redcap-tools.github.io/PyCap/api\_reference/records/](http://redcap-tools.github.io/PyCap/api_reference/records/)
29. API-Best-Practices-and-Guide-1.docx \- UConn Health, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://health.uconn.edu/clinical-research-center/wp-content/uploads/sites/50/2024/02/API-Best-Practices-and-Guide-1.docx](https://health.uconn.edu/clinical-research-center/wp-content/uploads/sites/50/2024/02/API-Best-Practices-and-Guide-1.docx)
30. REDCap: Updating Mobile App Projects \- SMPH Enterprise Applications \- Research KB, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://kb.wisc.edu/smph/informatics/page.php?id=152765](https://kb.wisc.edu/smph/informatics/page.php?id=152765)
31. In-Depth Guide | REDCap, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://projectredcap.org/wp-content/uploads/2019/07/In-Depth-Guide2019.pdf](https://projectredcap.org/wp-content/uploads/2019/07/In-Depth-Guide2019.pdf)
32. Services | REDCap \- The George Washington University, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://redcap.smhs.gwu.edu/services](https://redcap.smhs.gwu.edu/services)
33. MyCap Resources, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://projectmycap.org/mycap-resources/](https://projectmycap.org/mycap-resources/)
34. MyCap <EFBFBD>?Mobilizing the participant voice, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://projectmycap.org/](https://projectmycap.org/)
35. MyCap: a flexible and configurable platform for mobilizing the participant voice \- PMC, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://pmc.ncbi.nlm.nih.gov/articles/PMC9165428/](https://pmc.ncbi.nlm.nih.gov/articles/PMC9165428/)
36. MyCap \- REDCap Support \- University of Alberta, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://help.redcap.ualberta.ca/help-and-faq/mycap](https://help.redcap.ualberta.ca/help-and-faq/mycap)
37. REDCap: MyCap \- Active Task List \- SMPH Enterprise Applications \- Research KB, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://kb.wisc.edu/smph/informatics/133154](https://kb.wisc.edu/smph/informatics/133154)
38. REDCap External Module <EFBFBD>?MyCap, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://projectmycap.org/tag/redcap-external-module/](https://projectmycap.org/tag/redcap-external-module/)
39. MYCAP HELP Table of Contents \- REDCap, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://redcap.med.upenn.edu/redcap\_v14.3.13/Resources/misc/mycap\_help.pdf](https://redcap.med.upenn.edu/redcap_v14.3.13/Resources/misc/mycap_help.pdf)
40. How to use exportRecordsTyped function from the redcapAPI package to import the data without factors? \- Stack Overflow, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://stackoverflow.com/questions/76815004/how-to-use-exportrecordstyped-function-from-the-redcapapi-package-to-import-the](https://stackoverflow.com/questions/76815004/how-to-use-exportrecordstyped-function-from-the-redcapapi-package-to-import-the)
41. JSONDecodeError Issue \#265 redcap-tools/PyCap \- GitHub, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://github.com/redcap-tools/PyCap/issues/265](https://github.com/redcap-tools/PyCap/issues/265)
42. Importing data into REDCap <EFBFBD>?Backup options <EFBFBD>?API Basics \- ITHS, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://www.iths.org/wp-content/uploads/REDCap-Importing-Exporting-302.pdf](https://www.iths.org/wp-content/uploads/REDCap-Importing-Exporting-302.pdf)
43. BCCHR-IT/data-entry-trigger-builder: An External Module that provides an interface to create a DET between a source and destination project. \- GitHub, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://github.com/BCCHR-IT/data-entry-trigger-builder](https://github.com/BCCHR-IT/data-entry-trigger-builder)
44. RedCap API export \- Python Discussions, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://discuss.python.org/t/redcap-api-export/32252](https://discuss.python.org/t/redcap-api-export/32252)
45. REDCap External Module for automated generation of record event schedules. \- GitHub, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://github.com/lsgs/redcap-autoschedule](https://github.com/lsgs/redcap-autoschedule)
46. redcap-autoschedule/README.md at master \- GitHub, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://github.com/lsgs/redcap-autoschedule/blob/master/README.md](https://github.com/lsgs/redcap-autoschedule/blob/master/README.md)
47. redcap-repo GitHub Topics, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://github.com/topics/redcap-repo](https://github.com/topics/redcap-repo)
48. A Comprehensive Guide to REDCap | UNMC, 霈輸䔮<EFBFBD>園𡢿銝?<3F><><EFBFBD><EFBFBD>?29, 2025嚗?[https://www.unmc.edu/vcr/\_documents/unmc\_redcap\_usage.pdf](https://www.unmc.edu/vcr/_documents/unmc_redcap_usage.pdf)