2016-08-19 14 views
0

30分ごとにスケジューラを作成する必要があります。このスケジューラには、今日作成されたレコード(GUIDを含む)を取得し、Webサービスを使用してDynamics CRMに挿入するプログラムが含まれています。 SQL Serverデータベースからレコードを取得するには、次のクエリを使用します。QueryExpressionのGUIDを使用してデータベースソースからGUIDを照合する方法

SELECT * FROM new_crmtable WHERE DATEDIFF(day, CreatedOn, GetDate()) = 0 

このshcedulerは30分ごとに実行されるため、このプログラムが実行されるたびに、新しいレコードと古いレコードが今日作成されたかどうかが判断されます。 例として、Aという名前のレコードが今日12.25 PMに作成されました。このプログラムが初めて実行されたのは12.30 PMです。それから12.45 PM。 Bと呼ばれる新しいレコードが作成されます。プログラムが13:00 PMに再び実行されたとき。このプログラムは、レコードAとBの両方を取得します。Dynamics CRMでレコードを作成するときに、エラーメッセージが表示されます。レコードAはすでに作成されているためです。エラーは、重複したGUIDを持つレコードを作成できないことを意味します(SQL ServerデータベースからGUIDを取得し、GUIDを使用してDynamics CRMに挿入することを忘れないでください)。すでにCRM上に作成されているかどうか。 Dynamics CRMからGUIDを取得するには、QueryExpressionを使用します。これは私のコードです:

try 
      { 
       if (dt.Rows.Count > 0) 
       { 
        for (int i = 0; i < dt.Rows.Count; i++) 
        { 
         try 
         { 
          Entity rs = new Entity("new_troubleticket"); 


          OptionSetValue option = new OptionSetValue(100000001); 
          rs.Attributes.Add("new_systemsource", option); 

          Guid ticketid = new Guid(dt.Rows[i][0].ToString()); 
          rs.Id = ticketid; 


          //FIRSTNAME 
          if (!string.IsNullOrEmpty(dt.Rows[i][1].ToString())) 
          { 
           rs["new_subject"] = dt.Rows[i][1].ToString(); 


      } 
           else 
           { 
            rs["new_subject"] = null; 
           } 

Queryexpression query = new QueryExpression { Entityname = "new_customentity", 
Columnset = new Columnset("new_customentityid")}; 
query.Criteria.AddCondition("CreatedOn", ConditionalOperator.Equal, Datetime.Now); 

Entity Collection result = service.RetrieveMultiple(query) 

カントあなたはどのようにのQueryExpressionからGUIDで、SQL ServerデータベースからGUIDをマッチングに教えて?

答えて

0

ただ、idでフィルタリングするための条件を追加します。

var g = Guid.NewGuid() //Replace this with your actual Id from the query 
Queryexpression query = new QueryExpression { Entityname = "new_customentity", 
Columnset = new Columnset("new_customentityid")}; 
query.Criteria.AddCondition("new_customentityid", ConditionalOperator.Equal, g); 

Entity Collection result = service.RetrieveMultiple(query) 
+0

斐伊川ジョルディ、あなたの答えをありがとう。あなたのクエリを使用することによって、その平均私はcrmからソースから同じGUIDを選択します。 CRMでGUIDが見つからない場合、crmでレコードを作成する条件はどうですか? –

+0

これは実際には.AddCondition =>の目的です。存在する場合にのみレコードを返します。 result.Entities.Count == 0 – Jordi

+0

のように作成する必要がある場合は、次のようになります。if(result.Entities.count == 0){// create query record} –

関連する問題