0

ページ上のカスタムフォームを介してコンテンツを作成できるサービスをOrchardで構築しようとしています。サービスとコンテンツタイプの定義は私には問題ないように見えますが、どういうわけか、オーチャードログファイルにエラーやその他の兆候はありませんが、IContentManagerを使用して新しいコンテンツを作成しても何も起こりません。

関係する部品

フォーム値を受け入れるコントローラー

[HttpPost]
public ActionResult Create(CreateSopViewModel viewModel)
{
    if(!ModelState.IsValid)
    {
        var shape = _shape.CreateContent();
        shape.Header = _shape.Parts_Title(Title: "New item");

        // Add the original fields to the shape.
        shape.Title = viewModel.Title;
        shape.Description = viewModel.Description;
        shape.InitialComments = viewModel.InitialComments;

        return new ShapeResult(this, shape);
    }

    // Store the new procedure in the database
    _service.CreateContentItem(
        viewModel.Title,viewModel.Description,viewModel.InitialComments);

    // Redirect the user back to the homepage.
    return Redirect("~/");
}

CreateContentItemメソッドを含むサービス:

public void CreateContentItem(string title, string description, string initialComments)
{
    // Initialize a new content item based on the SOP type
    var customPart = _services.ContentManager.New<MyCustomPart>("CustomContentType");

    customPart.Description = description;
    customPart.Identifier = BuildIdentifier(title);
    customPart.ContentItem.As<TitlePart>().Title = title;

    _services.ContentManager.Create(customPart.ContentItem);
}

コンテンツパート+レコード

public class MyCustomPart: ContentPart<MyCustomPartRecord>
{
    [Required]
    public string Identifier
    {
        get { return Record.Identifier; }
        set { Record.Identifier = value; }
    }

    [Required]
    public string Description
    {
        get { return Record.Description; }
        set { Record.Description = value; }
    }
}

public class MyCustomPartRecord: ContentPartRecord
{
    public virtual string Identifier { get; set; }

    public virtual string Description { get; set; }
}

移行

SchemaBuilder.CreateTable(typeof(MyCustomPartRecord).Name, table => table
    .ContentPartRecord()
    .Column<string>("Description")
    .Column<string>("Identifier"));

ContentDefinitionManager.AlterPartDefinition("StandardOperationalProcedurePart", builder => builder
        .Attachable(true));

ContentDefinitionManager.AlterTypeDefinition("CustomContentType", builder => builder
    .DisplayedAs("Custom Content Type")
    .WithPart("TitlePart")
    .WithPart("MyCustomPart")
    .Creatable(true));

質問

繰り返しになりますが、ログにもVisual Studioにも、エラーは発生しません。ただし、新しいコンテンツアイテムが作成されないか、少なくとも、サイトの管理セクションの[コンテンツ]の下に表示されません。

何が起こっているのでしょうか。また、この動作をデバッグするにはどうすればよいですか。

4

3 に答える 3

2

同様の問題が発生しました。これは、列挙値Createを取得するオーバーロードメソッドを使用したときに解決されました。VersionOptions

content.Create(customPart.ContentItem, VersionOptions.Published);

私の場合とは異なり、コンテンツアイテムが作成できない場合でも、これは機能するはずです。

于 2012-07-08T16:27:03.457 に答える
1

同様の問題がありました。私の場合、アイテムは最終的に表示されましたが、すぐには表示されませんでした。

私にとっての解決策は次のことでした。

_contentManager.Flush();
于 2013-08-29T11:09:51.617 に答える
0

私はこの問題を抱えていました。私の場合、データベースに実際にエラーがありました(100文字しか保持できないフィールドに100文字以上を入力しようとしました!)。

取得したエラー(Orchard.Indexing.Models.IndexingTaskRecordエントリのnull id(例外が発生した後にセッションをフラッシュしないでください))を見つけ、実際に問題をマスクしました。私は本当の問題を見つけるためにログを探しに行かなければなりませんでした。

とにかく、contentmanager.createが何もしていないようで、エラーが役に立たない場合は、ログを注意深く確認してください。これらは、メインのOrchard.Webプロジェクトのappdataフォルダーのlogsサブフォルダーにあります。私が過去48時間で見つけたように、多くの場合、答えはそこにあります。

于 2016-01-08T14:43:55.223 に答える