2012-09-17 50 views
3

我正在嘗試擴展Tridion的「CheckOut」命令,截至目前,我正在嘗試顯示自己的消息,並希望在功能區工具欄中單擊「CheckOut」選項時需要放置OOTB CheckOut操作。如何在SDL Tridion 2011 SP1中擴展「CheckOut」命令?

我已經創建了配置文件和.js文件,如下所示,我也對System.config進行了更改,並創建了虛擬目錄。但是我的.js沒有被解僱,也沒有顯示我的自定義消息。

config.xml中

<?xml version="1.0"?> 
<Configuration xmlns="http://www.sdltridion.com/2009/GUI/Configuration/Merge" xmlns:cfg="http://www.sdltridion.com/2009/GUI/Configuration" xmlns:ext="http://www.sdltridion.com/2009/GUI/extensions" xmlns:cmenu="http://www.sdltridion.com/2009/GUI/extensions/ContextMenu"> 
<resources cache="true"> 
    <cfg:filters/> 
    <cfg:groups> 
     <cfg:group name="CommandsExtensions.Commandset" merger="Tridion.Web.UI.Core.Configuration.Resources.CommandGroupProcessor" merge="always"> 
      <cfg:fileset> 
       <cfg:file type="script">/js/ExtendCheckOut.js</cfg:file> 
       <cfg:file type="reference">CommandsExtensions.Interface</cfg:file> 
      </cfg:fileset> 
      <cfg:dependencies> 
       <cfg:dependency>Tridion.Web.UI.Editors.CME</cfg:dependency> 
       <cfg:dependency>Tridion.Web.UI.Editors.CME.commands</cfg:dependency> 
      </cfg:dependencies> 
     </cfg:group> 
    </cfg:groups> 
</resources> 
<definitionfiles/> 
<extensions> 
    <ext:editorextensions> 
     <ext:editorextension target="CME"> 
      <ext:editurls/> 
      <ext:listdefinitions/> 
      <ext:taskbars/> 
      <ext:commands/> 
      <ext:commandextensions> 
       <ext:commands> 
        <ext:command name="CheckOut" extendingcommand="ExtendCheckOut" /> 
       </ext:commands> 
       <ext:dependencies> 
        <cfg:dependency>CommandsExtensions.Commandset</cfg:dependency> 
       </ext:dependencies> 
      </ext:commandextensions> 
      <ext:contextmenus/> 
      <ext:lists/> 
      <ext:tabpages/> 
      <ext:toolbars/> 
      <ext:ribbontoolbars/> 
     </ext:editorextension> 
    </ext:editorextensions> 
    <ext:dataextenders/> 
</extensions> 
<commands> 
    <cfg:commandset id="CommandsExtensions.Interface"> 
     <cfg:command name="ExtendCheckOut" implementation="CommandsExtensions.ExtendCheckOut"/> 
    </cfg:commandset> 
</commands> 
<contextmenus/> 
<localization/> 
<settings> 
    <defaultpage>/Views/Default.aspx</defaultpage> 
    <navigatorurl>/Views/Default.aspx</navigatorurl> 
    <editurls/> 
    <listdefinitions/> 
    <itemicons/> 
    <theme> 
     <path>css</path> 
    </theme> 
    <customconfiguration/> 
</settings> 

js文件

Type.registerNamespace("Extensions"); 

Extensions.ExtendCheckOut = function Extensions.ExtendCheckOut() { 
    Type.enableInterface(this, "Extensions.ExtendCheckOut"); 
    this.addInterface("Tridion.Cme.Command", ["ExtendCheckOut"]); 
}; 

Extensions.ExtendCheckOut.prototype.isAvailable = function ExtendCheckOut$isAvailable(selection) { 
    return true; 
} 

Extensions.ExtendCheckOut.prototype.isEnabled = function ExtendCheckOut$isEnabled(selection) { 
    return true; 
} 

Extensions.ExtendCheckOut.prototype._execute = function ExtendCheckOut$_execute(selection) { 
    $messages.registerWarning("This is Extended CheckOut"); 
} 
+0

嗨,我想這個問題/答案:http://stackoverflow.com/questions/12410599/how-can-a-tridion-command-extension-find-out-the-command-it-extends給出一個很好的例子,你如何擴展現有的。你有看過它嗎? – johnwinter

+0

是的約翰,我研究了那個,它沒有完整的配置文件。並基於此我也修改了我的配置文件。但Js也沒有解僱。我認爲是一些在配置文件中做錯的地方。 – user1428019

+0

作爲第一個檢查:您的JavaScript是否被加載到瀏覽器中?您應該可以在'http://localhost/WebUI/Editors/CME/Views/Dashboard/Dashboard.aspx?mode = js'中找到它。 –

回答

4

這是我做什麼,延長保存按鈕:

<cfg:groups> 
    <cfg:group name="ValidateTitleField.CommandSet"> 
    <cfg:fileset> 
     <cfg:file type="script">/Commands/ValidateTitleFieldCommand.js</cfg:file> 
     <cfg:file type="reference">ValidateTitleField.Interface</cfg:file> 
    </cfg:fileset> 
    <cfg:dependencies> 
     <cfg:dependency>Tridion.Web.UI.Editors.CME</cfg:dependency> 
     <cfg:dependency>Tridion.Web.UI.Editors.CME.commands</cfg:dependency> 
    </cfg:dependencies> 
    </cfg:group> 
    <cfg:group name="ValidateTitleField.Views.ValidateTitleFieldPopup"> 
    <cfg:fileset> 
     <cfg:file type="script">/Views/ValidateTitleFieldPopup.js</cfg:file> 
     <cfg:file type="style">/Views/ValidateTitleFieldPopup.css</cfg:file> 
    </cfg:fileset> 
    <cfg:dependencies> 
     <cfg:dependency>Tridion.Web.UI.Editors.CME</cfg:dependency> 
     <cfg:dependency>Tridion.Web.UI.Editors.CME.commands</cfg:dependency> 
    </cfg:dependencies> 
    </cfg:group> 
</cfg:groups> 

[...]

<ext:editorextension target="CME"> 
    <ext:editurls /> 
    <ext:listdefinitions /> 
    <ext:taskbars /> 
    <ext:commands /> 
    <ext:commandextensions> 
     <ext:commands> 
     <ext:command name="Save" extendingcommand="ValidateTitleField"/> 
     </ext:commands> 
     <ext:dependencies> 
     <cfg:dependency>ValidateTitleField.CommandSet</cfg:dependency> 
     </ext:dependencies> 
    </ext:commandextensions> 
    <ext:contextmenus /> 
    <ext:lists /> 
    <ext:tabpages /> 
    <ext:toolbars /> 
    <ext:ribbontoolbars /> 
    </ext:editorextension> 

[...]

<commands> 
    <cfg:commandset id="ValidateTitleField.Interface"> 
    <cfg:command name="ValidateTitleField" implementation="Company.Extensions.ValidateTitleFieldCommand"/> 
    </cfg:commandset> 
</commands> 

然後在我的命令執行(JS)我用下面的調用 「原始」 的方法:

Company.Extensions.ValidateTitleFieldCommand.prototype._isAvailable = function ValidateTitleFieldCommand$_isAvailable(selection) { 
    console.debug("Is Available called"); 
    return $cme.getCommand("Save")._isAvailable(selection); 
}; 

最後,在_execute方法的深處:

if (!failed) 
    return $cme.getCommand("Save")._execute(selection, pipeline); 
else { 
    this.loadPopup(); 
} 

希望這有助於

ň

+0

感謝Nuno:我在配置文件中出錯了,現在我能夠顯示「CheckOut」命令的自定義消息。實際上我想顯示自定義消息之後,實際的CheckOut需要發生。但現在顯示我的自定義消息後,結帳不會發生。 – user1428019

+1

我想你必須確保你仍然執行CheckOut命令作爲_execute方法的一部分。另外,你在_isAvailable和_isEnabled上返回true,我會推薦一種類似於我的方法,我依靠「extended」命令來確定這些值。 –

+0

我想在這種情況下,「擴展」更像是「替換」... –

3

你必須在implementation配置文件點之間的不匹配:

<commands> 
    <cfg:commandset id="CommandsExtensions.Interface"> 
     <cfg:command name="ExtendCheckOut" 
        implementation="CommandsExtensions.ExtendCheckOut"/> 
    </cfg:commandset> 
</commands> 

和實際的JavaScript代碼:

Extensions.ExtendCheckOut = function Extensions.ExtendCheckOut() { 

您可能需要將配置文件更改爲:

 <cfg:command name="ExtendCheckOut" 
        implementation="Extensions.ExtendCheckOut"/> 
+0

是的弗蘭克:我錯了,在配置文件中,現在JS加載,我可以顯示我的自定義消息「CheckOut」命令。實際上我想顯示自定義消息之後,實際的CheckOut需要發生。但現在顯示我的自定義消息後,結帳不會發生。 – user1428019

+1

命令擴展在**擴展命令之前執行。如果您想影響命令本身,請查看Nuno如何在其示例中調用原始命令。也可以看一下'Command.js'中的'Tridion.Core.Command.prototype.invoke',看看它是如何工作的,你會發現設置'pipeline.stop = true;'可能需要確保框架不會在完成之後,不會調用命令。 –

相關問題