none
エンティティのビューの動的な抽出条件 RRS feed

  • 質問

  • お世話になります。
    エンティティのビューの抽出条件に下記のような条件を加えたいのですが、良い方法がわかりません。
    具体的には、
    変更日 >=「今月の25日」
    という条件を入れたいです。「変更日」はフィールド名になります。"25"は固定です。
    どのような方法で実現できるのでしょうか。

    fetchxml 内に、『現在日付を取得して日付を25日にしてvalue=に設定するなんてことはできるのでしょうか。』

    下記は固定で条件を記述しているfetchxmlです。

    ---------<抜粋>---------------------->

                <fetchxml>
                  <fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
                    <entity name="applicationinformation">
                      <attribute name="storename" />
                      <attribute name="id" />
                      <attribute name="commencementdate" />
                      <attribute name="statuscode" />
                      <attribute name="address4_store" />
                      <attribute name="address3_store" />
                      <attribute name="address2_store" />
                      <attribute name="address1_store" />
                      <order attribute="id" descending="false" />
                      <filter type="or">
                          <condition attribute="changesacceptedon1" operator="on-or-after" value="2018-03-25" />
                          <condition attribute="paymentdeadline" operator="this-month" />
                      </filter>
                      <attribute name="applicationinformationid" />
                    </entity>
                  </fetch>
                </fetchxml>
    ---------<抜粋>----------------------

    2018年5月8日 3:59

すべての返信

  • こんにちは。

    こちらでもいろいろと試してみたのですが、標準機能だけではなかなか実現が難しそうです。

    会計年度を毎月25日に設定してビューの条件でその会計年度を使用するという方法も試してみましたが、使えそうな条件が見当たらず…。

    またfetchxmlについても、構文の中に動的に値を取得するような処理を組み込むことは難しいと思います。

    唯一思いついたのは、DBサーバーのタイムスケジューラに毎月25日の0時に動くトリガを設定し、そこにビューの条件をアップデートするSQLを登録するという方法です。

    もしfetchxmlでも動的に値を取得できる方法があったり、他のやり方をご存知の方がいらっしゃいましたら、ぜひご教示いただきたいです。

    2018年5月9日 5:23
  • こんちには。

    標準機能では実現できないかと思います。

    少し作りこみもでもOKであれば、以下の方法がいかがでしょうか。

    -------------------------------------------------------------------------

    ビューを定義する場合一旦業務上利用しない日付で設定し、対象エンティティのRetrieveMultipleメッセージに以下のプラグインを登録し、呼び出される場合条件を補正する。

    public class RetrieveMultiplePlugin: IPlugin
    {
            public void Execute(IServiceProvider serviceProvider)
            {
                IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));

                var queryExpression = context.InputParameters["Query"] as QueryExpression;
                if (null == queryExpression) return;

                var lstAllCondition = new List<ConditionExpression>();
                lstAllCondition.AddRange(queryExpression.Criteria.Conditions);
                queryExpression.Criteria.Filters.ToList().ForEach(r => lstAllCondition.AddRange(r.Conditions));

                foreach (var condition in lstAllCondition)
                {
                    if (condition.AttributeName == "changesacceptedon1"
                        && condition.Operator == ConditionOperator.OnOrAfter 
                        && condition.Values.Count > 0)
                    {
                        if (condition.Values[0].ToString().StartsWith("1970-01"))//ビューを定義する場合一旦業務上利用しない日付1970/01/25で設定する
                        {
                            condition.Values[0] = condition.Values[0].ToString().Replace("1970-01", DateTime.Now.ToString("yyyy-MM"));
                        }
                    }
                }
            }
    }

    RetrieveMultipleにプラグインを登録する場合、画面だけではなく、SDKからの呼び出しもトリガーされるため、必要に応じてチェックを入れてください。

    少しイレギュラーのように見えますが、ご参考までに。

    2018年5月9日 13:29
  • westcoastline 様、

    返信ありがとうございます。

    簡単にできそうなことが意外とできなかったり、解決方法を探るのに四苦八苦しております。

    スケジューラを使うやり方も一つの方法ですね。

    2018年5月10日 1:55
  • Skyfuture 様、

    ご回答ありがとうございます。

    極力プログラミング無しで実現したかったのですが、ちょっと無理そうですね。

    ご教示いただいたプラグインでの方法を参考にさせていただきます。

    2018年5月10日 2:01
  • こんにちは。

    ビューを運用する用途によっては適用できるかもしれないので1つの案として記載しておきます。

    別に日付フィールド(以下「日付A」)を用意し、編集時に「変更日」 の 24日前の値で更新するワークフロー(プロセス)を準備しておきます。
    あとは、ビュー側で"日付Aが今月"という条件を入れれば、「変更日」が当月の25日以降か否か判定できないでしょうか。

    ---例 : 5月にビューを参照する----------------------------------
      (1)変更日 05月24日
            = 日付A 04月30日    ⇒ 今月に該当しない ビュー表示対象外

      (2)変更日 05月25日
            = 日付A 05月01日  ⇒ 今月に該当 ビュー表示対象
    ---------------------------------------------------------------
    ※但し上記方法には難があり、標準機能にはビューの条件が今月、来月までしか準備されていないため、
      「変更日」に一定より先の日付が入力されている場合は逆に表示できません。
      5月にビューを参照する場合、表示されるデータは「日付A」の更新仕様により 「変更日」が5月25日~7月24日の期間で登録されているデータが限界となります。参考までに

    2018年5月15日 8:50