
Smartstore导出框架详解配置文件、过滤器、映射与投影全解析【免费下载链接】SmartstoreA modular, scalable and ultra-fast open-source all-in-one eCommerce platform built on ASP.NET Core 10项目地址: https://gitcode.com/GitHub_Trending/smar/SmartstoreSmartstore 是一款基于 ASP.NET Core 10 构建的模块化、可扩展、超高速开源一体化电商平台。它的**导出框架Data Exchange Export是平台的数据交换核心通过导出配置文件、过滤器ExportFilter、投影ExportProjection与同步映射SyncMapping**四大多大组件就能把商品、订单、客户等数据批量导出为 CSV、XML 等格式并自动发布到文件系统、邮件、FTP 或 HTTP 接口。本文用通俗的方式带你一次看懂这套导出机制。一、整体架构4 个角色各司其职 Smartstore 的导出框架由 4 个核心角色组成官方文档见 export.md角色作用关键源码数据导出器核心引擎负责高性能采集数据、按数据段喂给导出器DataExporter.cs导出提供器Provider把数据转换成 CSV / XML 等具体格式并写入流ExportProviderBase.cs导出配置文件Profile绑定提供器集中管理任务、分区、过滤器、投影、配置、部署ExportProfile.cs导出部署Deployment决定导出文件去哪儿邮件、FTP、HTTP POST、公共文件夹等ExportDeployment.cs整个流程非常直观用户在后台创建导出配置文件选择提供器并设置过滤器、投影配置关联一个计划任务可以用 cron 表达式定时执行也可以手动触发执行时数据导出器分批次分段从数据库读取数据提供器把每一段数据写进文件流最后按部署配置把文件发送出去如发到邮箱或 FTP 服务器。 这套机制的典型应用场景把商品目录导出成 Google Merchant Center 的 XML 数据流投放到 Google 购物广告触达更多客户。参考内置提供器 GmcXmlExportProvider.cs。二、导出配置文件一切的总开关 **导出配置文件Export Profile**是导出框架的枢纽实体位于 Domain/ExportProfile.cs。它把一次导出的所有要素打包在一起让运营人员无需写代码即可完成配置ProviderSystemName—— 指定使用哪个导出提供器同一个提供器可以挂到多个不同配置的配置文件上Filtering / Projection / ProviderConfigData—— 三段以 XML 格式保存的过滤器数据、投影数据和提供器专属配置数据Task—— 关联的计划任务用于定时调度Offset / Limit / BatchSize—— 跳过记录数、单次数据库往返读取量、批处理大小控制大数据量导出的内存占用PerStore—— 是否为每个店铺分别执行一遍导出多店铺站点必备CreateZipArchive / Cleanup—— 是否打包成 ZIP 归档、部署后是否清理临时文件CompletedEmailAddresses—— 导出完成后发通知邮件。配置文件分两类内置系统配置文件不可删除如后台订单表格的订单导出和用户自定义配置文件。管理配置文件统一通过 IExportProfileService.cs。框架级的全局参数则在 DataExchangeSettings.cs 中集中定义例如MaxFileNameLength导出框架生成文件名的最大长度默认 50 字符导入侧的ImageImportFolder、ImageDownloadTimeout等图片导入参数。提供器专属配置是配置文件的另一亮点提供器可以声明一个配置模型标记[Serializable, CustomModelPart]它就会被序列化后存进配置文件的ProviderConfigData字段并在后台配置文件的Configuration选项卡中以表单形式展示执行导出时通过ExportExecuteContext.ConfigurationData反序列化取用。三、过滤器ExportFilter只导出你想要的数据 过滤器决定导哪些记录实体定义在 Domain/ExportFilter.cs按实体类型划分为几个区域通用条件所有实体StoreId限定店铺0 表示全部CreatedFrom / CreatedTo按创建时间区间筛选IsPublished只导出已发布 / 未发布的记录。商品条件ProductID 区间IdMinimum / IdMaximum、价格区间PriceMinimum / PriceMaximum——非常适合做增量导出按类目CategoryIds支持IncludeSubCategories包含子类目、品牌ManufacturerId、商品标签、商品类型、可见性、库存范围筛选WithoutCategories / WithoutManufacturers只导出未归类 / 未关联品牌的商品便于补数据。订单条件Order按订单状态、支付状态、物流状态 ID 数组筛选。客户条件Customer是否激活、是否免税、客户角色、账单 / 配送国家最近活跃时间区间、HasSpentAtLeastAmount至少消费金额、HasPlacedAtLeastOrders至少下单次数——做客户分层营销时非常实用。 小贴士过滤器与投影配合使用效果最好——先过滤出最近 7 天新建、价格 100 以上的商品再投影成德语文本 欧元价格一条营销数据流就配好了。四、投影ExportProjection给数据换个面貌 如果说过滤器决定导谁投影就决定以什么面貌导出。实体定义在 Domain/ExportProjection.cs它是把数据库原始值加工成业务语义值的机制通用投影所有实体LanguageId—— 指定导出语言商品名称等本地化字段会以该语言的译文输出CurrencyId—— 指定货币价格自动按汇率换算CustomerId—— 以某个客户价格组 / 客户层级的视角计算价格。商品投影Product——功能最丰富DescriptionMerging描述合并策略长描述 / 短描述如何合并DescriptionToPlainText把 HTML 描述转成纯文本RemoveCriticalCharactersCriticalCharacters剔除描述中的危险字符保证 CSV 数据干净PriceType选择计算价格类型如税前 / 税后、普通价 / 促销价Brand / ShippingTime / ShippingCosts / FreeShippingThreshold品牌、发货时间、运费的回退值fallback商品自身没设置时就用投影里填的默认值AttributeCombinationAsProduct把属性组合SKU 变体当作独立商品导出变体合并方式由AttributeCombinationValueMerging控制NumberOfMediaFiles / PictureSize导出图片数量与尺寸。订单投影OrderOrderStatusChange导出完成后把订单状态自动流转例如导出给第三方仓库后即标记为已发货。投影与过滤的结果会作用在 DynamicEntity.cs 上——它是包裹真实实体的动态对象额外携带以_开头的附加属性如_Brand、_CategoryPath、_DetailUrl、_Price计算后价格、_MainPictureUrl等让提供器取数时开箱即用。五、映射与部署数据的身份证与目的地 同步映射SyncMappingDomain/SyncMapping.cs 记录了 Smartstore 实体与外部系统之间的对应关系EntityId站内 ID↔SourceKey外部系统键并按ContextName外部应用名区分来源还保存SourceHash和SyncedOnUtc用于增量比对。它是商品同步、外部渠道集成时防止重复导入的关键身份证。导出部署ExportDeploymentDomain/ExportDeployment.cs 定义导出文件如何处理。内置的 IFilePublisher.cs 实现包括发布方式场景文件系统存到服务器指定目录邮件Email直接把文件发到邮箱HTTP POST推送到第三方 WebhookFTP上传到 FTP 服务器公共文件夹Public folder放到网站可访问目录供下载一个导出配置文件可以挂任意多个发布器导出成功后逐个调用PublishAsync。关联数据导出是产品导出的隐藏大招开启ExportRelatedData后数据导出器会额外生成分层价格TierPrice、变体属性值、变体属性组合等附属文件采用命名约定自动与主文件配对——先导出 CSV → 人工在 Excel 里改价格 → 再批量导入更新非常顺手。六、核心源码与文档导航 资料路径官方导出文档中文读者推荐入口dev-docs/framework/platform/export.md数据导出器核心引擎src/Smartstore.Core/Platform/DataExchange/Export/DataExporter.cs分段读取器高性能分批关键src/Smartstore.Core/Platform/DataExchange/Export/ExportDataSegmenter.cs提供器基类src/Smartstore.Core/Platform/DataExchange/Export/ExportProviderBase.cs配置文件 / 过滤器 / 投影 / 映射实体src/Smartstore.Core/Platform/DataExchange/Domain/部署发布器集合src/Smartstore.Core/Platform/DataExchange/Export/Deployment/内置示例Google 购物数据流src/Smartstore.Modules/Smartstore.Google.MerchantCenter/框架级设置src/Smartstore.Core/Platform/DataExchange/Configuration/DataExchangeSettings.cs写在最后Smartstore 导出框架的设计哲学可以总结为一句话配置驱动、插件化、分段流式。运营人员通过导出配置文件即可完成筛选谁、长什么样、发到哪里的全部决策开发者只需继承ExportProviderBase编写一个轻量提供器就能把任意格式的数据流接入整个调度、监控与发布体系。无论是接入 Google 商品流还是每日定时向 ERP 推送订单这套框架都能帮你从容应对。【免费下载链接】SmartstoreA modular, scalable and ultra-fast open-source all-in-one eCommerce platform built on ASP.NET Core 10项目地址: https://gitcode.com/GitHub_Trending/smar/Smartstore创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考