如何从Orchard中的后台任务更新内容项(草稿)?

时间:2013-02-04 17:09:41

标签: orchardcms background-process

我有一个执行查询的简单IBackgroundTask实现,然后根据特定项是否存在执行插入或一个或多个更新。但是,更新不会持久存在,我不明白为什么。 新项目按预期创建。

我正在更新的内容项目有CommonPart,我尝试过验证为有效用户。我也尝试在Sweep方法结束时刷新内容管理器。我错过了什么?

这是我的Sweep,为了简洁起见略有编辑:

public void Sweep()
{
    // Authenticate as the site's super user
    var superUser = _membershipService.GetUser(_orchardServices.WorkContext.CurrentSite.SuperUser);
    _authenticationService.SetAuthenticatedUserForRequest(superUser);

    // Create a dummy "Person" content item
    var item = _contentManager.New("Person");
    var person = item.As<PersonPart>();
    if (person == null)
    {
        return;
    }
    person.ExternalId = Random.Next(1, 10).ToString();
    person.FirstName = GenerateFirstName();
    person.LastName = GenerateLastName();

    // Check if the person already exists
    var matchingPersons = _contentManager
        .Query<PersonPart, PersonRecord>(VersionOptions.AllVersions)
        .Where(record => record.ExternalId == person.ExternalId)
        .List().ToArray();
    if (!matchingPersons.Any())
    {
        // Insert new person and quit
        _contentManager.Create(item, VersionOptions.Draft);
        return;
    }

    // There are at least one matching person, update it
    foreach (var updatedPerson in matchingPersons)
    {
        updatedPerson.FirstName = person.FirstName;
        updatedPerson.LastName = person.LastName;
    }

    _contentManager.Flush();
}

1 个答案:

答案 0 :(得分:1)

尝试添加_contentManager.Publish(updatedPerson)。如果您不想发布,只是为了保存,则不需要再执行任何操作,因为Orchard中的更改会自动保存,除非环境事务中止。根本不需要致电Flush。在常规请求和后台任务期间都是这种情况。