1. 程式人生 > 其它 >Dynamics CRM 365 JS 常用語法聚集

Dynamics CRM 365 JS 常用語法聚集

1.Xrm.Page.context
使用者ID:getUserId()
使用者角色:getUserRoles()
使用者語言:getUserLcid()
組織名稱:getOrgUniqueName()
組織語言:getOrgLcid()
路徑引數:getQueryStringParameters()
伺服器路徑:getServerUrl()/getClientUrl()
前追加組織名稱:prependOrgName("/WebResource/**")效果:crmtest/WebResource/**
當前主題:getCurrentTheme()
OutLook:isOutlookClient()/isOutlookOnline()


2.Xrm.Page.data.entity
所有頁面元素:attributes【forEach(),get(),getLength()】
單個元素:attributes.get(
"")【同Xrm.Page.getAttribute()】 實體名稱:getEntityName() 實體ID:getId() 是否修改:getIsDirty() 儲存事件:save() 新增儲存時事件:addOnSave() 移出儲存時事件:removeOnSave() 3.Xrm.Page.getAttribute("") 取值:getValue() 賦值:setValue() 是否改動:getIsDirty() 表單載入時的值:getInitialValue()[Boolean, optionset] 提交型別:getSubmitMode(),setSubmitMode()//always,never,ditry
必填等級:getRequiredLevel(),setRequiredLevel()//required、none 使用者操作等級:getUserPrivilege()//canCreate()、canRead()、canUpdate() 事件:addOnChange(),removeOnChange(),fireOnChange()[強制執行] 其他:getAttributeType(),getFormat(),getMax(),getMaxLength(),getMin(),getName(),getParent(),getPrecision() optionset:getOption(),getOptions(),getSelectedOption(),getText()
4.Xrm.Page.getControl("") 屬性:getAttribute()【同Xrm.Page.getAttribute()】 禁用/啟用:setDisabled(true),setDisabled(false),getDisabled() 顯示/隱藏:setVisible(true),setVisible(false),getVisible() 描述:setLabel(),getLabel() 聚焦選中:setFocus 重新整理:refresh()//僅限SubGrid 其他:addCustomView(),addOption(),removeOption(value),clearOptions(),getControlType(),getData(),setData(),getDefaultView(),setDefaultView(),getName(),getParent(),getSrc(),setSrc(),getInitialUrl(),getObject() 5.Xrm.Page.ui 頁面所有控制元件:controls【forEach(),get(),getLength()】 單個控制元件:controls.get("")【同Xrm.Page.getControl()】 頁面Tab:tabs【forEach(),get(),getLength()】 單個Tab:tabs.get()【sections,getDisplayState(),getLabel(),getName(),getParent(),getVisible(),setDisplayState(),setFocus(),setLabel(),setVisible()】 Tab-Sections:tabs.get(0).sections【forEach(),get(),getLength()】 單個Section:tabs.get(0).sections.get(0)【getLabel(),getName(),getParent(),getVisible(),setLabel(),setVisible(),controls】 頁面導航:navigation.items【forEach(),get(),getLength()】 單個導航:navigation.items.get()【getId(),getLabel(),getVisible(),setFocus(),setLabel(),setVisible()】 窗體:formSelector.items【forEach(),get(),getLenght()】 單個窗體:formSelector.items.get()【getId(),getLabel(),navigate()-窗體跳躍】 6.窗體狀態 var FORM_TYPE_CREATE = 1; var FORM_TYPE_UPDATE = 2; var FORM_TYPE_READ_ONLY = 3; var FORM_TYPE_DISABLED = 4; var FORM_TYPE_QUICK_CREATE = 5; var FORM_TYPE_BULK_EDIT = 6; var formType = Xrm.Page.ui.getFormType(); 重新整理當前頁面: window.location.href = window.location.href; window.location.reload(); 禁用頁面所有控制元件: Xrm.Page.ui.controls.forEach(function (control, index) {undefined control.setDisabled(true); }); 防止儲存事件(需要執行上下文): function My_PreventSaveFunction(eContext) {undefined eContext.getEventArgs().preventDefault(); } 給Lookup取值賦值: id:obj.getValue()[0].id; name:obj.getValue()[0].name; var objList = new Array(); var obj = new Object(); obj.id = accountObj[0].TerritoryId.Id; obj.name = accountObj[0].TerritoryId.Name; obj.typename = accountObj[0].TerritoryId.LogicalName; objList[0] = obj; Xrm.Page.getAttribute("yto_territory").setValue(accountObj[0].TerritoryId.Id == null ? null : objList); Xrm.Page.getAttribute("yto_territory").setSubmitMode("always"); Xrm.Page.data.entity.save(); 給OptionSet按條件顯示列: Xrm.Page.getControl("new_counter_type").clearOptions(); var options = Xrm.Page.getAttribute("new_counter_type").getOptions(); for (var i = 0; i < options.length; i++) {undefined if (options[i].value != 190 && options[i].value != 200 && options[i].value!="null" ) {undefined Xrm.Page.getControl("new_counter_type").addOption(options[i], i+1); } } Xrm.Page.getControl("new_counter_type").addOption(Xrm.Page.getAttribute("new_counter_type").getOption(190),1); JS,給日期型別控制元件賦值: var fullYear = Xrm.Page.getAttribute("yto_confirmdate").getValue().getFullYear(); var month = Xrm.Page.getAttribute("yto_confirmdate").getValue().getMonth() + 1; var date = Xrm.Page.getAttribute("yto_confirmdate").getValue().getDate(); Xrm.Page.getAttribute("yto_confirmdate").setValue(new Date(fullYear, month, date))//廠方確認交貨日期+1月 Xrm.Page.data.entity.save(); 7.給Lookup新增過濾: var fetch = '<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true"><entity name="new_expensesdetail"><attribute name="new_expensesdetailid"/><attribute name="new_name"/><attribute name="createdon"/><order attribute="new_name" descending="false"/><filter type="and"><condition attribute="statecode" operator="eq" value="0"/></filter><link-entity name="new_buget" from="new_expenseitem" to="new_expensesdetailid" alias="aa"><filter type="and"><condition attribute="new_bugetunit" operator="eq" uitype="businessunit" value="' + Xrm.Page.getAttribute("new_businessunit").getValue()[0].id + '"/><condition attribute="new_bedgetsheet" operator="eq" uitype="new_budgetcycle" value="' + Xrm.Page.getAttribute("new_feeperiod").getValue()[0].id + '"/></filter></link-entity></entity></fetch>'; var view = '<grid name="resultset" object="10069" jump="new_name" select="1" icon="1" preview="1"><row name="result" id="new_expensesdetailid"><cell name="new_name" width="300" /><cell name="createdon" width="125" /></row></grid>'; Xrm.Page.getControl("new_detailitem").addCustomView("{B9C6A1F4-0A03-424D-B843-E4D9281F8DEB}", "new_expensesdetail", "根據部門和費用期間篩選", fetch, view, true); modifiedLookupParameter("new_detailitem", "DisableViewPicker", "1"); A.取fetchxml和viewxml: 高階查詢-編輯列-F12-指令碼dlg_editview.aspx frameRender.FetchXml.value frameRender.LayoutXml.value B.addCustomView("可用系統檢視GUID,以便覆蓋","","","","",是否預設檢視) 8.用Ribbon Editor給自定義按鈕新增JS事件:Library($webresource:web資源的名稱) 9.JS引用了REST等通用JS的方法,需在該實體的窗體庫中引用通用JS。 10.Plugin除錯步驟:Plugin Registration Tool => Profile => 儲存ErrorDetail.txt => Stop Profile => Debug,載入ErrorDetail.txt和DLL => VS附加PlugRegistration.exe到程序 =>Debug Start 11.Plugin拋異常到頁面:throw new InvalidPluginExecutionException(""); 12.Plugin取值: int statuscode = (preImageEntity.Attributes["statuscode"] as OptionSetValue).Value; 13.Plugin刪除了類檔案,還需要去RegisterFile.crmregister刪除對應的引用,否則會出現部署失敗 14.高階查詢-編輯列-F12未出現開發人員工具:IE-Internet選項-安全-Internet-自定義級別-允許網站開啟沒有地址或狀態列的視窗-禁用 15.是否出現“新增已存在**明細”按鈕方法:明細表中主表字段的必填等級=業務必須,則不出現新增已存在按鈕,否則出現。 16.刪除一個表資料,在Pre-Delete中,已經把與之關聯的資料中包含它的欄位都NULL了。查詢與之關聯的資料,不能再通過該欄位。 17.貨幣型別後臺賦值:new Money(decimal.Parse()) 18.選單關聯檢視:<SubArea Id="yto_yto_applytogoods_dqr" Title="待確認的要貨申請" Icon="/_imgs/ico_16_customEntity.gif" Url="_root/homepage.aspx?etn=yto_applytogoods&viewid=%7b98B36DFB-4BA3-E211-8F62-00155D04D707%7d"></SubArea> 【函式】19.動態載入JS(CRM函式):loadScriptAdv("指令碼URL","任意ID",false); loadScriptAdv(Xrm.Page.context.prependOrgName("/WebResources/fw_rest"), "55EE635C-91BD-443F-A3E6-56ACEG4E574G", false); 【函式】20.獲取Homepage選擇的項(CRM函式):getSelected("crmGrid") 【函式】開啟模式視窗openStdDlg() windos.open("http://172.16.4.215/yto/main.aspx?etc=1&id=%7ba7402069-e4db-e211-9396-90b11c1d4ddf%7d&pagetype=entityrecord","_blank"); 21.外掛非同步:非同步plugin需要非同步服務執行,這個啟動時間會比較慢。POST後才會去啟動這個操作。另外,非同步作業有個特點,就是可還原操作。出錯了,改完資料或修正plugin,可以將操作繼續執行。 22.VS新建解決方案,選不了組織,因為本機不能識別CRM電腦名,要新增HOSTS對映:172.16.4.217 crmtest 23.JS給日期控制元件賦值:Xrm.Page.getAttribute("yto_date").setValue(new Date()),但是JS取客戶機時間,建議在JS賦值的基礎上再用PreValidate外掛 24.JS重新整理CRM檢視:Mscrm.Utilities.refreshCurrentGrid(entityTypeCode); 25.注意。報表做時間型別的比對時,在第一行把時間型別引數dbo.fn_LocalTimeToUTC()轉成UTC時間。dbo.fn_UTCToLocalTime()轉成本地時間 set @startDate=isnull(@startDate,'1900-01-01') set @startDate=dbo.fn_LocalTimeToUTC(@startDate) set @endDate=dbo.fn_LocalTimeToUTC(DATEADD(DD,1,@endDate)) 26.多條記錄拼接為一個字串: SELECT @re=@re+','+yto_name FROM yto_order select @new_businessunit= stuff((select ';'+convert(varchar(50),businessunitid) from businessunit for xml path('')),1,1,'') 27.匯入解決方案之後,需要去檢查關於擴充套件功能的外掛有沒有出現重複項,刪除較早的,不然會出現審批之後,按鈕不會改變的問題。 28.不要使用任何系統自帶的欄位,如狀態描述、建立日期來當作單據的欄位使用! 29.域使用者需要在CRM部署管理器中加入CRM部署管理員,才能進行開發和部署操作。 30.貨幣型別的欄位賦值:=new Money(decimail) !!!,切記。 31.VS連結專案發生安全性的問題,因為CRM伺服器和本機的時間相隔超過5分鐘。 32.Pre_Create中,不能用entity.Id來做引用,因為目前該資料尚不存在。 00000000-0000-0000-0000-000000000000 34.VS解決方案不顯示CRM檢視:修改“解決方案.sln”檔案,新增節點 GlobalSection(CRMSolutionProperties) = preSolution SolutionIsBoundToCRM = True EndGlobalSection 35.轉REST獲取的日期型別(從“/Date***”到“Fri Nov 1 00:00:00 UTC+0800 2013”) function dateReviver(value) {undefined var a; if (typeof value === 'string') {undefined a = /Date([−+]?\d+)([−+]?\d+)/.exec(value); if (a) {undefined return new Date(parseInt(value.replace("/Date(", "").replace(")/", ""), 10)); } } return value; }; 36.REST查詢需要的日期型別轉換:var myDate = (new Date()).format("yyyy-MM-ddThh:mm:ss"); 37.值為NULL的列查詢後不包含在實體中:!Contains("") 38.實體建立的時候可以給ownerid賦值,但更新的時候給ownerid賦值不會更新。 39.CRM組織服務更新日期欄位時,DateTime.Now和DateTime.UtcNow插入到資料庫的值是一樣的。 40. 【誤區】 日期賦值: entity["date1"]=entity["date2"]是對的(顯示:2013.1.2;date1:2013.1.1 16:00:00 date2:2013.1.1 16:00:00); entity["date1"]=DateTime.Parse(entity["date2"].ToString())是錯的(顯示:2013.1.2 date1:2013.1.1 8:00:00已錯 date2:2013.1.1 16:00:00) entity["date1"] = DateTime.Now、entity["date1"] = DateTime.UtcNow,結果是一樣的!(2013.1.1 16:00:00) 取值: (DB,Retrieve,Image,Entity上取的都是-8H的,只有頁面顯示已經+8H)所以JS中和CS中的比較一定要注意。 41.通過資料庫還原新組織後,由於頂級組織改變,所有業務部門的guid會改變。 42.CRM資料庫新建檢視後,給新使用者許可權,需‘授予’查詢的實體和關聯實體的檢視的‘選擇’許可權就行了。 43.刪除或者更新資料的時候,用最高許可權的使用者初始化的組織服務。 44.context.SharedVariables外掛間的引數傳遞,注意context不同的時候,獲取不到,所以最好用頂級context。 45.關於實體欄位“貨幣”的賦值:service中create和update實體的時候,只有帶上貨幣型別欄位,“貨幣”會自動賦值。
原文連結:https://blog.csdn.net/pandi18/article/details/117987775