Workflow 无法确认是否在Tridion UI/UX的扩展完成活动中启用

Workflow 无法确认是否在Tridion UI/UX的扩展完成活动中启用,workflow,tridion,siteedit,Workflow,Tridion,Siteedit,当用户从页面或组件中选择选项时,我试图捕捉UI/UX中的FinishActivity 使用在相关配置文件中添加扩展命令的标准方法,我能够添加接口,并使用下面显示的脚本捕获isAvailable方法 Tridion.Extensions.CheckTitleOnFinishActivitySE = function Commands$CheckTitleOnFinishActivitySE() { Tridion.OO.enableInterface(this, "Tridion.Cme.

当用户从页面或组件中选择选项时,我试图捕捉UI/UX中的FinishActivity

使用在相关配置文件中添加扩展命令的标准方法,我能够添加接口,并使用下面显示的脚本捕获isAvailable方法

Tridion.Extensions.CheckTitleOnFinishActivitySE = function Commands$CheckTitleOnFinishActivitySE() {
    Tridion.OO.enableInterface(this, "Tridion.Cme.Commands.CheckTitleOnFinishActivitySE");
    this.addInterface("Tridion.Web.UI.Editors.SiteEdit.Commands.FACommand", ["CheckTitleOnFinishActivitySE", $const.AllowedActions.FinishActivity]);
};
但是,当我尝试重用现有isEnabled函数时:

Tridion.Extensions.CheckTitleOnFinishActivitySE.prototype.isEnabled = function (selection) {
    var response = Tridion.Web.UI.Editors.SiteEdit.Commands.FinishActivity.prototype._isEnabled(selection);
};
或者甚至从siteedit函数本身复制现有代码(我显然不希望这样做)

Tridion.Extensions.CheckTitleOnFinishActivitySE.prototype.isEnabled=函数(选择){
返回(selection&&selection.getProperty&&selection.getProperty(“isSEPage”)&&
this.callBase(“Tridion.Cme.Command”、“\u isEnabled”、[selection]);
};
我收到以下错误:

无法在[tcm:8-349-131200]上执行命令“FinishActivity”。 原因:未启用

我可以通过使用isEnabled函数中的return true强制启用状态,但我更愿意继承/重用现有检查以适应当前和未来的场景

我可以确认_isAvailable已捕获并返回true,并且需要扩展的函数已启用且未启用(仅添加后者或在iEnabled之外添加后者无效)

任何建议都很好

提前谢谢

更新-调试添加 因此,我在扩展iEnabled中添加了以下内容,以跟踪iEnabled“v”中选择对象上的响应与默认iEnabled之间的差异:

“workflow.js”显示isSEPage属性为true时的值,但直接在我的函数中检查时为false。它读起来是一致的,当从我的isEnabled调用到原始时,它也返回false。我不明白选择会发生什么,或者我会处理不同的选择对象/上下文

使用调试脚本更新了扩展iEnabled:

Tridion.Extensions.CheckTitleOnFinishActivitySE.prototype.isEnabled = function (selection) {

    $log.message('myfile.js::FinishActivity.prototype._isEnabled::selection.getProperty("isSEPage") = ' + selection.getProperty("isSEPage"));

    $log.message('myfile.js::FinishActivity.prototype.isEnabled ==> checking calling original...');
    var response = Tridion.Web.UI.Editors.SiteEdit.Commands.FinishActivity.prototype._isEnabled(selection);
    $log.message('myfile.js::FinishActivity.prototype.isEnabled ==> ' + response);


    $log.message('myfile.js::FinishActivity.prototype.isEnabled ==> checking using copied code from original...');
    return (selection && selection.getProperty && selection.getProperty("isSEPage")) &&
        this.callBase("Tridion.Cme.Command", "_isEnabled", [selection]);


};
输出(workflow.js表示相同评估的原始工作流值)

workflow.js:FinishActivity.prototype.\u isEnabled::selection.getProperty(“isSEPage”) =true myfile.js::FinishActivity.prototype.\u isEnabled::selection.getProperty(“isSEPage”) =未定义的myfile.js::FinishActivity.prototype.isEnabled==>正在检查调用原始。。。 workflow.js:FinishActivity.prototype.\u isEnabled::selection.getProperty(“isSEPage”) =未定义的myfile.js::FinishActivity.prototype.isEnabled==>未定义的myfile.js::FinishActivity.prototype.isEnabled==>检查 正在使用从源代码复制的代码。。。无法执行该命令 [tcm:8-349-131200]上的“检查标题完成活动”。理由:不是 启用

更多调试 我看到原来的CME工作流脚本中根本没有isEnabled函数

我在扩展的iEnabled scipt中添加了以下内容:

Tridion.Extensions.CheckTitleOnFinishActivitySE.prototype.isEnabled = function (selection) {

    $log.message('myfile.js::FinishActivity.prototype._isEnabled::selection.getProperty("isSEPage") = ' + selection.getProperty("isSEPage"));
    $log.message('Tridion.Web.UI.Editors.SiteEdit.Commands.FinishActivity.prototype._isEnabled(selection) = ' + Tridion.Web.UI.Editors.SiteEdit.Commands.FinishActivity.prototype._isEnabled(selection));

$log.message('this.callBase("Tridion.Cme.Command", "_isEnabled", [selection]) = ' + this.callBase("Tridion.Cme.Command", "_isEnabled", [selection]));
导致:

myfile.js::FinishActivity.prototype.\u isEnabled::selection.getProperty(“isSEPage”) =未定义的编辑器_v6.1.0.55920.269_.aspx:7175 workflow.js:FinishActivity.prototype._isEnabled::selection.getProperty(“isSEPage”) =未定义的编辑器(v6.1.0.55920.269)aspx:7175 Tridion.Web.UI.Editors.SiteEdit.Commands.FinishActivity.prototype.\u已启用(选择) =undefined Editor_v6.1.0.55920.269_.aspx:7175 this.callBase(“Tridion.Cme.Command”、“_isEnabled”、[selection])= 假的

虽然原始(SiteEdit)仍在我的脚本之前执行并返回

workflow.js::FinishActivity.prototype.\u isEnabled::selection.getProperty(“isSEPage”) =正确

我想知道在选择FinishActivity选项时是否正在检查Tridion SiteEdit isEnabled,并且当FinishActivity操作本身被实例化时是否正在执行我的扩展。我正在看得更远,但如果有人在iterim中看到任何东西,那就太好了

谢谢

好的!因此,当用户选择图标以触发ShowActivityStartedPopup命令时,将执行已启用的Tridion SiteEdit实例

MyisEnabled在用户选择FininsActivity选项时触发

有谁能想出一个更快的方法让我得出这个结论。。。或者如果这个结论不正确


谢谢

你能澄清一下你的目标是什么吗?因为还不完全清楚你到底想达到什么目的。处理命令时,有三个选项:-创建全新的命令实现(从“Tridion.Core.Command”继承)-创建新命令并从现有命令之一继承它(因此它将具有与源命令相同的所有功能,以及您将添加的额外功能)-创建现有命令的命令扩展。这是影响CME或SiteEdit中现有命令行为的唯一方法。我们希望在项目保存为次要版本之前“强制”用户输入一些元数据(如果尚未输入-通过模式对话框)。我们可以看到SaveAll命令被应用于Save Draft按钮,并且在SaveAll命令被触发时尝试添加一条日志消息,但是日志消息没有注册,那么SaveAll是什么时候执行的呢?对该(扩展)函数应用meta检查/强制是否安全?这将避免扩展许多其他命令,如FinishEditing、StartActivity、FinishActivity等。因为我们可以确保与CME版本相同的应用程序,该版本只挂接Save、SaveNew和SaveClose如果存在SiteEdit扩展,则这将是我们扩展的扩展,因为我们只打算添加此元数据,然后恢复正常的管道/状态。感谢您的评论。更新:问题似乎与我的期望有关,即当创建次要版本时,组件退出时会触发SaveAll(似乎?)。逗号似乎是起作用的黑魔法
Tridion.Extensions.CheckTitleOnFinishActivitySE.prototype.isEnabled = function (selection) {

    $log.message('myfile.js::FinishActivity.prototype._isEnabled::selection.getProperty("isSEPage") = ' + selection.getProperty("isSEPage"));
    $log.message('Tridion.Web.UI.Editors.SiteEdit.Commands.FinishActivity.prototype._isEnabled(selection) = ' + Tridion.Web.UI.Editors.SiteEdit.Commands.FinishActivity.prototype._isEnabled(selection));

$log.message('this.callBase("Tridion.Cme.Command", "_isEnabled", [selection]) = ' + this.callBase("Tridion.Cme.Command", "_isEnabled", [selection]));