我正在尝试使用以下内容更新模块的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的后端检查它时,它不会更新值。
有什么建议吗?
答案 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)
你应该一直这样做
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();