2017-04-23 120 views
2

我在CRM 2016中有一個代碼C#插件。 我想在插件結束時激活一個Javascript代碼。 我嘗試通過此插件更新字段,並在此字段更改時使用javaScript代碼觸發更改事件。 我看到,字段發生了變化,但它不會激活更改字段時發生的功能。 但是,當手動更改此字段而不是通過插件時,該功能運行良好。如何知道插件在CRM 2016中何時結束?

也許有一個想法知道插件何時結束?

+0

因此,該插件正在更新,是否正確? 此外,更新是從javascript中的窗體保存調用? –

回答

1

如果從窗體上的保存中調用插件並同步註冊插件,則可以從保存返回時運行腳本。您需要使用異步保存方法:Xrm.Page.data.save().then(_success, fail); 這與舊版Xrm.Page.data.entity.save(saveType)操作不同,後者是同步操作,無法捕獲回報。

如果您需要此插件在每次保存時觸發,則捕獲OnSave事件,取消默認操作並使用此異步保存方法。以下是討論取消默認保存操作的頁面:https://neilparkhurst.com/2015/11/11/javascript-prevent-save/ 您可以使用它來創建此「可恢復」保存操作。在您的then()成功方法中,您可以獲取該插件更改的屬性並調用您的方法fireOnChange()

下面是這個新運行XRM文檔: https://msdn.microsoft.com/en-us/library/dn481607.aspx?f=255&MSPPError=-2147217396

+1

感謝您的回答。 但我不能激活功能Xrm.Page.data.save()。然後(_成功,失敗) 因爲,更新和保存字段的代碼插件它是一個服務器端。 和函數save for form由插件保存時不起作用,因爲它是客戶端。 – Racheli

+0

啊,那麼觸發插件是什麼?我以爲你正在對錶格進行修改,保存,從而觸發插件。那麼導致插件啓動的是什麼?如果它是你控制的東西,我的第二個答案可能更有意義。 –

1

這是一個單獨的答案,因爲它是一個不同的情況的解決方案。你會做這個或我的其他答案,但可能不是兩個,我不想混淆,把它們放入一個答案。

如果這個「插件」是偶然的,因爲它只是偶爾發生,而不是每次保存時,它可能是使用動作的好時機。在行動之前,我們經常會有「控制字段」 - 一個實體上沒有任何數據值的字段,我們在保存時將它們設置爲使插件以特殊方式運行。如果出現這種情況,我會建議將代碼重構爲自定義活動(與爲工作流製作自定義代碼相同)並直接調用該操作,而不是保存在插件中。在這種情況下,您不需要「保存後運行javascript」,因爲您只需調用一個操作並在此之後運行。

0

完成Server端插件的執行後,我們無法在客戶端執行一些Javascript函數代碼塊。

但通過擴展你的方法,你在插件更新空場,所以刷新的形式看到最新的變化,在形式負載 - 射擊那空場的的onchange()方法應該很好地工作。

+1

2016年不需要使用虛擬字段來控制插件行爲,您可以將該功能重構爲動作並直接調用行爲。 –

相關問題