Unable to unpublish a module builder dynamic content item using API
Unable to unpublish a module builder dynamic content item using API.
I receive no error messages. This happens no matter what user I have logged in.
var dynamicModuleManager = DynamicModuleManager.GetManager();
using (ElevatedModeRegion elevatedModeRegion = new ElevatedModeRegion(dynamicModuleManager))
var MyDataTypeType =
TypeResolutionService.ResolveType(
"Telerik.Sitefinity.DynamicTypes.Model.MyDataTypes.MyDataType");
var data = dynamicModuleManager.GetDataItem(MyDataTypeType, commentId);
dynamicModuleManager.Lifecycle.Unpublish(data);
data.SetWorkflowStatus(dynamicModuleManager.Provider.ApplicationName, "Unpublished");
dynamicModuleManager.SaveChanges();
Hello,
In order to unpublish a dynamic content item we need to make sure that we are opening it for editing and making sure it is published to begin with. Please see the following example:
var dynamicModuleManager = DynamicModuleManager.GetManager();
using (ElevatedModeRegion elevatedModeRegion = new ElevatedModeRegion(dynamicModuleManager))
var MyDataTypeType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.MyDataTypes.MyDataType");
var data = dynamicModuleManager.GetDataItem(MyDataTypeType, commentId);
DynamicContent master = (DynamicContent)dynamicModuleManager.Lifecycle.Edit(data);
if (master != null)
dynamicModuleManager.Lifecycle.Unpublish(master);
data.SetWorkflowStatus(dynamicModuleManager.Provider.ApplicationName, "Unpublished");
dynamicModuleManager.SaveChanges();
Hi there. I realize this is an old post but can't find any alternate method that attempts to 'unpublish' and dynamic content item.
I receive the following error "Cannot unpublish an item that is not published" on the following line: dynamicModuleManager.Lifecycle.Unpublish(master)
I was able to resolve my issue as follows:
foreach(var p in projectsToUnpublish)
using (ElevatedModeRegion elevatedModeRegion = new ElevatedModeRegion(dynamicModuleManager))
var contentType = "MyContentType";
var data = dynamicModuleManager.GetDataItem(contentType, p.Id);
DynamicContent master = (DynamicContent)dynamicModuleManager.Lifecycle.Edit(data);
if (master != null)
// Check out the master to get a temp version.
var temp = dynamicModuleManager.Lifecycle.CheckOut(master) as DynamicContent;
temp.SetWorkflowStatus(dynamicModuleManager.Provider.ApplicationName, "Unpublished");
temp.ApprovalWorkflowState = "Unpublished";
// Check in the temp and get the updated master version.
// After the check in the temp version is deleted.
master = dynamicModuleManager.Lifecycle.CheckIn(temp) as DynamicContent;
// Publish the master.
dynamicModuleManager.Lifecycle.Publish(master);
dynamicModuleManager.SaveChanges();
Let's start with a master dynamic content, or status = 0 in sf_dynamic_content, and call it production.
Let's say its current approval_workflow_State_ = "Published", and visible = 0 (it will always be 0 because you never see the master). We should, less ye have been hacking around in the system, have another record in this table with same url_name_ and approval_workflow_State_ = "Published", status= 2, and visible = 1. That will be the Live version.
var dynamicModuleManager = DynamicModuleManager.GetManager();<
br
>var checkedOutProduction = (DynamicContent) dynamicModuleManager.Lifecycle.CheckOut(production);
checkedOutProduction.SetWorkflowStatus(dynamicModuleManager.Provider.ApplicationName, "Unpublished");
var checkedInProduction = (DynamicContent) dynamicModuleManager.Lifecycle.CheckIn(checkedOutProduction);
var liveProduction = dynamicModuleManager.Lifecycle.GetLive(checkedInProduction);
if
(liveProduction !=
null
)
dynamicModuleManager.Lifecycle.Unpublish(liveProduction);
dynamicModuleManager.SaveChanges();