web-dev-qa-db-ja.com

Dynamics 365 9.0のリボンコマンドでformContextを取得する方法

Dynamics 365 9.0では、フォームの属性とコントロールにアクセスする方法に関してかなり大きな変更がありました-_Xrm.Page_名前空間の代わりに、executionContextを関数に渡し、getFormContext()を使用してformContextを取得する必要があります関数。これはうまく機能しており、このアプローチを使用しても問題はありませんでした。

ただし、リボンから呼び出される関数でformContextに適切にアクセスする方法はまだわかりませんでした。ドキュメントには、これは本当に簡単なはずだと書かれています:

https://docs.Microsoft.com/en-us/dynamics365/customer-engagement/developer/customize-dev/pass-dynamics-365-data-page-parameter-ribbon-actions

_function myFunction(executionContext) {
    var formContext = executionContext.getFormContext();
    var focusFieldValue = formContext.ui.controls.get(PrimaryControlId).getAttribute().getValue();
}
_

ただし、executionContextをリボン関数に渡す方法については説明していません。通常の機能にはチェックボックス「最初のパラメーターとして実行コンテキストを渡す」がありますが、リボン機能はどうですか?これらの関数に渡すことができるパラメーターはありますが、それらは選択されたレコードのGUID、または選択されたレコードのタイプ、またはオブジェクトのリストでさえありますが、はexecutionContextと等しいパラメーターです。既にこの問題を解決している人はいますか?

また、私はXrm.Pageを使用できることを知っています(少なくとも現時点では...)が、バージョン9.0の最新のガイドラインを使用してどのように実行できるかを知りたい

更新1:

スコットの提案と この記事 に従って、PrimaryControlをリボンコマンドに渡しましたが、残念なことに、引数は_Mscrm.FormControlLite_型であり、getAttribute関数またはその関数はありませんformContextへのアクセスを許可します(少なくとも有用なものは見当たりません)。開発者ツールのスクリーンショット: enter image description here

そのため、何らかのフォーム表現のように見えますが、おそらくformContextとは関係ありません(リボンがレコードのリストから呼び出される場合、このアイテムはグリッドまたはそのようなものになります)

12
Pawel Gradecki

https://docs.Microsoft.com/en-us/dynamics365/get-started/whats-new/customer-engagement/important-changes-coming#some-client-apis-are-deprecated PrimaryControlパラメーターとして渡します。

enter image description here

したがって、PrimaryControlをこのようなコマンド関数の2番目のパラメーターとして渡す場合、次のように使用できます。

arguments[1].getAttribute(…)
13
Scott Durow

私も同じ問題を抱えていました。私が見つけたのは、Microsoft docoにエラーがあったことです。 ScottがリボンコマンドアクションからCRMパラメーターを渡すことに言及したものに従ってください。 JavaScript関数では、フォームコンテキストを取得するために以下を試してください

var formContext = primaryControl.getFormContext();

これは私の問題を修正しました。

1
GK Patibandla

@ scott-durowが示唆するようにprimaryControlを渡した後、primaryControl.getFormContext()を使用せずに、primaryControlをformContextであるかのように使用することをお勧めします。

ドキュメントによると(1/2/2019): https://docs.Microsoft.com/en-us/dynamics365/customer-engagement/developer/customize-dev/pass-dynamics-365-data- page-parameter-ribbon-actions#form-and-grid-context-in-ribbon-actions 、primaryControlがformContextであるかのように操作を実行する必要があります。

function mySampleFunction(primaryControl) {
    var formContext = primaryControl;
    // Perform operations using the formContext object
}

しかし、提供された例の重要な部分はこれです:// formContextオブジェクトを使用して操作を実行しますキーを使用して= primaryControl行、imo、代わりに例を示しただけの場合はより明確になります:primaryControl.getAttribute( 'xxxx');

PrimaryControl.getFormContext()コードが使用され始めたのは、フォームを操作するときにformContextを取得する方法が原因だと思われます( https://docs.Microsoft.com/en-us/dynamics365/customer-engagement/developer/clientapi/clientapi-form-context#using-the-formcontext-object-instead-of-the-xrmpage-object )。

PrimaryControl.getFormContext()を使用する際の問題は、通常のWebインターフェースでは機能するが、UCIでは機能しないことです。ただし、primaryControlをフォームコンテキストのように使用すると、レガシーWebクライアントとUCIの両方のインターフェイスで機能します。

私が使用する関数は次のとおりです。

function getFormContext(executionContext) {
     var formContext = null;
     if (executionContext !== null) {
         if (typeof executionContext.getAttribute === 'function') {
             formContext = executionContext; //most likely called from the ribbon.
         } else if (typeof executionContext.getFormContext === 'function' 
                 && typeof(executionContext.getFormContext()).getAttribute === 'function') {
            formContext = executionContext.getFormContext(); // most likely called from the form via a handler
         } else {
            throw 'formContext was not found'; //you could do formContext = Xrm.Page; if you like.
        }
    }
    return formContext;
}
1
Raj Rao

RibbonWorkbenchユーティリティでプライマリコントロールをCrmパラメーターとして渡さなくて済むようにするためのちょっとしたトリックがあります。 -グリッドリボン。

var context=Xrm.Utility.getGlobalContext();

これがあなたや他の人に役立つことを願っています。

0
Manuel Roldan