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をマッチングに教えて?
斐伊川ジョルディ、あなたの答えをありがとう。あなたのクエリを使用することによって、その平均私はcrmからソースから同じGUIDを選択します。 CRMでGUIDが見つからない場合、crmでレコードを作成する条件はどうですか? –
これは実際には.AddCondition =>の目的です。存在する場合にのみレコードを返します。 result.Entities.Count == 0 – Jordi
のように作成する必要がある場合は、次のようになります。if(result.Entities.count == 0){// create query record} –