トップ回答者
統一インターフェイスの日付と時間フィールドについて

質問
-
お世話になります。
『日付と時間』フィールドについてですが、
javascriptでフィールド値を取得した際、
レガシー画面の場合は、秒数が正確に取得されますが、
統一インターフェイス画面で取得すると、秒数が必ず0で取得されますが仕様なのでしょうか。
// saveDateフィールドの日時の表示 console.log(Xrm.Page.data.entity.attributes.get("saveDate").getValue()); // レガシーの場合 Mon Apr 13 2020 08:06:23 GMT+0900 (日本標準時) // 統一インターフェイスの場合 Mon Apr 13 2020 08:06:00 GMT+0900 (日本標準時)
- 編集済み rias.crm 2020年4月13日 1:53
回答
-
こんにちは。
Dynamics 365 公式の getValue() のリファレンスを確認しましたが、秒数の取得については特に言及がありませんでした。
現在、統一インターフェイスの環境がないので検証は行えないのですが、以下を実施してみてはいかがでしょうか?
[構文を確認する]
念のためですが、以下、書き間違えですよね?
誤:Xrm.Page.data.entity.attributes.get("saveDate").getValue();
正:Xrm.Page.data.entity.attributes("saveDate").getValue();
[新APIを利用してみる]
"Xrm.Page"のAPIですが、現在は非推奨の書き方となりますので、以下の様に新しい構文で置き換えてみてはいかがでしょうか?
function getTime(executionContext) { // 実行コンテキストの取得 var formContext = executionContext.getFormContext(); alert(formContext.getAttribute("saveDate").getValue()); }
上記について、詳しくは私の過去のブログ記事を参考にしてください。
http://westcoastline.hatenablog.com/entry/2018/02/26/161906
[WebAPIを利用してみる]
getAttributeはクライアント側で値の取得を試みますが、以下のWebAPIを使用すればサーバ側の値を取得することができますので、もしかしたら秒数まで返却されるかもしれません。
function getTimeFromServer(executionContext) { // 実行コンテキストの取得 var formContext = executionContext.getFormContext(); var id = formContext._entityReference.id.guid; Xrm.WebApi.retrieveRecord("EntityName", id).then( function success(result) { alert(result.savedate); }, function (error) { alert("Error"); } ); }
こちらも過去にブログを書いていますので、参考にしてください。
http://westcoastline.hatenablog.com/entry/2019/09/03/105411
なお、上記全ての方法を試しても秒数が取得できない場合は、以下の様な原因が考えられます。
・日付型項目の値取得の仕様が変更され、統一インターフェイスでは秒数が読み捨てられるようになった
・サーバ側にそもそも秒数を格納しなくなった
- 回答としてマーク rias.crm 2020年4月15日 0:19
すべての返信
-
こんにちは。
Dynamics 365 公式の getValue() のリファレンスを確認しましたが、秒数の取得については特に言及がありませんでした。
現在、統一インターフェイスの環境がないので検証は行えないのですが、以下を実施してみてはいかがでしょうか?
[構文を確認する]
念のためですが、以下、書き間違えですよね?
誤:Xrm.Page.data.entity.attributes.get("saveDate").getValue();
正:Xrm.Page.data.entity.attributes("saveDate").getValue();
[新APIを利用してみる]
"Xrm.Page"のAPIですが、現在は非推奨の書き方となりますので、以下の様に新しい構文で置き換えてみてはいかがでしょうか?
function getTime(executionContext) { // 実行コンテキストの取得 var formContext = executionContext.getFormContext(); alert(formContext.getAttribute("saveDate").getValue()); }
上記について、詳しくは私の過去のブログ記事を参考にしてください。
http://westcoastline.hatenablog.com/entry/2018/02/26/161906
[WebAPIを利用してみる]
getAttributeはクライアント側で値の取得を試みますが、以下のWebAPIを使用すればサーバ側の値を取得することができますので、もしかしたら秒数まで返却されるかもしれません。
function getTimeFromServer(executionContext) { // 実行コンテキストの取得 var formContext = executionContext.getFormContext(); var id = formContext._entityReference.id.guid; Xrm.WebApi.retrieveRecord("EntityName", id).then( function success(result) { alert(result.savedate); }, function (error) { alert("Error"); } ); }
こちらも過去にブログを書いていますので、参考にしてください。
http://westcoastline.hatenablog.com/entry/2019/09/03/105411
なお、上記全ての方法を試しても秒数が取得できない場合は、以下の様な原因が考えられます。
・日付型項目の値取得の仕様が変更され、統一インターフェイスでは秒数が読み捨てられるようになった
・サーバ側にそもそも秒数を格納しなくなった
- 回答としてマーク rias.crm 2020年4月15日 0:19
-
westcoastline様
詳細の回答ありがとうございます。
まず結論からですが、
統一インターフェイスでは、WebAPIを使用すると秒数が取得できました。
検証では、作成日(createdon)で秒数が保存されている事を確認したレコードで確認しました。function valueData(executionContext){ // 旧API var rt1 = Xrm.Page.data.entity.attributes.get("createdon").getValue(); console.log(`rt1-->:${rt1}`); var rt2 = Xrm.Page.getAttribute("createdon").getValue(); console.log(`rt2-->:${rt2}`); // 新API var formContext = executionContext.getFormContext(); var rt3 = formContext.getAttribute("createdon").getValue(); console.log(`rt3-->:${rt3}`); // WebAPI getTimeFromServer(executionContext); } function getTimeFromServer(executionContext) { // 実行コンテキストの取得 var formContext = executionContext.getFormContext(); var id = formContext._entityReference.id.guid; Xrm.WebApi.retrieveRecord("EntityName", id).then( function success(result) { console.log(`rt4-->:${result.createdon}`); }, function (error) { alert("Error"); } ); }
// 【レガシー】
// ・旧API:〇
// ・新API:〇
// 【統一インターフェイス】
// ・旧API:×
// ・新API:×
// ・WebAPI:〇getAttributeですが、
正式にはXrm.Page.data.entity.attributes.getでショートカットバージョンとして提供されていると
記載がありましたので、そのまま使用していました。
また、ほぼ毎日データを作成してますが、
『日付と時間』フィールドに以下のコードで保存したデータを確認した所、
2018/10/15付近から秒数が反映(保存)されていない状況でした。
(仕様変更なのかは不明)
var nowDate = new Date(); Xrm.Page.data.entity.attributes.get("saveDate").setValue(nowDate); Xrm.Page.data.entity.attributes.get("saveDate").setSubmitMode("always");
今後は、非推奨のコードを順次変更予定です。
- 編集済み rias.crm 2020年4月14日 7:23