Japan Dynamics CRM Team Blog
News and views from the Microsoft Japan CRM Team

  • Japan Dynamics CRM Team Blog

    Dynamics CRM 2011 アクティビティフィードの Like‐Unlike 機能

    • 0 Comments

    みなさん、こんにちは。

    今日は次期バージョンのアクティビティフィードについて、最新情報をお届けします。
    尚、画面ショット等一部英語のままですが、まだ日本語版での情報がないため
    ご了承ください。

    情報元 : Like-Unlike for Activity Feeds

    アクティビティ フィードは昨年マーケットプレース上に公開されました。その後多くの
    フィードバックをいただき、とうとう次期 Update Rollup にて機能追加をすることと
    なりました。新しい機能には、より柔軟なフィルター機能や、既定のビュー機能、また
    Like‐Unlike 機能などがありますが、この記事では Like‐Unlike 機能について
    紹介します。

    多くの SNS のでは、特定の投稿に対する人気の度合いを測る機能を提供しています。
    例えば Facebook のいいね!ボタンや、Google+ の +1 です。このシステムがある
    ことで、より積極的にユーザーが投稿を作成したり、コメントすることとなり、その結果
    ユーザがよりコミュニティに参加している意思が高くなります。

    Like-Unlike 機能はアクティビティフィードに同様のユーザー体験をもたらすことと
    なります。現在投稿にはコメントボタンしかありませんが、時期バージョンでは
    以下のように Like-Unlike ボタンが表示されます。

    Clicking it likes a post and changes the button text to
    ‘Unlike’. The content below the post text now indicates that you’ve liked this
    post:

    Like がクリックされた投稿を他のユーザーが見ると、以下のように表示されます。

    Like の数は Like ボタンをクリックしたユーザーの数と同一です。また表示されている
    数字をクリックすることで、誰が Like ボタンをクリックしたかが表示されます。

    Windows Phone アプリケーションにもこの機能が提供されます。

    左下に見えるスマイルアイコンが Like ボタンです。

    Like-Unlike 機能は個人ウォールでもレコードウォールでも同様に機能します。
    また読取り最適化フォームでも同じ経験を提供します。またユーザーが作成
    した投稿でも、ワークフローや SDK で作成された投稿に対しても Like-Unlike
    が行えます。

    以下に SDK のサンプルを紹介します。特定の投稿に Like を作成することや
    Like したユーザーの一覧を取得することが可能です。

    // Like a post with a particular Id
    var postLike = new PostLike { PostId = new EntityReference(Post.EntityLogicalName, post.Id) };
    Guid likeId = _serviceProxy.Create(postLike);
    Console.WriteLine("Post with Id :{0} liked.", post.Id);

    // Retrieve list of likes for a particular post
    string retrieveLikesFetchXml = "<fetch version=\"1.0\" output-format=\"xml-platform\" mapping=\"logical\" distinct=\"true\" returntotalrecordcount='true'>" + 
                                       "<entity name=\"systemuser\">" +
                                       "<attribute name=\"fullname\"/>" +
                                       "<attribute name=\"systemuserid\"/>" + 
                                       "<order descending=\"false\" attribute=\"fullname\"/>" +
             "<link-entity name=\"postlike\" alias=\"aa\" to=\"systemuserid\" from=\"createdby\">" +
                                       "<filter type=\"and\">" + 
                      "<condition attribute=\"postid\" value=\"{" + post.Id +"}\" operator=\"eq\"/>" +
                                      "</filter>" + 
                                       "</link-entity>" + 
                                       "</entity>" +
                                       "</fetch>";

    var fetchExpression = new FetchExpression(retrieveLikesFetchXml);
    var likes = _serviceProxy.RetrieveMultiple(fetchExpression);

    Console.WriteLine("{0} users like this post. They are:", likes.Entities.Count);

    foreach (var entity in likes.Entities)
    {
    Console.WriteLine(entity.Attributes["fullname"]);
    }

    アクティビティフィードはユーザーのコミュニケーションを推進するために
    提供されているため、投稿を dislike することや、ワークフローを利用して
    Like-Dislike 機能を利用することはできません。

    まとめ

    いよいよ次期バージョンのアクティビティフィードのリリースが迫ってきました。
    Like-Dislike 機能だけでなく、他にも便利な機能の追加や、既存の問題の
    修正も含まれる予定です。逐次情報は提供していきますので、お楽しみに!

    ‐ Dynamics CRM サポート 中村 憲一郎

  • Japan Dynamics CRM Team Blog

    Microsoft Press 無償の電子ブック紹介

    • 0 Comments

    みなさん、こんにちは。

    本日はいつもと趣向を変えて、Microsoft Press から発行されている
    無償の電子ブックの紹介をしたいと思います。

    情報元 : Ramping up on stack technologies for Dynamics CRM

    Microsoft Dynamics CRM を利用する上で前提となっている、その他の技術を
    理解することは、とても重要です。これらの技術に関して最新の情報を得るため、
    多くの時間を書籍を読むことに費やすことになりますが、これらの技術の動作の
    仕組みや、機能を理解することができ、Microsoft Dynamics CRM をより活用
    できるようになります。

    情報元としては、多くの書籍やクラスルームトレーニング、またブログなどが存在
    しますが、意外と知られていないものの中に、無償の MS Press の電子ブックが
    あります。以下のブログでは、SQL Server 2012, SQL Server 2008 R2, Windows
    Server 2008 R2, Office 2010, Windows 7 といった無償で、最新の電子ブックが
    紹介されています。是非ご覧ください。

    http://blogs.msdn.com/b/microsoft_press/archive/2012/05/04/free-ebooks-great-content-from-microsoft-press-that-won-t-cost-you-a-penny.aspx

    まとめ

    PDF はすべて英語ですが、日本語の情報も見つけ次第発信していきます。
    英語でもいいよ!という方は、是非ご覧ください。

    ‐ Dynamics CRM サポート 中村 憲一郎

  • Japan Dynamics CRM Team Blog

    Dynamics CRM 2011 SDK サンプル紹介 : システムビューの状態変更

    • 0 Comments

    みなさん、こんにちは。

    今回は SDK サンプルを組み合わせた、システムビューのステータス変更の
    サンプルを紹介します。

    シナリオ

    Microsoft Dynamics CRM 2011 において、開発と本番環境の組織が存在
    する環境で、ソリューションを移行します。この際、一部のシステムビューを
    非アクティブに変更してると想定します。

    ソリューションの移行後、本番環境で非アクティブにしたシステムビューを
    確認すると、アクティブになっています。これはソリューション内のシステム
    ビュー定義にステータス情報が含まれないためです。

    複数のエンティティの複数のシステムビューを非アクティブにする作業は
    手間がかかります。

    解決策

    システムビューのステータスは、SDK を利用して変更できます。今回は
    複数のサンプルを組み合わせて、その要件を実現してみます。

    サンプル

    SDK のヘルパーコードを利用しつつ、サンプルを極力再利用するため
    コンソールアプリケーションを作成します。

    1. Visual Studio 2010 を起動します。

    2. コンソール アプリケーションプロジェクトを作成します。今回は
    UpdateSavedQueryStatus としました。

    3. 作成されたプロジェクトを右クリックして、プロパティをクリックします。
    対象のフレームワークより .NET Framework 4.0 を指定します。

    4. 以下の参照を追加します。

    Microsoft.Xrm.Sdk.dll
    Microsoft.Crm.Sdk.Proxy.dll

    System.Runtime.Serialization
    System.Security
    System.ServiceModel
    System.DirectoryServices.AccountManagement

    5. 以下のファイルを sdk\samplecode\cs\helpercode より
    既存のアイテムとして追加します。

    crmservicehelpers.cs
    deviceidmanager.cs
    myorganizationcrmsdktypes.cs

    6. Program.cs ファイルを開いて、クラスプロパティを追加します。

    private OrganizationServiceProxy _serviceProxy; // 開発環境用
    private OrganizationServiceProxy _serviceProxy2; // 本番環境用

    7. using ステートメントを追加します。

    using Microsoft.Crm.Sdk.Samples;
    using Microsoft.Xrm.Sdk.Client;
    using Microsoft.Xrm.Sdk.Query;
    using Microsoft.Xrm.Sdk;
    using Microsoft.Crm.Sdk.Messages;

    8. Main メソッドに以下のコードを追加します。

    // 開発環境用
    ServerConnection serverConnect = new ServerConnection();
    ServerConnection.Configuration config = serverConnect.GetServerConfiguration();

    // 本番環境用
    ServerConnection serverConnect2 = new ServerConnection();
    ServerConnection.Configuration config2 = serverConnect2.GetServerConfiguration();

    Program app = new Program();
    app.Run(config, config2);

    9. Run メソッドを追加します。

    public void Run(ServerConnection.Configuration serverConfig, ServerConnection.Configuration serverConfig2)
    {
        try
        {
            // 開発環境の組織 Web サービスに接続 
            // using を利用することで、Dispose を確実に行う
            using (_serviceProxy = ServerConnection.GetOrganizationProxy(serverConfig))
            {
                // 事前バインドを利用するためには、以下コードが必須
                _serviceProxy.EnableProxyTypes();

                // SavedQuery を取得するクエリを作成
                QueryExpression mySavedQuery = new QueryExpression
                {
                    ColumnSet = new ColumnSet("savedqueryid","name"), // ID と Name 列を取得
                    EntityName = SavedQuery.EntityLogicalName,
                    Criteria = new FilterExpression
                    {
                        Conditions =
                        {
                            new ConditionExpression
                            {
                                // 現在非アクティブになっている SavedQuery のみ取得
                                AttributeName = "statecode",
                                Operator = ConditionOperator.Equal,
                                Values = {(int)SavedQueryState.Inactive}
                            },
                            new ConditionExpression
                            {
                                AttributeName = "querytype",
                                Operator = ConditionOperator.Equal,
                                Values = {0}
                            }                           
                        }
                    }
                };
                       
                // クエリを実行
                EntityCollection savedQueries = _serviceProxy.RetrieveMultiple(mySavedQuery);

                // 本番環境の組織 Web サービスに接続
                // using を利用することで、Dispose を確実に行う
                using (_serviceProxy2 = ServerConnection.GetOrganizationProxy(serverConfig2))
                {
                    // 事前バインドを利用するためには、以下コードが必須
                    _serviceProxy2.EnableProxyTypes();

                    // 取得した結果を利用して、本番環境の SavedQuery を非アクティブにする
                    foreach (SavedQuery savedQuery in savedQueries.Entities)
                    {
                        // SetStateRequest を利用してステータスを変更
                        SetStateRequest req = new SetStateRequest();
                        req.State = new OptionSetValue((int)SavedQueryState.Inactive);
                        req.Status = new OptionSetValue(2);
                        req.EntityMoniker = new EntityReference(SavedQuery.EntityLogicalName, savedQuery.SavedQueryId.Value);

                        SetStateResponse res = (SetStateResponse)_serviceProxy2.Execute(req);
                    }
                }
            }
        }
        catch { }
    }

    10. アプリケーションをビルドします。

    11. アプリケーションを実行します。通常のサンプルと異なり、組織の情報を
    2 度聞かれますが、初めが開発環境、後が本番環境として利用します。

    利用したサンプルの紹介

    まず Main メソッド内のコードは、ほぼすべてのサンプルで利用されている
    ものをそのまま再利用しました。唯一の違いは、2 つの組織の構成を作成
    している点です。

    次に SavedQuery の取得やステータス変更は、以下内容を利用しました。
    Microsoft Dynamics CRM でのエンティティ ビューのカスタマイズ
    こちらのページにはビューを扱う様々な方法が紹介されています。

    まとめ

    今回のサンプルではエラー処理を行っていないことや、ビュー取得のクエリ
    の条件が非常にシンプルなため、より実用的にするには改修が必要ですが
    ヘルパークラスを利用していることから、設置型やオンライン等、環境を
    問わず利用できるメリットがあります。

    是非色々なサンプルをお試しください。

    ‐ Dynamics CRM サポート 中村 憲一郎

  • Japan Dynamics CRM Team Blog

    Dynamics CRM 2011 SDK Web サービス利用時のベストプラクティス その 2

    • 0 Comments

    みなさん、こんにちは。

    以前 Web サービス認証におけるベストプラクティス を紹介しましたが、今回も
    引き続きベストプラクティスの検証記事をお届けします。

    Execute メソッド 対 共通メソッド

    SDK には、以下のベストプラクティスの紹介があります。

    共通メソッドの使用
    共通メソッドは、対応するメッセージで Execute メソッドを使用するよりもすばやく
    実行できます。

    つまりレコードを作成するなら、 Execute メソッドより、 Create メソッドを利用した
    方がパフォーマンスが良いということです。では実際に試してみましょう。

    前提

    今回も、前回同様コンソールアプリケーションを利用します。また前回のベスト
    プラクティスを考慮した開発を行っています。環境は新規に作成した Microsoft
    Dynamics CRM 2011 設置型で、重複検出ルールは無効、プラグインやプロセス
    はともに存在しない、取引先企業レコードを 1000 件連続作成します。

    プログラム A では Create メソッドを、 プログラム B では Execute メソッドを
    それぞれ利用しています。

    検証結果

    パフォーマンスのばらつきを考慮して、5 回検証しました。

    プログラム A プログラム B
    1 回目 21 .2 秒 23 .1 秒
    2 回目 17.2  秒 17.6 秒
    3 回目 19.0 秒 19.5  秒
    4 回目 18.3 秒 17.0 秒
    5 回目 16.1  秒 20.1 秒

    ほとんど差はないものの、概ねプログラム A のパフォーマンスが良い傾向が
    出ています。また 5000 件 レコードを作成する検証も 1 度だけ行いましたが
    1000 件の時と大差ない結果となりました。

    プログラム A プログラム B
    1 回目 81.6 秒 82.2 秒

    まとめ

    今回非常に簡単なシナリオをプログラムで検証した限りでは、Execute と
    Create 共通メソッドの差を見ることはできませんでしたが、また他の共通
    メソッドで検証してみたいと思います。

    ‐ Dynamics CRM サポート 中村 憲一郎

  • Japan Dynamics CRM Team Blog

    Dynamics CRM 2011 で JScript を利用する

    • 0 Comments

    みなさん、こんにちは。

    今回は開発者の方向けに、SDK より JScript の情報をご案内します。
    まだ日本語版の SDK にはない情報ですので、是非ご覧ください。
    要所をかいつまんで紹介しているため、詳細は原文をご参照ください。

    情報元 : http://msdn.microsoft.com/en-us/library/hh771584.aspx

    概要

    Microsoft Dynamics CRM 2011 および Microsoft Dynamics CRM オンラインでは、
    JScript をサポートしています。このトピックでは JScritp を利用する開発者向けの
    情報とリンクを提供します。

    JScript が利用できる場所

    JScript は以下の場所で利用が可能です。

    フォームスクリプト

    JScript の利用場所として最も一般的なものは、エンティティのフォーム上で動作する
    フォームスクリプトです。OnLoad や OnChange 等、各種イベントに対してスクリプト
    を動かすことが可能です。

    詳細は以下のリンクを参照してください。
    Microsoft Dynamics CRM フォームのコードを記述する

    リボンコマンド

    リボンコントロールクリック時の動作として、スクリプトを実行することが可能です。

    詳細は以下のリンクを参照してください。
    Microsoft Dynamics CRM のリボンのカスタマイズ

    Web リソース

    Web リソースには様々なタイプがあり、JScript Web リソースにはスクリプトを
    直接保存することができます。また HTML Web リソースから JScritp Web
    リソースを呼び出したり、HTML Web リソース内に直接スクリプトを埋め込む
    ことも可能です。

    詳細は以下のリンクを参照してください。
    Microsoft Dynamics CRM の Web リソース

    JScript を利用したデータアクセス

    JScript から利用できる Web サービスは 2 種類存在します。
    ※これらの Web サービスは外部からのアクセスをサポートしません。

    Web リソース用 REST エンドポイント

    REST エンドポイントは Uniform Resource Identifier (URI) を利用した
    HTTP リクエストを利用した呼び出しが可能です。現時点では、レコードの
    作成、読み取り、変更、削除操作のみをサポートしています。

    サンプルは以下のリンクを参照してください。
    サンプル: REST エンドポイントと JavaScript を使用した作成、取得、更新、および削除

    REST エンドポイントを利用する利点は、OData プロトコルをサポートしている
    点です。OData を利用して柔軟なクエリが実行できます。データを取得する
    際には JavaScript Object Notation (JSON) フォーマットが利用できます。
    これにより取得結果の扱いが容易になります。

    ただし 組織 Web サービスの Execute メソッドを実行することはできない
    ため、その場合は Web リソース用の組織 Web サービスを利用します。

    REST エンドポイントの詳細は、以下のリンクを参照してください。
    Web リソースの REST エンドポイントの使用

    Web リソース用 SOAP エンドポイント

    SOAP エンドポイントを利用すれば、Execute メソッドを利用可能です。
    併せて、Create、Retrieve、RetrieveMultiple、Update、Delete 等共通
    メソッドも利用可能になります。しかし REST エンドポイントと比較すると、
    難易度が高くなります。

    SOAP エンドポイントを利用する場合、XML 形式のリクエストを HTTP リクエスト
    の一部として送信し、 XML 形式の応答をハンドルする必要があります。C#
    サンプルとして提供される SoapLogger と呼ばれるツールを利用し、任意の
    操作を行った際の XML 形式のデータをキャプチャできます。

    また Microsoft CRM MVP である Jamie Miley 氏が作成した SOAP リクエスト
    の作成ツールが、Codeplex からダウンロード可能です。

    CRM 2011 Jscript Soap Request Formatter
    http://crm2011soap.codeplex.com/

    また SDK のサンプルではメタデータ取得の方法を提供しています。
    サンプル: JScript を使用したエンティティ メタデータの取得

    SOAP エンドポイントの詳細は、以下のリンクを参照してください。
    Web リソースの SOAP エンドポイントの使用

    JScript のベストプラクティス

    以下に JScript のベストプラクティスを紹介します。

    DOM は利用しない

    スクリプト開発者は、Document Object Model (DOM) を利用した開発を
    今までに行ったことがあると思いますが、Microsoft Dynamics CRM では
    サポートされません。ただし HTML Web リソース内で、独自の要素に
    対する操作は自由に行って構いません。

    Microsoft Dynamics CRM のエンティティやフォーム上の要素にアクセス
    するために、Xrm.Page オブジェクトモデルが提供されています。フォーム
    で利用するスクリプトでは、Xrm.Page オブジェクトを利用してください。

    詳細は以下のリンクを参照してください。
    Xrm.Page オブジェクト モデルの使用

    関数名はユニーク名を利用する

    開発者が 1 人だけで、ソリューションも 1 つの場合には問題になりませんが、
    Microsoft Dynamics CRM 2011 および Microsoft Dynamics CRM オンライン
    では複数のソリューションをサポートしているため、JScript の関数名が重複
    する恐れがあります。同じ名前の関数が同一フォーム上に存在する場合は
    後から登録された関数が上書きされるため、かならず関数名がユニークに
    なるよう心がけてください。

    詳細は以下のリンクを参照してください。
    Microsoft Dynamics CRM の JScript ライブラリ

    データアクセスは非同期を利用する

    REST や SOAP エンドポイントを利用してデータを取得する場合には、常に
    非同期実行に構成された XMLHttpRequest を利用してください。これは
    ブラウザがシングルスレッドで動作するため、データ取得に時間がかかると
    UI の応答がなくなるためです。

    JScript のデバッグ

    多くの開発者が、Internet Explorer 8 以降で提供される開発者ツールを利用
    して、スクリプトのデバッグを行います。詳細は以下のリンクを参照してください。
    開発者ツールを使用したスクリプトのデバッグ

    また Visual Studio を利用してデバッグすることも可能です。
    詳細は以下のリンクを参照してください (英語)
    How to Debug JScript in Microsoft Dynamics CRM 2011.

    まとめ

    こちらで紹介した情報のほとんどは、今までブログでも紹介してきましたが、
    まとまったページがあると便利ですね。JScript の開発者の方は、色々な
    ところでスクリプトを利用してみてください。

    ‐ Dynamics CRM サポート 中村 憲一郎

  • Japan Dynamics CRM Team Blog

    Dynamics CRM 2011 SDK Web サービス利用時のベストプラクティス

    • 0 Comments

    みなさん、こんにちは。

    本日は開発者向けの情報として、組織サービス利用時の認証に関する
    情報と、ベストプラクティスを紹介します。

    Microsoft Dynamics CRM 2011 の認証

    それぞれの環境で以下の認証をサポートしています。

    Microsoft Dynamics CRM オンライン
    クレーム認証、およびフェデレーションを利用した Active Directory 認証
    ※ フェデレーションは Office 365 環境のみ

    Microsoft Dynamics CRM 2011 設置型および IFD
    クレーム認証、および Active Directory 認証

    クレーム認証の仕組み

    ユーザーはセキュリティトークンサービス (STS) で認証を行い、STS は
    暗号化された SAML トークンを発行します。トークンにはライフタイムが
    存在し、一定期間で期限が切れるため、更新作業が必要になります。

    Active Directory 認証の仕組み

    ユーザーは Active Directory で認証され、 SDK を利用した API 呼び出し
    では、Windows Communication Service (WCF) のスタックが認証を、
    Web アプリケーションの呼び出しでは Internet Information Services が
    認証をハンドルします。

    Client Proxy クラスを利用した認証

    Microsoft Dynamics CRM Web サービスに対する認証を行う方法の
    1 つとして、 OrganizationServiceProxy と DiscoveryServiceProxy を
    利用する方法があります。これらのクラスは、オンライン、設置型、IFD
    すべてに対して機能します。 Client Proxy クラスは、クレーム認証
    および Active Directory 認証に対応します。

    以下のコードは組織サービスを作成するために利用できます。

    using (OrganizationServiceProxy _serviceProxy = new OrganizationServiceProxy(
    organizationUri, homeRealmUri, userCredentials, deviceCredentials))

    また以下のコードでは探索サービスを作成できます。

    using (DiscoveryServiceProxy _discProxy = new DiscoveryServiceProxy(
    organizationUri, homeRealmUri, userCredentials, deviceCredentials))

    Client Proxy クラスはアプリケーションを終了する間に破棄する必要が
    あります。 using ステートメント内で利用することでスコープから出た際に、
    クラスが破棄されることを保障します。

    上記以外に Client Proxy を生成する方法は、ヘルパークラスを利用する
    方法です。以下のコードは、多くのサンプルで利用されています。

    OrganizationServiceProxy _serviceProxy =
    ServerConnection.GetOrganizationProxy(serverConfig)

    Client Proxy クラスの保持

    上記のとおり、Client Proxy クラスはアプリケーションの終了前には
    破棄する必要がありますが、パフォーマンスを考慮した場合、無駄に
    破棄することなく、極力保持することが望ましいです。

    主な理由は、Web サービスに対するチャネルの確立と認証には、
    比較的大きなコストがかかることにあり、Client Proxy クラスはその
    認証を保持することが出来るからです。この場合、作成した Client
    Proxy クラスは、アプリケーションの終了前に、明示的に Dispose を
    呼び出し破棄する必要があります。

    簡単な検証

    今回、エラー処理等一切考慮しない、非常にシンプルなプログラムを
    2 つ作成しました。1 つはレコードを作成する度に Client Proxy を破棄
    するプログラム A と、 Client Proxy をアプリケーション起動時に生成し
    レコード作成中は保持しておき、最後に破棄するプログラム B です。
    それぞれ取引先企業を 1000 件作成します。

    キャッシュやパフォーマンスのばらつきを考慮して、それぞれ複数回
    実行してみました。

    プログラム A プログラム B
    1 回目 74 秒 19 秒
    2 回目 65 秒 16 秒
    3 回目 59 秒 14 秒
    4 回目 60 秒 18 秒
    5 回目 58 秒 14 秒

    また 5000 件レコードを作成した場合の結果です。時間がかかるため
    一度だけ計測しました。

    プログラム A プログラム B
    1 回目 281  秒 93 秒

    ※ この検証は Microsoft Dynamics CRM 2011 が 1 秒間に何件
    レコードを作成できるかという観点ではなく、2 つのプログラムの
    比較用です。実際のパフォーマンスは作成するレコードの内容、
    プラグイン、ワークフロー、関連、重複チェック等、複数の要素が
    影響しますので、ご注意ください。

    まとめ

    今回は Client Proxy クラスを利用したベストプラクティスを紹介
    しましたが、実際にはより多くの要素を考慮する必要があります。
    現在のカスタムアプリケーションのパフォーマンスに問題を感じる
    場合は、是非こちらの情報も参考にしてみてください。

    完全な情報は SDK をご参照ください。(英語)
    http://msdn.microsoft.com/en-us/library/gg334502

    ‐ Dynamics CRM サポート 中村 憲一郎

  • Japan Dynamics CRM Team Blog

    Dynamics CRM 2011 Update Rollup 9 (R8) ベータ版公開!!

    • 0 Comments

    みなさん、こんにちは。

    本日はとてもエキサイティングな情報をお届けします。

    元記事 : Microsoft Dynamics CRM 2011 UR9 (a.k.a “R8”) Beta is here!

    とうとう待ちに待った Microsoft Dynamics CRM 2011 Update Rollup 9 の
    ベータ版がパブリック公開になりました。このバージョンは R8 としても知られ
    ており、マルチブラウザのサポート等、多くの機能を提供します。

    設置型でのみの提供となり、ベータから製品版への移行のサポートは
    ありませんが、現在開発しているプログラムが動作するかを確認する
    には最適です。

    是非正式リリース前に、お試しください。

    ベータ版に含まれるもの

    - 評価目的用の設置型のビルド
    - 事前に録画されたセッションの動画およびプレゼンテーションファイル
    - 実装ガイド
    - SDK と Readme
    ※ドキュメント類は英語のみとなっております。

    注意事項

    ベータ版は評価目的のみでの利用が前提となり、商用には利用できません。
    また出荷版に移行するパスは用意されませんので、事前にご了承ください。

    ベータ版には、出荷版には含まれえる予定のいくつかの機能が含まれません。

    ベータ版の入手方法

    マイクロソフト Connect サイトよりダウンロードが可能です。

    1. 以下のリンクより、 R8 Beta Connect サイト用のアカウントを作成してください。
    https://connect.microsoft.com/site687/InvitationUse.aspx?ProgramID=7663&InvitationID=crnb-FJTQ-QPB3
    2. 次に、以下のリンクより R8 Beta のサーベイにご回答ください。
    http://connect.microsoft.com/site687/Survey/Survey.aspx?SurveyID=14211
    3. 次に、以下のリンクより R8 Beta のパッケージをダウンロードしてください。
    https://connect.microsoft.com/site687/Downloads
    4. R8 Beta について質問がある場合は、以下のディスカッショングループを
    利用してください。
    http://innovation.connect.microsoft.com/CRM2011R8Beta/Thread/View.aspx?ThreadId=6861

    まとめ

    現在開発中のスクリプトやプログラムがマルチブラウザで期待したように
    動作するかなど、気になることがたくさんあると思います。是非本ベータ版
    を利用して、事前のテストを行ってください。

    ディスカッショングループは英語のみですが、不明な点があればこちらの
    記事のコメント欄もご活用ください。できる範囲で対応させていただきます。

    ‐ Dynamics CRM サポート 中村 憲一郎

  • Japan Dynamics CRM Team Blog

    Dynamics CRM 2011 設置型 グラフの集計レコード数上限を変更する

    • 0 Comments

    みなさん、こんにちは。

    ゴールデンウィークも終わりましたが、みなさんはどのように過ごされたでしょうか。

    さて今回は最近よくサポートにお問い合わせをいただく、グラフ機能のエラーに
    関して情報をお届けします。

    グラフの集計レコード数上限

    通常のグリッドと異なり、グラフではより多くのレコードに対してクエリを実行する
    必要があります。これは、グラフがレコードそのものではなく、集計値を扱うため
    必然の動作です。しかし同時に、パフォーマンスに影響があることも否めません。

    現在の Microsft Dynamics CRM 2011 では、集計レコード数の上限が 50000 と
    なっています。しかし集計したい内奥によってはこの数値は十分ではない場合も
    あります。今回はこの値を変更する方法を紹介します。

    ※尚、この変更は設置型でのみ利用が可能です。

    サンプルプログラム

    現在この値を変更できるツールは提供されていませんが、値の確認と変更を
    行えるメッセージが SDK で公開されています。今回は簡単なコンソール
    アプリケーションを開発して、値の確認と変更を行います。尚、 SDK 5.0.10 を
    利用しています。

    1. Visual Studio 2010 を起動します。

    2. 新しいプロジェクトを作成します。コンソールアプリケーションを使用します。
    image

    3. プロジェクトを作成したら、まずは .NET Framework のバージョンを
    変更します。ソリューションエクスプローラよりプロジェクトを右クリック
    して、プロパティをクリックします。

    4. 対象のフレームワークで、.NET Framework 4.0 を選択します。
    image

    5. 次に以既存のヘルパークラスを追加します。プロジェクトを右クリック
    し、追加 | 既存の項目をクリックします。

    6. sdk\samplecode\cs\helpercode フォルダより、 以下 2 つのクラス
    を追加します。
    image

    7. 次に以下の参照を追加します。
    microsoft.xrm.sdk.deployment.dll
    microsoft.xrm.sdk.dll
    System.Runtime.Serialization
    System.Security
    System.ServiceModel
    System.DirectoryServices.AccountManagement

    8. Program.cs ファイルを開いて、Main メソッドに以下のコードを
    追加します。

    ServerConnection serverConnect = new ServerConnection();
    ServerConnection.Configuration config = serverConnect.GetServerConfiguration();
    var app = new Program();
    app.Run(config);

    クラスの冒頭に以下の using ステートメントを追加します。

    using Microsoft.Crm.Sdk.Samples;
    using Microsoft.Xrm.Sdk.Client;
    using Microsoft.Xrm.Sdk.Deployment;
    using Microsoft.Xrm.Sdk.Query;

    そしてクラス直下に以下のプロパティを追加します。

    private OrganizationServiceProxy _serviceProxy;

    9. Run メソッドを追加します。ここでは一切のエラー処理を
    していませんので、あくまで利用方法の参考程度にしてください。

    public void Run(ServerConnection.Configuration serverConfig)
    {
        using (_serviceProxy = ServerConnection.GetOrganizationProxy(serverConfig))
        {
            // このコードは事前バインドには必須です
            _serviceProxy.EnableProxyTypes();

            // 展開サービスを取得
            DeploymentServiceClient serviceClient = Microsoft.Xrm.Sdk.Deployment.Proxy.ProxyClientHelper.CreateClient(
                new Uri(serverConfig.DiscoveryUri.ToString()
                    .Replace("Services", "Deployment")
                    .Replace("Discovery", "Deployment")));

            // 現在の設定を確認
            RetrieveAdvancedSettingsRequest request = new RetrieveAdvancedSettingsRequest()
            {
                ConfigurationEntityName = "Deployment",
                ColumnSet = new ColumnSet("AggregateQueryRecordLimit")
            };

            ConfigurationEntity ce = ((RetrieveAdvancedSettingsResponse)serviceClient.Execute(request)).Entity;               

            // 結果を表示
            foreach (var setting in ce.Attributes)
            {
                if(setting.Key == "AggregateQueryRecordLimit")
                    Console.WriteLine(setting);
            }

            // 新しい値を入力。※エラーチェックをしていないが、数値を期待
            Console.WriteLine("Enter New Value");
            string newValue = Console.ReadLine();

            // 新しい設定を追加
            ConfigurationEntity entity = new ConfigurationEntity();
            entity.LogicalName = "Deployment";
            entity.Attributes = new AttributeCollection();
            entity.Attributes.Add(new KeyValuePair<string, object>("AggregateQueryRecordLimit", newValue));

            // 新しい設定に更新
            UpdateAdvancedSettingsRequest request2 = new UpdateAdvancedSettingsRequest();
            request2.Entity = entity;
            serviceClient.Execute(request2);
        }
    }

    10. F5 を押下してプログラムを実行します。途中組織を選択しますが
    設置自体は構成データベースに対する変更のため、どの組織を
    選択しても結果は同じです。

    以下では数値を 50000 から 5 に変更しました。

    image

    動作の確認

    変更が有効になっているか確認するために、活動のグラフを表示してみます。
    サンプルデータしか入っていない状況でも、集計レコード数の上限が 5 件の
    ため、以下のようなエラーになります。
    image

    逆に、上記エラーが出ている場合には、設定値をより大きく変更することで
    エラーが解消されますが、その分パフォーマンスに配慮してください。

    まとめ

    今回はグラフの集計レコード数上限変更を、プログラムから行う方法を簡単に
    紹介しました。ヘルパーコードを再利用していることや、エラーをハンドルして
    いない点からも実用には耐えませんが、イメージだけでも伝わればと思います。

    尚、この変更は PowerShell で行う事も可能です。簡単かつ安全に変更したい
    場合には、 PowerShell の利用もご検討ください。

    ‐ Dynamics CRM サポート 中村 憲一郎

  • Japan Dynamics CRM Team Blog

    Dynamics CRM 2011 Update Rollup 8 がリリースされました!

    • 0 Comments

    みなさん、こんにちは。
     
    2012年5月3日(US時間) に Dynamics CRM 2011 Update Rollup 8 がダウンロードセンターにリリースされました。
    次のリンクから Update Rollup 8 に関する情報を確認することができます。
     
    マイクロソフト ダウンロード センター: http://www.microsoft.com/downloads/ja-jp/details.aspx?familyid=f72b8001-2bd3-4a21-8845-d0f284dc21b6
    Microsoft サポート技術情報 : http://support.microsoft.com/kb/2600644/ja
    マイクロソフト アップデート (現時点で未公開): http://catalog.update.microsoft.com/v7/site/Search.aspx?q=2600644
     
    各種スケジュール(US 時間)
    • Dynamics CRM オンライン: オンライン環境インフラ移行作業中です。インフラ移行に関するシステムメンテナンスの予定は、お客様がご利用のオンライン サイト毎に都度ご連絡させていただく予定です。
    最新 Update Rollup の適用は、インフラが新環境に移行された後に実施される見込みです。
    • マイクロソフト ダウンロードセンター: 2012 年 5 月 3 日
    • マイクロソフト アップデート: 2012 年 5 月 22 日
     
    Update Rollup 8 概要
    • Update Rollup 6 が前提条件となります。
    CRM Server に Update Rollup 6(KB2600640)が適用されていない状態で、Update Rollup 8 を適用しようとすると「KB2600640がこのコンピュータ上にインストールされていません」というメッセージが表示されます。
    • Update Rollup 8 はアンインストールが可能です。
    • クライアント用インストールパッケージをダウンロードセンターより取得した場合には、インストールに管理者権限が必要です。
      マイクロソフト アップデート(Windows Update) を利用した場合には、管理者権限は要求されません。
    • 詳細はサポート技術情報 2600644 をご参照ください。
     
    今後の Update Rollup リリース予定について
    Update Rollup 9 については、現在 2012 年 5 月後半頃リリースされる予定です。

    - Dynamics CRM サポート 斎藤 さち江

  • Japan Dynamics CRM Team Blog

    Dynamics CRM 2011 メンテナンスジョブの再スケジュール

    • 0 Comments

    みなさん、こんにちは。

    ゴールデンウィークはいかがお過ごしでしょうか。世間は休みでもシステム
    管理者の方は、普段できない管理タスクがあるので忙しいのではないでしょうか。

    そんな管理者の皆様向けに、本日は Microsoft Dynamics CRM 2011 のメンテナンス
    ジョブのスケジューリングに関して情報をお届けします。

    情報元 : Avoid Performance Issues by Rescheduling CRM 2011 Maintenance Jobs

    既定で Microsoft Dynamics CRM 2011 は、毎日デイリーで実行されるメンテナンス
    ジョブを 6 つ作成します。これらのジョブは Microsoft Dynamics CRM Asynchronous
    Processing Service (maintenance) サービスにより実行されます。しかしスケジュール
    の時刻は組織が作成された時刻になるため、日中に組織を作成した場合、これらの
    ジョブも日中に実行されることになります。そのためユーザーがシステムを利用中に
    パフォーマンスが低下していると感じるかもしれません。

    よってメンテナンスジョブのスケジュールを、ユーザーの利用が少ない時間帯に変更
    することをお勧めします。

    メンテナンスジョブのスケジュール変更方法

    メンテナンスジョブは、CRM 2011 Maintenance Job Editor Tool を利用して変更
    が行えます。以下に手順を紹介します。

    1. まず CRM 2011 Maintenance Job Editor Tool をダウンロードします。
    http://crmjobeditor.codeplex.com/

    2. 展開したツールを C:\Program Files\Microsoft Dynamics CRM\tools に
    コピーします。

    3. CRM2011JobEditor.exe をダブルクリックして実行します。

    4. スケジュールを変更したい組織を選択します。

    5. 既定ではそれぞれのジョブが同時に実行されないように、微妙に時刻をずらして
    います。手動でスケジュールを変更する際も全てのジョブの実行時間が同時にならない
    ように、分の部分はそのままにしておくことをお勧めします。StartingAt で時刻を変更
    したら、Update をクリックします。

    image

    Reindex All ジョブの無効化

    Reindex All ジョブは必要に応じてインデックスを最適化すると同時にデータベースを
    圧縮します。しかしデータベースの圧縮を避けたいお客様は多く、またインデックスの
    メンテナンスも、既にジョブを作成している場合があります。このような場合には、この
    Reindex All ジョブを無効にしたいと考えるでしょう。

    メンテナンスジョブを無効にする機能はありませんが、Next Run Time を 2099年等に
    設定することで、実質的に無効にすることが可能です。

    image

    他にもこのジョブの実行に時間を要する場合には、以下のエラーがイベントログに
    記録される場合があります。この場にも Reindex All ジョブの実行時間を変更して
    SQL Server のメンテナンスプランを利用したい場合があります。

    Query execution time of x seconds exceeded the threshold of 10 seconds. Thread: 13; Database: <database_name); Query: exec p_ShrinkMirroredDatabase <database name>

    Query execution time of x seconds exceeded the threshold of 10 seconds. Thread: 20; Database: <database_name); Query: exec p_ReindexAll <database name>

    Host <CRMServerName>.MSCRMAsyncService$maintenance.8b60c4b9-0879-4a1d-96c0-eada4e3cbc91: Job Scheduler has executed tasktype=30, organizationid=<OrganizationID>, starttime=5/9/2011 3:25:23 PM, endtime=3/9/2012 3:55:23 PM, resultcode=1, errormessage=System.Data.SqlClient.SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

    まとめ

    メンテナンスジョブは Microsoft Dynamics CRM 2011 システムにおいてとても
    重要な役割を果たしますが、一方で実行時間などで管理者の方がある程度
    コントロールすることも可能です。是非一度お手元の環境でメンテナンスジョブの
    実行時間を確認してみてください。

    ‐ Dynamics CRM サポート 中村 憲一郎

Page 1 of 21 (206 items) 12345»