gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:35:31 26 4
gpt4 key购买 nike

我开发了一个数据扩展器类,它作用于 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 的枚举。保存可能的操作及其相应的值。 AllowDeny属性只是这些数字的加法。

我提到的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com