2

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.Titlepart.Path

OnCreated更新-代わりにイベントを使用しようとしましたが、プロパティが入力されていないという同じ問題に遭遇しました。OnCreatedコードにブレークポイントを配置すると、ブレークポイントにヒットしたときに、その時点でデータが実際にはデータベースに存在していないことに気付きました。

4

1 に答える 1