![]() | 时间阅读: 大约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•](/wp-content/uploads/2020/01/InitializeEnvironment-1024x593.png)
虽然这个初始化管道仍然可以与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部分中,我将向您展示将数据加载到商务环境中的另一种方法. 我选择将这最后一种方式称为“最佳”,原因将会很清楚. 请继续关注!