更新Sitefinity中动态模块的DynamicContent项

时间:2014-06-05 09:22:41

标签: sitefinity

我正在尝试使用以下内容更新模块的DynamicContent属性:

    DynamicModuleManager dynamicModuleManager = DynamicModuleManager.GetManager();
        Type pollanswerType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.Poll.Pollanswer");
        Guid pollanswerID = new Guid(answerID);


        // This is how we get the pollanswer item by ID
        DynamicContent pollanswerItem = dynamicModuleManager.GetDataItem(pollanswerType, pollanswerID);
        pollanswerItem.SetValue("VoteCount", int.Parse(pollanswerItem.GetValue("VoteCount").ToString()) + 1);

        dynamicModuleManager.SaveChanges();

基本上获取当前的Property值并将其递增1 并调用SaveChanges() 代码运行没有错误,但是当我从Sitefinity的后端检查它时,它不会更新值。

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

问题可能是由您传递的 pollanswerID 造成的。

如果 pollanswerID 是内容项实时版本的ID,则不会设置该值。

确保将字段值设置为内容类型版本,而不是实时

如果您不知道内容类型的主版本的ID,您可以通过内容类型的实时版本的ID获取主内容项

var masterItem = dynamicModuleManager.GetDataItems(pollanswerType).Where(dynItem => dynItem.Id == pollanswerItem.OriginalContentId).FirstOrDefault();
            if (masterItem != null)
            {
                masterItem.SetValue("VoteCount",   int.Parse(masterItem.GetValue("VoteCount").ToString()) + 5);
            }

答案 1 :(得分:0)

你应该一直这样做

  • 获取大师
  • Checkout Master
  • Checkin Master
  • 保存更改
  • 发布更改 - 这将更新为实时。

bookingItemLive是实时记录

var bookingItemMaster = dynamicModuleManager.Lifecycle.Edit(bookingItemLive) as DynamicContent;

//Check out the master to get a temp version.
DynamicContent bookingItemTemp = dynamicModuleManager.Lifecycle.CheckOut(bookingItemMaster) as DynamicContent;

//Make the modifications to the temp version.
bookingItemTemp.SetValue("CleanerId", cleanerId);
bookingItemTemp.SetValue("SubCleanerId", subCleanerId);
bookingItemTemp.LastModified = DateTime.UtcNow;

//Checkin the temp and get the updated master version.
//After the check in the temp version is deleted.
bookingItemMaster = dynamicModuleManager.Lifecycle.CheckIn(bookingItemTemp) as DynamicContent;

dynamicModuleManager.SaveChanges();

//Publish the item now 
ILifecycleDataItem publishedBookingItem = dynamicModuleManager.Lifecycle.Publish(bookingItemMaster);
bookingItemMaster.SetWorkflowStatus(dynamicModuleManager.Provider.ApplicationName, "Published");

答案 2 :(得分:0)

@Joseph Ghassan:您可以按照以下步骤进行操作。

第1步:现场直播

var bookingItemLive= manager.GetDataItem(ModuleType, GuidId);

第2步:获取主人

var bookingItemMaster = manager.Lifecycle.GetMaster(bookingItemLive) as DynamicContent;

第2步:Checkout Master - >将创建一个草稿项目(您将通过草稿更新数据)

if (bookingItemMaster == null)
{
   return new HttpResponseMessage
              {
                  Content = new JsonContent(new { Result = false })
              };
}

var bookingItemDraff = manager.Lifecycle.CheckOut(bookingItemMaster) as DynamicContent;

//Make the modifications to the temp version.

bookingItemDraff.SetValue("CleanerId", cleanerId);

bookingItemDraff.SetValue("SubCleanerId", subCleanerId);

bookingItemDraff.LastModified = DateTime.UtcNow;

第3步:Checkin Master

// Now we need to check in, so the changes apply
var checkInItem = manager.Lifecycle.CheckIn(bookingItemDraff);

第4步:发布更改

manager.Lifecycle.Publish(checkInItem);

第5步:保存更改 - 这将保存到数据库并实时更新。

bookingItemDraff.SetWorkflowStatus(manager.Provider.ApplicationName, CustomFieldName.PublishedStatus);
manager.SaveChanges();
相关问题