ユーザーがページまたはコンポーネントからオプションを選択したときに、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]);
};
Tridion.Extensions.CheckTitleOnFinishActivitySE.prototype._isAvailable = function (selection) {
var response = Tridion.Web.UI.Editors.SiteEdit.Commands.FinishActivity.prototype._isAvailable(selection);
};
ただし、既存の 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 = function (selection) {
return (selection && selection.getProperty && selection.getProperty("isSEPage")) &&
this.callBase("Tridion.Cme.Command", "_isEnabled", [selection]);
};
次のエラーが表示されます。
[tcm:8-349-131200] でコマンド「FinishActivity」を実行できません。理由: 有効になっていません。
isEnabled関数からreturn trueを使用するだけで状態を強制的に有効にすることができますが、既存のチェックを継承/再利用して、現在および将来のシナリオに対応したいと考えています...
_ isAvailableがキャッチされて true を返し、拡張するために必要な関数がisEnabledであり、_ isEnabledではないことを確認できます(後者を単独で追加するか、isEnabledに加えて追加しても効果はありません) 。
どんなアドバイスも素晴らしいでしょう!
前もって感謝します。
更新 - デバッグの追加
そこで、拡張 isEnabled に以下を追加して、isEnabled 'v' の選択オブジェクトの応答とデフォルトの isEnabled の違いを追跡しました。
isSEPage プロパティが true の場合、「workflow.js」は値を表示しますが、関数で直接チェックすると false になります。私の isEnabled からオリジナルに呼び出されると、それも false を返すことが一貫して読み取られます。選択に何が起こるのか、または別の選択オブジェクト/コンテキストを扱っているのかわかりませんか?
拡張 isEnabled をデバッグ スクリプトで更新しました。
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._isEnabled::selection.getProperty("isSEPage") = true myfile.js::FinishActivity.prototype._isEnabled::selection.getProperty("isSEPage") = 未定義 myfile.js::FinishActivity. prototype.isEnabled ==> オリジナルの呼び出しをチェック中... ::FinishActivity.prototype.isEnabled ==> オリジナルからコピーしたコードを使用してチェックしています... [tcm:8-349-131200] でコマンド「CheckTitleOnFinishActivitySE」を実行できません。理由: 有効になっていません。
より多くのデバッグ
元の CME ワークフロー スクリプトにはisEnabled関数がまったくないことがわかりました。
拡張 isEnabled 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._isEnabled::selection.getProperty("isSEPage") = 未定義 Editor_v6.1.0.55920.269_.aspx:7175 workflow.js:FinishActivity.prototype._isEnabled::selection.getProperty("isSEPage" ) = 未定義の Editor_v6.1.0.55920.269_.aspx:7175 Tridion.Web.UI.Editors.SiteEdit.Commands.FinishActivity.prototype._isEnabled(selection) = 未定義の Editor_v6.1.0.55920.269_.aspx:7175 this.callBase(" Tridion.Cme.Command", "_isEnabled", [選択]) = false
元の(SiteEdit)はスクリプトの前にまだ実行されており、戻ります
workflow.js::FinishActivity.prototype._isEnabled::selection.getProperty("isSEPage") = true
FinishActivity へのオプションの選択時に Tridion SiteEdit isEnabled がチェックされていて、FinishActivity アクション自体がインスタンス化されたときに拡張機能が実行されているかどうか疑問に思っています。私はさらに探していますが、誰かがイテリムに何かを見たら、それは素晴らしいことです!
ありがとう