Orchard CMS の Creation イベントにフックし、作成中のコンテンツの Title を (他のいくつかのプロパティと共に) 使用して、サード パーティ システムでアイテムを作成し、その ID を返してコンテンツ タイプに設定する必要があります。オーチャード。
私はカスタム コンテンツ タイプを持っていますが、イベントにフックしようとすると (ここのドキュメントで説明されているように、また組み込みのオーチャード コア コンテンツ パーツのコードを見て)、すべてのプロパティが null になります。
それらは単に遅延ロードされていますか?それらを設定する方法はありますか?シェイプ メソッド (GetItemMetadata / BuildDisplayShape / BuildEditorShape / UpdateEditorShape) のいずれかをオーバーライドすることは、最初にコンテンツ タイプを作成するときにのみ起動する必要があるため、適切ではないようです。
私のコードは次のとおりです。
public MyContentPartHandler(IRepository<MyContentPartRecord> repository, IOrchardServices orchardServices, Lazy<IMyContentPartService> myContentPartService) {
_orchardServices = orchardServices;
_myContentPartService = myContentPartService;
Filters.Add(StorageFilter.For(repository));
OnCreating<MyContentPart>(CreateTPItemAndAssignIdentity);
}
protected void CreateTPItemAndAssignIdentity(CreateContentContext context, MyContentPart part)
{
//create item in 3rd party system
var item = _myContentPartService.Value.CreateNewItem(part.Title, part.Path);
part.ExternalIdentity = item.FriendlyId;
}
とが nullであるため、CreateNewItem()
メソッドは失敗します。レコードを取得しようとする必要がありますか? (オーチャードの CMS レコードがその時点で作成されていないため、私はそうは思いませんでした)part.Title
part.Path
OnCreated
更新-代わりにイベントを使用しようとしましたが、プロパティが入力されていないという同じ問題に遭遇しました。OnCreated
コードにブレークポイントを配置すると、ブレークポイントにヒットしたときに、その時点でデータが実際にはデータベースに存在していないことに気付きました。