刪除crm快取
專案公升級到dynamics 365以後,過了些時間,有的賬號反饋使用很慢,甚至同乙個地方同一臺電腦用不同的賬號特別是進行資料修改的時候會發現有明顯的速度差別,why?
有問題就有解決問題的方法,大神們日夜分析,發現卡頓的主要原因是執行部分sql後會卡頓,等待然後再執行,這樣導致的總體時間很長,整個過程甚至能超過20秒。再次詳細分析,發現每次這個卡頓都會又一次查詢 businessprocessflowinstancebase 這個表,奇怪啊,我們並沒有使用業務流程。後來微軟技術支援中心向更加廣泛的範圍求助,終於找到答案,原來是dynamics 365開始,crm中的一條記錄可能有多個活動業務流程,每個人根據其許可權等顯示的業務流程又不盡相同。所以會查詢這個表,當然在查詢這個表之前會先查詢這條記錄相關的mru(most recently used list,最近訪問列表),但是如果這個mru非常大,就會非常耗時導致等待。
那麼這麼mru怎麼看?當然你可以通過sql直接來看,這個mur跟使用者和實體的typecode有關,下面是檢視某個使用者的所有mru:
1 select ueus.recentlyviewedxml,
2 len(ueus.recentlyviewedxml) as recentlyviewedxmllength,
3 sysuser.fullname,
4 entity.logicalname
5 from userentityuisettings ueus
6 left join systemuserbase sysuser on ueus.ownerid = sysuser.systemuserid
7 left join entity on ueus.objecttypecode = entity.objecttypecode
我看到我這個賬號經常使用ly_test這個實體,發現其recentlyviewedxml大小也有 8832 位元組,如果你用的狠的話,這個數字可能會超過1mb。這個裡面的內容我簡化下如下:
1 2
3 0
4
5 10007
6 羅勇測試
7 批量操作建立的羅勇測試記錄
8
9
10 false
11
12
13 11/05/2016 03:20:58
14
15 怎麼解決?當然你可以通過組織服務來清除這個欄位的值,也可以直接用sql來處理,比如將長度大於1000的清除:
1 update userentityuisettings
2 set recentlyviewedxml=null
3 where len(recentlyviewedxml)>=1000
用sql來清除這個mru有個弊端就是需要重啟iis,因為它在伺服器端有快取。
當然也可以寫程式來清除,目前沒有看到介面上提供手動清除mru的地方:
1 console.writeline("本程式用於清理你輸入賬號的最近訪問記錄。");
2 string username = string.empty;
3 string password = string.empty;
4 console.writeline("請輸入登入的使用者名稱,輸入完畢後按回車鍵確認:");
5 username = console.readline().tostring().trim();
6 console.writeline("請輸入登入的密碼,輸入完畢後按回車鍵確認:");
7 while (true)
8
17 else
18
21 }
22 else
23
26 }
27 clientcredentials cc = new clientcredentials();
28 cc.username.username = username;
29 cc.username.password = password;
30 organizationserviceproxy orgsvc = new organizationserviceproxy(new uri(""),
31 null, cc, null);
32 whoamirequest whoreq = new whoamirequest();
33 whoamiresponse whorep = orgsvc.execute(whoreq) as whoamiresponse;
34 var userentity = orgsvc.retrieve("systemuser", whorep.userid, new columnset("fullname"));
35 console.writeline(string.format("登入成功,歡迎,繼續操作請輸入y!", userentity.getattributevalue("fullname")));
36 var input = console.readline().tostring().toupper();
37 if (input == "y")
38
51 }
52 }
53 else
54
57 console.writeline("程式執行完成!");
58 console.readkey();
據我對這個mru的觀察,mru的快取在iis上有快取,使用者登入會從伺服器上獲取快取,本地並不是通過瀏覽器來快取,會在使用者退出登入時候將訪問記錄寫入到伺服器端。所以僅僅依靠程式或者sql來清除mru還不管用,需要配合iis重啟。
系統在這個設計上可能欠缺考慮,比如針對某個實體的mru如果超過一定的數量採用先進先出的方法自動清除掉前面的訪問記錄,畢竟儲存那麼多也沒有很大的用處,除非你要做訪問記錄的審核。也可以考慮再某個地方讓使用者自行清理。希望微軟dynamics crm產品組早日就此問題提出根本解決方案。
Dynamics 365 多選字段
update tablebase set field 1,對應選項值多個逗號隔開,1 獲取多選框所有選項 public dictionarygetmoreoptionset string entityname,string fieldname,iorganizationservice service...
Dynamics 365 技術入門建議
1.主要是因為目前市場上6.0的使用者仍然很多,作為技術人員遇到老使用者需要支援,如果只會10.0 的開發是不夠的,如果學會了6.0 再學10.0就容易很多。2.6.0 的安裝相對簡單,所佔空間也比較小,對電腦要求也要低於10.0。3.除錯簡單,方便初學者學習。4.顧問資源多,遇到問題能夠請教的人也...
試用Dynamics 365 模型驅動應用
最近參與了微軟官方組織的microsoft dynamics 365培訓講解,詳細介紹了d365的特性,如今微軟大力推廣online版本的浪潮下,緊跟時勢的同時,學習新的技術,了解新的內容。關於什麼是microsoft dynamics 365,可以參考這篇博文 什麼是 dynamics 365 m...