我设置了一个 controlAddin 并能够通过添加一个我添加到 pageextension 的动作来与之交互。
基本上,controlAddin 是一个简单的 javascript 代码,它根据操作的结果播放声音。
我想更改行为以便在传播来自第 3 方扩展的事件后触发声音。到目前为止,我一直无法这样做,因为我无法将“CurrPage”作为参数传递,因为它受到保护。
这是我拥有的代码,但我是 AL 的初学者。
codeunit 如何访问 controladdin 以触发声音?
页面扩展
pageextension 60101 "WmsAudioFeedbackPageExt" extends "DSHIP Package Worksheet"
{
layout
{
addLast(content)
{
usercontrol(WmsAudioFeedback; WmsAudioFeedback)
{
ApplicationArea = All;
}
}
}
actions
{
addlast(Navigation)
{
action("Play Positive Audio")
{
ApplicationArea = All;
Caption = 'Play Positive Audio';
trigger onAction()
begin
CurrPage.WmsAudioFeedback.playAudio('positive');
end;
}
action("Play Negative Audio")
{
ApplicationArea = All;
Caption = 'Play Negative Audio';
trigger onAction()
begin
CurrPage.WmsAudioFeedback.playAudio('negative');
end;
}
}
}
}
代码单位
codeunit 60102 "WmsAudioFeedbackCodeUnit"
{
SingleInstance = true;
[EventSubscriber(ObjectType::Codeunit, Codeunit::"DSHIP Event Publisher", 'OnAfterScan', '', true, true)]
local procedure OnAfterScan(scan: Text; docType: Option; docNo: Code[50]; lp: Code[50]; item: Code[50]);
begin
//CurrPage.WmsAudioFeedback.playAudio('positive'); ==> ????
end;
}
使用 CurrPage 实例有什么具体原因吗?控件加载项可以放置在新的自定义页面上,它不必位于特定页面的扩展中。我认为这样的事情应该有效。
page 60101 "AudioPlayer"
{
layout
{
area(Content)
{
usercontrol(WmsAudioFeedback; WmsAudioFeedback)
{
ApplicationArea = All;
}
}
}
procedure PlayPositiveAudio()
begin
CurrPage.WmsAudioFeedback.playAudio('positive');
end;
procedure PlayNegativeAudio()
begin
CurrPage.WmsAudioFeedback.playAudio('negative');
end;
}
然后可以在事件订阅者中将此页面声明为局部变量,用于调用JavaScript方法。
[EventSubscriber(ObjectType::Codeunit, Codeunit::"DSHIP Event Publisher", 'OnAfterScan', '', true, true)]
local procedure OnAfterScan(scan: Text; docType: Option; docNo: Code[50]; lp: Code[50]; item: Code[50]);
var
AudioPlayer: Page AudioPlayer;
begin
AudioPlayer.PlayPositiveAudio();
end;