当扩展事件被触发时访问 ControlAddin

问题描述 投票:0回答:1

我设置了一个 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;    
}
dynamics-crm dynamics-al
1个回答
0
投票

使用 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;
© www.soinside.com 2019 - 2024. All rights reserved.