Sitecore商业数据,一个实用的方法:第二部分(更好)

时间阅读: 大约5 - 7分钟
用于: Sitecore商务开发者,Sitecore开发者,高级开发者 & 领导
主要结论: 用这种“更好”的方法, 利用Sitecore 商务中的初始化管道来创建所有环境通用的实体.

In 第1部分, 我介绍了如何使用Postman在Sitecore 商务环境中自动初始化数据. 如果你还没读过 第1部分, 我认为尽管使用Postman至少对创建一致性是“好”的, 商务环境中的自动数据, 有一些显著的缺点. 在这篇文章中, 我将介绍另一种方法, 哪种方法的缺点比第一种方法少.

商务初始化管道

此方法利用商务中的Initialize管道来执行初始化步骤 第一种方法. 因为它很可能是一体化的, UAT和生产需要相同的初始设置, 在初始化管道中配置和执行这些是有意义的. 在下面的图片中, 初始化管道用于创建目录, 价格的书, 以及所有环境中通用的其他商业实体.

文件编辑 
@调试 
sql 
税 
上下文) . '"Sync () ; 
Yiew项目 
itiaIizeEnvironment810ck.cs - e 
构建 
调试 
测试分析工具 
任何CPU 
扩展窗口帮助 
Sitecore.商务.引擎 
搜索Visual Studio (Ctrl+Q) 
Sitecore.商务.引擎•• 
. 请告诉我 
x 
卡乐尔.商务.PIugin.CataIog 
•IntitiaIizeCataIogs (商务PipeIineExecutionContext上下文) 
[Inferr edpipel ineDispI (Initi ali zeEnvi ronrntBIock)] 
公共类InitializeEnvironmentBIock: Pipeline810ckc字符串, 字符串, a-rcePipeIineExecutionC1text» 
E: 
37 
私人只读的a-rceCumander; 
private readonly IPersist实体PipeIine; 
o I 52 1 2 
公共cumerceC-Mer 
s. cumercecc-nder =; 
s.persist实体PipeIine = persist实体PipeIine; 
IPersist实体PipeIine 
) 
public m'erride async Task<字符串» Run(字符串 arg, CumercePipeIineExecutionContext 
等待Intitializecatalogs(上下文) . W美元mc (); 
等待 
等待Nosync (); 
返回参数; 
cmtext) 
protected internal virtual async Task mtitiaIizeCataIogs(ComercePipeIineExecutionContext . 
上下文) 
var webstores = .GetWeb商店 (); 
foreach (var wåStore in *b商店) 
等待 
.Rm(新webStore.DispIayNanE.RepIace ( 
. Nosync (); 
Store", "目录"))• 
cmtext) 
保护内部虚拟异步任务mtitiaIizePriceBooks(CcmercePipeIineExecutionContext . properties) 
var webstores = .GetWeb商店 (); 
foreach (var wåStore in *b商店) 
var =等待 
cumercec-nder. . Rim(新 
崇拜ext) 
革命制度党ceBookNar), 
解决方案资源管理器 
搜索解决方案资源管理器(Ctrl+;) 
数据库 
ExternalLibraries 
插件 
PluginTempIate_ 
车 
目录 
作曲家 
优惠券 
客户 
欺诈 
实现 
礼品卡 
库存 
日志记录 
ManagedLists 
管理 
订单 
Payme nt 
定价 
促销活动 
报告 
返回 
规则 
搜索 
商店 
的观点 
WebStore 
共享 
b Weh 
解决方案资源管理器单元测试资源管理器 
属性 
团队资源管理器 
81 % 
neWriceBook.DispIayNar = Store", "Price Book"); 
neWriceBook.Description = S"This is the {webStor-e.DispIayNar. Store", "Price Bc:ok")}. 
var persistResuIt 
等待persist实体PipeIine.Rm(新Persist实体ArgLrnt (newPriceBook),上下文) . W美元mc (); 
如果(persistResuIt?.实体 
空) 
var errorText = S"FaiIed to update {newPriceBmk.DispIayNaæ)."; 
@没有发现问题 
数据工具操作 
NuGet浏览器 
包管理器控制台 
代码透镜 
找到的结果 
错误列表 
Output 
数据工具操作 
Sitecore_商务 
特性/ add-date-to-datafeeds•

虽然这个初始化管道仍然可以与Postman执行,我将建议另一种方式. 在最新的Sitecore 商务项目中, 我们需要创建自定义商务 api来处理Sellable Items的创建, 价格, 加载库存, 等. 这种方法是Sitecore Lighthouse团队推荐的, 因为用于创建这些实体的现有商务 api(我们在第一篇文章中使用的)相当繁琐.

然后使用这些自定义api从现有的Product Information 管理 (PIM)系统加载商务数据. 我认为这在Sitecore 商务领域是非常普遍的. 因为商务数据真正的“真实来源”在PIM中, 我们将此数据用作自定义应用程序的信息源.

“TestData” .网络应用程序

这个应用程序是一个简单的 .净框架4.7.2控制台应用程序,我创造性地称之为“TestData.TestData应用程序负责调用第一篇文章中由Postman调用的所有商务 api. 这包括调用Bootstrap、Clean、Initialize和其他api.

首先,TestData应用程序必须能够对商务 api进行身份验证. 有两种方法可以做到这一点.

  • 用户名和密码可以发送到Sitecore Identity Server上的GetToken API端点
  • TestData应用程序可以使用商务 引擎证书进行身份验证.

我更喜欢使用商务 引擎证书, 因为从GetToken API接收到的令牌可能会在TestData应用程序完成执行之前超时. 然而, GetToken API的优点是,它要求执行TestData应用程序的人拥有有效的凭据和权限来完成TestData必须完成的所有工作.

在必须严格控制的环境中,这可能是一个宝贵的优势, 特别是在PCI标准下. 这种方法还可以防止开发人员在更高的环境中意外地运行TestData应用程序.

TestData应用程序必须能够在所有Sitecore 商务环境中执行api, 集成, UAT和生产, 因为这是将用于验证每个环境的数据.

我相信每个人都知道, 设置和配置Sitecore 商务环境不是一项简单的任务.  拥有可预测的验证测试数据可以大大加快新环境的交付, 确保一切正常工作.

TestData细节

我编写的TestData应用程序首先调用Bootstrap, 然后清洁, 然后初始化. 然后它进入一个循环, 调用Check Long Running流程端点,直到收到“OK”响应. 然后它调用确保/同步内容路径,并进入类似的循环. 一旦完成,商务环境就准备好接收测试数据集了.

我格式化了 测试数据文件,我使用的JSON,所以他们是完全在 格式化预期的自定义商务 api. 这样我们就可以在 文件,并将数据直接传递给api,而无需解析它们. 的数据 包括产品、价格、库存、变体等.  也许整个过程同样重要 运行大约需要20分钟,为开发人员提供了一个干净的SLATE 拿更多的水和上厕所需要时间. 

与传统的方法相比,这种方法有一些明显的优点 邮递员的方法:

  • 所有的代码都是c#的,并且与数据一起,可以很容易地提交到源代码控制存储库中
  • 在我看来,c#中的维护、可扩展性和故障排除要比Postman简单得多
  • TestData应用程序以“触发并忘记”的方式运行,而邮递员的方法需要更多的监督和人工干预

在本系列的第3部分中,我将向您展示将数据加载到商务环境中的另一种方法. 我选择将这最后一种方式称为“最佳”,原因将会很清楚. 请继续关注!