簡體   English   中英

MS Dynamics365 - 生成自定義序列號,確保唯一性

[英]MS Dynamics365 - generate custom serial number, ensure uniqueness

我正在開發基於Dynamics365 CRM的解決方案,對於我們定義的自定義實體,我們需要創建自定義序列號。

由於各種商業原因,GUID和順序編號方案都不會做 - 商業堅持的格式

99-9999-9999

其中每組數字基本上是一組隨機數字。

在插件中創建這些很容易 - 但我如何確保唯一性 我是C#/ SQL Server開發人員,在SQL Server / T-SQL中,我只是在此列的“實體”表上創建一個唯一索引。 檢查是否存在新創建的數字很容易 - 只需要做一個

IF EXISTS (SELECT * FROM dbo.MyEntity WHERE SerialNum = @SerialNumGenerated)

檢查,並且因為該單列被索引並且NOT NULL ,所以它也會非常快。

但是我如何在Dynamics365中做同樣的事情(至少和“相同”一樣)? 我如何以編程方式檢查(在我的C#插件中)是否還沒有使用新創建的“序列號” - 這樣做是否足夠快,不會過多地減慢保存過程? 我可以以某種方式“索引”我的自定義實體上的屬性並執行類似於T-SQL中的IF EXISTS()檢查嗎?

感謝任何提示或指示!

假設您無法設計天文學上不太可能生成重復項的生成公式(例如GUID)。 您需要遵循這個一般邏輯。

  1. 運行公式以創建唯一ID。
  2. 通過RetrieveMultiple搜索CRM以檢查具有該編號的任何記錄。
  3. 如果號碼已存在; 回到1。
  4. 其他; 使用新ID更新記錄。

然后,您必須決定執行代碼的位置。 我想到了兩個選擇。

  1. 在“框”中,例如插件或JavaScript。 在這種情況下,您可能遇到的問題是,可能會同時執行多個公式的執行,而不會相互了解。 根據您的公式生成重復項的可能性以及創建記錄的速率,這可能是可以接受的。

  2. 走出“盒子”,例如一個運行時間表的控制台應用程序,找到沒有數字的記錄。 然后它逐個編號每個記錄。 接近單線程具有確保唯一性的好處,但從用戶角度來看會變慢。

如果是我和我必須實施這個要求,我會選擇2。

您希望在預操作插件中執行此編號。 這是完全保證唯一性的唯一方法,它非常高效,並且在創建記錄時該數字將立即存在。

1)生成字符
您可以使用任何您想要的方法,作為數據庫開發人員,我通常只是默認使用我熟悉的,Guid.NewGuid()的子字符串.ToString();

2)檢查唯一性

    QueryExpression query = new QueryExpression("[prefix_yourentityname]")
    query.Criteria.AddCondition("prefix_yourfieldname", ConditionOperator.Equal, [IDNumber]);
    query.TopCount = 1;
    bool isUnique = Service.RetrieveMultiple(query).Entities.Count = 0;

3)在目標上設置ID號,以便與事務一起保存

性能:
此檢查顯然會導致對數據庫的小讀取操作,但您沒有更好的選擇。 如果您使用的是內部部署CRM,則可以針對此表添加索引,包括ID字段。 Microsoft支持為CRM數據庫編制索引。

如果您在線使用CRM,您唯一可以做的就是將ID字段添加到此實體的快速查找視圖“查看列”和“搜索列”中。 CRM應用程序根據“快速查找”視圖中的配置在每個表上生成索引,因此將ID列添加到此視圖將導致該字段添加到索引中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM