- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我开发了一个数据扩展器类,它作用于 GetItem 和 CheckOutItem 命令来执行一些特定于业务的验证,以确定用户是否应该有权修改项目(基本上,如果它超过了工作流中最初的“作者”任务,没有人可以编辑它。默认情况下,Tridion 允许工作流程中的“审阅者”编辑项目,这在我们的业务中是禁忌)。
我相对确定这在某一时刻有效,但现在没有。我正在探索可能发生了什么变化,但我想我会在这里问,以防万一有人有想法。
如果项目无法修改,我将 IsEditable 属性设置为 false。这实际上禁用了 Save and Close 按钮和 Save and New 按钮,但出于某种原因启用了 Save 按钮。我不太明白为什么会有不同。 (我想看看是否有人以某种方式扩展了保存按钮,但我没有看到这样做)。关于“保存”按钮如何在其他按钮未启用时启用的任何想法?
感谢您的任何建议,
~华纳
public override XmlTextReader ProcessResponse(XmlTextReader reader, PipelineContext context)
{
using (new Tridion.Logging.Tracer())
{
string command = context.Parameters["command"].ToString();
if (command == CHECKOUT_COMMAND || command == GETITEM_COMMAND)
{
XmlDocument xmlDoc = ExtenderUtil.GetExtenderAsXmlDocument(reader);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
nsmgr.AddNamespace("tcm", Constants.TcmNamespace);
try
{
//is this a page or component?
XmlNode thisItemNode = null;
thisItemNode = xmlDoc.SelectSingleNode("//tcm:Component", nsmgr) ?? xmlDoc.SelectSingleNode("//tcm:Page", nsmgr);
if (thisItemNode == null) return ExtenderUtil.GetExtenderAsXmlTextReader(xmlDoc);
// need to impersonate system admin in order to get workflow version of item later
Session sessionSystemAdmin = Util.SystemAdminSession;
XmlAttribute idAttribute = thisItemNode.Attributes.GetNamedItem("ID") as XmlAttribute;
//if ID attribute is null, we don't have the actual object being used (just a referenced item. so, we'll ignore it)
if (idAttribute != null)
{
string itemId = idAttribute.Value;
VersionedItem tridionObject = Util.ObtainValidTridionIdentifiableObject(sessionSystemAdmin, itemId) as VersionedItem;
//logic has been moved to separate method, just for maintainablility...
//the logic may change when workflow code is finished.
bool allowSave = IsItemValidForEdit(tridionObject, nsmgr);
if (!allowSave)
{
//not the WIP ("author") task... make item read-only
Logger.WriteVerbose("setting iseditable to false for item: " + itemId);
XmlAttribute isEditableAttribute = thisItemNode.Attributes.GetNamedItem("IsEditable") as XmlAttribute;
isEditableAttribute.Value = "false";
}
}
}
catch (Exception e)
{
Logger.WriteError("problem with get item data extender", ErrorCode.CMS_DATAEXTENDER_GETITEM_FAILURE, e);
}
return ExtenderUtil.GetExtenderAsXmlTextReader(xmlDoc);
}
else
{
return reader;
}
}
}
最佳答案
大多数 Tridion GUI 可能基于所谓的“允许的操作”提供它所提供的选项。这是Allow
的组合和 Deny
列表调用(如果需要)和项目 XML 中存在的属性。
因此,至少您必须从 Allow
中删除 CheckIn 和 Edit 操作。属性(并且可能将它们添加到 Deny
属性)。如果您查看核心服务文档(或任何其他 Tridion API 文档:这些值已经很长时间没有改变),您可以找到一个名为 Actions
的枚举。保存可能的操作及其相应的值。 Allow
和 Deny
属性只是这些数字的加法。
我提到的 CheckIn 操作是编号 2
, 编辑是 2048
.
更新 :
我有一个小命令行程序到 decode the AllowedActions为了我。为了庆祝您的问题,我迅速将其转换为您可以找到的网页 here .下面是主要的工作马,它展示了如何解码数字以及如何操作它。在这种情况下,一切都是减法,但您可以通过向其添加数字来轻松添加允许的操作。
var AllowedActionsEnum = {
AbortAction: 134217728,
ExecuteAction: 67108864,
FinishProcessAction: 33554432,
RestartActivityAction: 16777216,
FinishActivityAction: 8388608,
StartActivityAction: 4194304,
BlueprintManagedAction: 2097152,
WorkflowManagedAction: 1048576,
PermissionManagedAction: 524288,
EnableAction: 131072,
CopyAction: 65536,
CutAction: 32768,
DeleteAction: 16384,
ViewAction: 8192,
EditAction: 2048,
SearchAction: 1024,
RePublishAction: 512,
UnPublishAction: 256,
PublishAction: 128,
UnLocalizeAction: 64,
LocalizeAction: 32,
RollbackAction: 16,
HistoryListAction: 8,
UndoCheckOutAction: 4,
CheckInAction: 2,
CheckOutAction: 1
};
function decode() {
var original = left = parseInt(prompt('Specify Allow/Deny actions'));
var msg = "";
for (var action in AllowedActionsEnum) {
if (left >= AllowedActionsEnum[action]) {
msg += '\n' + action + ' ('+AllowedActionsEnum[action]+')';
left -= AllowedActionsEnum[action];
}
}
alert(original+msg);
}
关于tridion - 为项目设置 IsEditable=false 禁用保存/关闭按钮但不禁用保存按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11968661/
Tridion 的用户界面允许您扩展特定命令,这是修改某些现有命令的行为的好方法。在编辑器的配置文件中,这是通过如下部分完成的: 我正在研究一个通用命令扩展类,可用于修改许多命令的行为:
是否可以在事件系统中将项目放置在工作流中?我面临的问题是,我们想根据组件所在的文件夹(而不是使用的架构)将组件定向到两个不同的工作流,而Tridion UI似乎不支持。我希望编写一个在 checkin
是否可以在 Tridion 2011 TOM.NET 中获取字段类型? ItemField 类有名称和定义,但我没有看到旧的受信任 ItemType 属性。 我感觉我需要使用 Definition 属
我正在使用核心服务创建组件以连接到 Tridion 2011 SP1。我在服务器机器上编写了代码,通过核心服务创建一个组件,并且运行良好。代码是从服务器计算机执行的。 现在我想从客户端机器上执行相同的
我正在 SDL Tridion 2011 SP1 中创建架构。我突然发现了一件事。 我必须向用户显示三个下拉列表。 列表:国家 列表:州 列表:位置 如果用户在下拉列表中选择一个国家/地区,则需要根据
是否可以从 CMS 卸载 Tridion SP1 HR#1 修补程序并保留数据库更新?自应用修补程序以来,我们的 GUI 行为非常缓慢(可能与 TMS 服务失败有关?)并且需要返回到 SP1 - 但是
我正在通过在 TRIDION 2011 SP1 版本中添加按钮来自定义功能区工具栏。当我单击该按钮时,它将打开一个 aspx 页面。在该 aspx 页面内,我需要在创建组件本身之前访问用于创建该组件的
将现有的 Tridion 2009 事件 DLL(在 2011 服务器上编译)添加到 bin 目录并在 Content Manager 配置文件中注册 DLL 后,GUI 现在返回以下错误。我检查了事
将内容从 Tridion 5.2 导入到 Tridion 2011 SP1 的最佳方式是什么?内容搬运工?或卡波 最佳答案 要升级数据库,您必须遵循以下路径:5.2 => 5.2 SP1 => 5.3
我在 Tridion 2011 SP1 的功能区工具栏中添加了一个按钮。当我单击按钮时,它将打开一个 aspx 页面。在该 aspx 页面内,我需要访问光标当前所在的当前字段名称。请提供我要使用的对象
如何获取所选项目的版本号(组件/页面) 我正在使用下面的代码 VersionedItemData verinfo=csClient.Read(, new ReadOptions())
作为对功能区工具栏实现按钮的一部分。我需要按钮 java 脚本文件中的模式名称。所以我试图使用以下命令来获取架构对象。 $display.getView().getItem().getSchema()
我是 Tridion 的新手,并且面临分类问题。 作为存储,我们使用文件系统,对于分类,我们使用 sql db。 现在,我们创建了 状态 作为其中包含少量关键字的类别。我已经创建了模式和组件,并选择了
我正在尝试使用以下代码在 Tridion 模板类中创建一个多媒体组件。 MemoryStream stringInMemoryStream = new MemoryStream(ASCIIEncodi
当我们从 tridion 发布一些页面/动态组件时,是否可以在发布时将一些外部多媒体文件/内容(例如:jpg 图像)添加到当前执行/渲染包中。因此,最终的传输包具有此二进制文件以及原始发布的内容? 这
我想知道是否有人为脚注提出了一个好的解决方案。 我希望在具有多个组件的页面上在 Tridion 中实现脚注,并且我希望所有脚注都显示在页面底部,并在内容部分生成正确的脚注编号。 http://i.st
事件系统处理程序代码: [TcmExtension("My Handler")] public sealed class EventSystem : TcmExtension { public
确定哪些 Tridion 修补程序已应用于系统的最可靠方法是什么(除了正确的先前版本文档)? 具体来说,我想了解 SDL Tridion 2009,但也有兴趣了解 SDL Tridion 2011 是
如何水平放置多个自定义按钮 - 在 tridion 功能区中一个在另一个下方。 就像我们有 checkin 、 checkout 、撤消 checkout 按钮一样。 我尝试通过将它们放在一组中来创建
我们有一个应用程序,它具有通过动态组件演示文稿的发布动态生成的菜单。 menu.xml 是由基于结构组的组件模板写出的,并且该组件模板通过事件系统触发以在结构组时发布已发布。 在从 Tridion 2
我是一名优秀的程序员,十分优秀!