2016-09-27 42 views
4

我們需要在網格單元上播放聲音文件,爲此我們使用了類似於默認Acumatica在某些條形碼掃描等屏幕中使用的控件<audio>。我們也這樣做了,但是當我們註冊腳本並且控制代碼正在更改爲<PXControl>,Play等的方法不可訪問。只有當我們嘗試在定製軟件包中插入此音頻控件時纔會發生這種情況。在ASPX上,所有功能都可以正常工作。如何響應Acumatica中的自定義動作或按鈕播放聲音?

生成腳本之前在包

<audio id="audiobeep" preload="auto" src="http://www.soundjay.com/button/beep-07.wav" style="visibility: hidden" /> 

生成腳本後,在包

<px:Control runat="server" ID="audiobeep" /> 

爲「音頻」標籤轉換成「PX:控制」標籤,它不支持Preload,Src,Style等屬性。

你能指導我們採用這種方法嗎?

回答

7

將Aspx編輯器與「生成自定義腳本」按鈕一起使用時,嵌入任意HTML標記(例如<audio>)的唯一支持方式是使用PXLiteral控件。下面是如果直接輸入到.aspx的編輯器,你會如何使用PXLiteral控制的例子:

<px:PXLiteral runat="server" Text="&lt;h1>Test!&lt;/h1>" /> 

一旦腳本已經生成,可以編輯從佈局編輯器的控件的屬性。

對於這個特定的場景,我會建議一個稍微不同的方法,只涉及使用連接到PXDataSource控件的JavaScript代碼。第一步是建立在你的圖中的PXAction會被調用,當您點擊此按鈕:

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(); 
} 

爲簡單起見,我們假設你確定其主屏幕工具欄中的按鈕 - 但你可以也可以將其映射到您網頁某處的PXButton控件。

然後,使用佈局編輯器,我們將通過將其拖動到窗體來添加JavaScript控件。 JavaScript control

添加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(); 
    } 
} 

注:Ding.wav文件是隨Acumatica,但是您可以自由使用來自另一個URL的聲音,或者隨自定義一起發佈聲音。如果使用外部URL,請確保使用正確的協議HTTP/HTTPS。

最後一步是掛鉤的數據源到你的JavaScript功能。爲此,請單擊佈局編輯器的「數據源」部分,從屬性編輯器中打開「客戶端事件」組,然後將CommandPerformed事件設置爲commandResult,這是我們創建的JavaScript函數的名稱。

Configuring the data source to invoke our custom function

發佈後,您會看到表格的工具欄上的測試按鈕。如果你點擊它,你會聽到一個很好的叮!

The test button

聲音將被無條件地出場,不管你PXAction委託會發生什麼。如果只想在特定條件下播放聲音,一種方法是讀取由代表設置的屏幕上的字段內容,類似於IN305000頁面所做的操作:

var description = px_alls["edDescriptionPnl"]; 
if (description != null && description.getValue() != null) 
{ 
    var audio = new Audio('../../Sounds/Ding.wav'); 
    audio.play(); 
} 
+0

你爲什麼問,然後回答你自己的問題? – Mike

+2

http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ – Gabriel