我開發了一個數據擴展器類,它對GetItem和CheckOutItem命令起作用,以執行一些業務特定的驗證,以確定用戶是否應該有權修改該項目(基本上,如果它已經過了工作流中的初始「作者」任務,沒有人可以編輯它。默認情況下,Tridion允許工作流中的「審閱者」編輯項目,這在我們的業務中是不允許的)。設置IsEditable = false爲項目禁用保存/關閉按鈕但不保存按鈕?
我相對確定這一點有效,但現在沒有。我正在探索可能發生了什麼變化,但我想我會問這裏是否有人有任何想法。
如果項目無法修改,我將IsEditable屬性設置爲false。這實際上禁用了「保存並關閉」按鈕和「保存並新建」按鈕,但出於某種原因,「保存」按鈕處於啓用狀態。我不太明白爲什麼會有差異。 (我正在查看是否有人以某種方式擴展了保存按鈕,但我沒有看到這樣做)。有關如何保存按鈕將啓用時,其他人都沒有想法?
感謝您的任何建議,
〜華納
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;
}
}
}
我希望你應該設置AllowedActions(太)。但是要深入瞭解JavaScript代碼才能發現問題。 – 2012-08-15 11:47:55
不錯的問題,我們可以讓你感興趣的是承諾[51區Tridion特定提案](http://area51.stackexchange.com/proposals/38335/tridion?referrer=gPujQMxthNCNn9xqeeO2NA2)。如果您有時間,請使用同一個SO帳戶註冊。 – 2012-08-15 11:50:17
@FrankvanPuffelen,這裏是我看到的AllowedActions的XML。任何想法如何理解這是告訴我什麼? tcm:AllowedActions> –
2012-08-15 18:19:16