Tridion 为项目设置IsEditable=false将禁用保存/关闭按钮,但不禁用保存按钮?

Tridion 为项目设置IsEditable=false将禁用保存/关闭按钮,但不禁用保存按钮?,tridion,Tridion,我开发了一个data extender类,该类作用于GetItem和CheckOutItem命令,以执行一些特定于业务的验证,以确定用户是否应该有权修改该项(基本上,如果该项已超过工作流中的初始“作者”任务,则没有人可以编辑它。默认情况下,Tridion允许“审阅者”在工作流中编辑项目,这在我们的业务中是不允许的) 我相对确定这在某一点上是有效的,但现在不行了。我正在探索可能发生了什么变化,但我想我会在这里问一下,以防有人有想法 如果无法修改该项,我将IsEditable属性设置为false。这

我开发了一个data extender类,该类作用于GetItem和CheckOutItem命令,以执行一些特定于业务的验证,以确定用户是否应该有权修改该项(基本上,如果该项已超过工作流中的初始“作者”任务,则没有人可以编辑它。默认情况下,Tridion允许“审阅者”在工作流中编辑项目,这在我们的业务中是不允许的)

我相对确定这在某一点上是有效的,但现在不行了。我正在探索可能发生了什么变化,但我想我会在这里问一下,以防有人有想法

如果无法修改该项,我将IsEditable属性设置为false。这实际上会禁用“保存并关闭”按钮和“保存并新建”按钮,但由于某些原因,“保存”按钮已启用。我不太明白为什么会有不同。(我想看看是否有人以某种方式扩展了“保存”按钮,但我没有看到这样做)。当其他按钮不可用时,如何启用“保存”按钮

谢谢你的建议

~z~华纳

public重写XmlTextReader ProcessResponse(XmlTextReader,PipelineContext上下文)
{
使用(新的Tridion.Logging.Tracer())
{
string command=context.Parameters[“command”].ToString();
if(command==CHECKOUT|u command | command==GETITEM_command)
{
XmlDocument xmlDoc=ExtenderUtil.GetExtenderAsXmlDocument(读取器);
XmlNamespaceManager nsmgr=新的XmlNamespaceManager(xmlDoc.NameTable);
nsmgr.AddNamespace(“tcm”,Constants.TcmNamespace);
尝试
{
//这是一个页面还是一个组件?
XmlNode thisItemNode=null;
thisItemNode=xmlDoc.SelectSingleNode(//tcm:Component,nsmgr)??xmlDoc.SelectSingleNode(//tcm:Page,nsmgr);
if(thisItemNode==null)返回ExtenderUtil.GetExtenderAsXmlTextReader(xmlDoc);
//需要模拟系统管理员以便稍后获取项目的工作流版本
会话sessionSystemAdmin=Util.SystemAdminSession;
XmlAttribute idAttribute=thisItemNode.Attributes.GetNamedItem(“ID”)作为XmlAttribute;
//如果ID属性为null,则没有实际使用的对象(只是一个引用项。因此,我们将忽略它)
如果(idAttribute!=null)
{
字符串itemId=idAttribute.Value;
VersionedItem tridionObject=Util.ActainValidRidinIdentifiableObject(sessionSystemAdmin,itemId)作为VersionedItem;
//逻辑已经转移到单独的方法,只是为了可维护性。。。
//工作流代码完成后,逻辑可能会更改。
bool allowSave=IsItemValidForEdit(tridionObject,nsmgr);
如果(!allowSave)
{
//不是WIP(“作者”)任务…使项目只读
Logger.WriteVerbose(“项:+itemId的设置可编辑为false”);
XmlAttribute isEditableAttribute=thisItemNode.Attributes.GetNamedItem(“IsEditable”)作为XmlAttribute;
isEditableAttribute.Value=“false”;
}
}
}
捕获(例外e)
{
Logger.WriteError(“get item data extender出现问题”,ErrorCode.CMS\u DATAEXTENDER\u GETITEM\u失败,e);
}
返回ExtenderUtil.GetExtenderAsXmlTextReader(xmlDoc);
}
其他的
{
返回读取器;
}
}
}

大多数Tridion GUI的选项可能基于所谓的允许操作。这是列表调用(如果请求)和项目XML中存在的
Allow
Deny
属性的组合

因此,至少您必须从
Allow
属性中删除签入和编辑操作(并可能将它们添加到
Deny
属性)。如果您查看核心服务文档(或任何其他Tridion API文档:这些值很长时间没有更改),您可以找到一个名为
Actions
的枚举,其中包含可能的操作及其相应的值。
Allow
Deny
属性只是这些数字的相加

我提到的签入操作是编号
2
,编辑是
2048


更新

我有一个小的命令行程序。为了庆祝你的问题,我很快把它转换成一个你可以找到的网页。下面是主要的工作流程,展示了如何解码数字以及如何操作数字。在这种情况下,所有操作都是减法,但您也可以通过向其添加数字来轻松添加允许的操作

var AllowedActionsEnum={
中止电话:134217728,
执行电话:67108864,
FinishProcessAction:33554432,
重启操作:16777216,
FinishActivityAction:8388608,
StartVityAction:4194304,
蓝图管理地址:2097152,
WorkflowManagedAction:1048576,
许可证号码:524288,
启用操作:131072,
CopyAction:65536,
行动:32768,
删除操作:16384,
查看操作:8192,
编辑行动:2048,
搜索行动:1024,
再版:512,
未出版:256,
出版行动:128,
取消校准操作:64,
本地化行动:32,
回滚操作:16,
组织相容性:8,
撤消签出操作