我们需要在网格单元格上播放声音文件,为此我们使用下面的控件<audio>类似于默认Acumatica在某些屏幕中用于条形码扫描的方式等.我们做了同样的事情,但是当我们注册脚本时并且控制代码正在改变,<PXControl>并且Play等的方法不可访问.仅当我们尝试将此音频控件插入自定义程序包时才会发生这种情况.在ASPX上,所有功能都可以正常工作.
在包中生成脚本之前
<audio id="audiobeep" preload="auto" src="http://www.soundjay.com/button/beep-07.wav" style="visibility: hidden" />
Run Code Online (Sandbox Code Playgroud)
在包中生成脚本之后
<px:Control runat="server" ID="audiobeep" />
Run Code Online (Sandbox Code Playgroud)
由于"audio"标签正在转换为"px:control"标签,因此它不支持Preload,Src,Style等属性.
你能指导我们这种方法吗?
使用带有"生成自定义脚本"按钮的Aspx编辑器时,唯一支持嵌入任意HTML标记的方法<audio>是使用PXLiteral控件.以下是直接在Aspx编辑器中输入时如何使用PXLiteral控件的示例:
<px:PXLiteral runat="server" Text="<h1>Test!</h1>" />
Run Code Online (Sandbox Code Playgroud)
生成脚本后,就可以从布局编辑器编辑控件的属性.
对于这个特定的场景,我建议采用略有不同的方法,仅涉及使用连接到PXDataSource控件的JavaScript代码.第一步是在图表中创建一个PXAction,当您单击按钮时将调用该PXA:
public PXAction<Customer> test;
[PXUIField(DisplayName = "Test", MapEnableRights = PXCacheRights.Update, MapViewRights = PXCacheRights.Select, Enabled = false)]
[PXButton(ImageKey = PX.Web.UI.Sprite.Main.Process)]
public virtual IEnumerable Test(PXAdapter adapter)
{
//TODO: Do something useful
return adapter.Get();
}
Run Code Online (Sandbox Code Playgroud)
为简单起见,我们假设您可以在主屏幕工具栏中找到按钮 - 但您也可以将其映射到PXButton页面某处的控件.
然后,使用布局编辑器,我们将通过将其拖动到表单来添加JavaScript控件.
添加JavaScript控件后,转到属性部分并设置脚本.脚本需要设置为单行,但为了便于阅读,这里是我们将要使用的脚本的格式很好的版本:
function commandResult(ds, context)
{
if (context.command == 'Test') // Test is the name of the PXAction we created earlier
{
var audio = new Audio('../../Sounds/Ding.wav');
audio.play();
}
}
Run Code Online (Sandbox Code Playgroud)
注意:Ding.wav文件随Acumatica一起提供,但您可以自由使用其他URL中的声音,或者使用您的自定义设置发送声音.如果使用外部URL,请确保使用正确的协议HTTP/HTTPS.
最后一步是将数据源挂钩到JavaScript函数.为此,请单击布局编辑器的DataSource部分,从属性编辑器中打开Client Events组,并将CommandPerformed事件设置为commandResult我们创建的JavaScript函数的名称.
发布后,您将在表单的工具栏中看到"测试"按钮.如果你点击它,你会听到很棒的声音!
无论您的PXAction代表发生什么,声音都将无条件播放.如果您只想在特定条件下播放声音,实现这一目的的一种方法是读取您的代表设置的屏幕上的字段内容,类似于IN305000页面中的内容:
var description = px_alls["edDescriptionPnl"];
if (description != null && description.getValue() != null)
{
var audio = new Audio('../../Sounds/Ding.wav');
audio.play();
}
Run Code Online (Sandbox Code Playgroud)