Dynamics 365—脚本

在这里记录下 Dynamics CRM/365 中常用的脚本使用方法。

Xrm.Page.getAttribute()

  • 转控件:controls.get(0)
  • 取赋值:getValue(),setValue()
  • 是否改动:getIsDirty()
  • 表单载入时的值:getInitialValue()[Boolean, optionset]
  • 提交类型:getSubmitMode(),setSubmitMode()//always,never,ditry
  • 必填等级:getRequiredLevel(),setRequiredLevel()//required、none
  • 用户操作等级:getUserPrivilege()//canCreate()、canRead()、canUpdate()
  • 事件:addOnChange(),removeOnChange(),fireOnChange()[强制执行]
  • 其他:getAttributeType(),getFormat(),getIsValid(),getMax(),getMaxLength(),getMin(),getName(),getParent(),getPrecision()
  • 选项集:getOption(),getOptions(),getSelectedOption(),getText()

Xrm.Page.getControl()

  • 转属性:getAttribute()
  • 提醒:addNotification(notification), clearNotification(uniqueId), clearNotifications(), setNotification(message,uniqueId)
  • 禁用/启用:setDisabled(true),setDisabled(false),getDisabled()
  • 显示/隐藏:setVisible(true),setVisible(false),getVisible()
  • 描述:setLabel(),getLabel()
  • 选中:setFocus
  • 刷新:refresh()//仅限SubGrid
  • 其他:addCustomFilter(),addCustomView(),addOption(),removeOption(value),clearOptions(),getControlType(),getData(),setData(),
  • getDefaultView(),setDefaultView(),getName(),getParent(),getSrc(),setSrc(),getInitialUrl(),getObject(),addOnKeyPress(),removeOnKeyPress(),fireOnKeyPress()
  • hideAutoComplete(),showAutoComplete(),
  • 查找:addCustomFilter (fetchXmlFilter, entityType),
  • addCustomView (viewId, entityLogicalName, viewDisplayName, fetchXml, layoutXml, isDefault)
  • 子网格:网格(只读)对象和方法(客户端引用)  可编辑网格对象和方法(客户端引用)
  • Control:getGrid(),addOnLoad(),removeOnLoad(),addRecord(),getRelationship(),getRelationshipAttributeName(),getRelationshipName(),
  • getViewSelector().setCurrentView(),   Grid:getGrid().getSelectedRows(),getRows(),addOnRecordSelect(),fireOnRecordSelect(),removeOnRecordSelect(),getTotalRecordCount(),showLoadingMessage()
  • Rows:getGrid().getSelectedRows().get(),getAll(),getByFilter(),getByIndex(),getByName(),getFirst(),getLength(),add(),forEach(),remove()
  • Row: getGrid().getSelectedRows().get(0).data.entity.attributes/relatedEntities                             
  • 执行上下文:obj.getFormContext().data.entity

Xrm.Page.context

  • 用户ID:getUserId()
  • 用户角色:getUserRoles()
  • 用户语言:getUserLcid()
  • 组织名称:getOrgUniqueName()
  • 组织语言:getOrgLcid()
  • 路径参数:getQueryStringParameters()
  • 服务器路径: getClientUrl()
  • 前追加组织名称:prependOrgName("/WebResource/**")效果:crmtest/WebResource/**
  • 当前主题:getCurrentTheme()
  • 客户端信息:client
  • OutLook:isOutlookClient()/isOutlookOnline()

Xrm.Page.data

页面流程:process(process=>State=>Step)

       事件:abandonProcess(),addOnProcessStatusChange(),addOnStageChange(),addOnStageSelected(),completeProcess(),

     getSelectedStage(),getStatus(),moveNext(),movePrevious(),setStatus(),switchProcess()…

获取Step:getActiveStage().getSteps().getByIndex(0)

  事件:addOnLoad(),removeOnLoad(),blockAutoSave(),getIsDirty(),setFormDirty(),refresh(),save()

Xrm.Page.data.entity

  • 所有页面元素:attributes【forEach(),get(),getLength(),getByIndex(),getByName()…】
  • 实体名称:getEntityName(),getEntitySetName()
  • 实体ID:getId(),getKey(),getEntityReference()
  • 主字段值:getPrimaryAttributeValue()
  • 是否修改:getIsDirty()
  • 保存事件:save( null | "saveandclose" |"saveandnew" )
  • 添加保存时事件:addOnSave()
  • 移出保存时事件:removeOnSave()
  • 是否Hierarchy:isInHierarchy()

Xrm.Page.ui

  • 事件:clearFormNotification(uniqueid),close(),getControls(),getCurrentControl(),getFormType(),getTabs(),refreshRibbon(),
  • 标题:get_formTitle(),set_formTitle()
  • 窗体提示框:setFormHtmlNotification(htmlText, notificationLevel, uniqueId)
  •                 setFormNotification(message, notificationLevel, uniqueId)
  • 页面所有控件:controls【forEach(),get(),getAll(),getByFilter(),getByIndex(),getByName(),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(),getByFilter(),getByIndex(),getByName(),getLength()】
  • 单个导航:navigation.items.get()【getId(),getLabel(),getVisible(),setFocus()-导航跳跃,setLabel(),setVisible()】
  • 获取导航:1.通过getLabel()遍历;2.通过ID:.get("navContacts")
  • 例:隐藏活动:Xrm.Page.ui.navigation.items.get("navActivities").setVisible(false)
  •                          document.getElementById(“navActivites”)
  • 窗体:formSelector.items【forEach(),get(),getByFilter(),getByIndex(),getByName(),getLenght()】
  • 单个窗体:formSelector.items.get()【getId(),getLabel(),navigate()-窗体跳跃】
  • var formItem = Xrm.Page.ui.formSelector.getCurrentItem();

Xrm.Utility

  • Xrm.Utility(客户端引用)
  • 弹出框:Xrm.Utility.alertDialog(message,onCloseCallback)
  • 确认框:Xrm.Utility.confirmDialog(message,yesCloseCallback,noCloseCallback)
  • 打开新的或现有实体记录:Xrm.Utility.openEntityForm(name,id,parameters,windowOptions)
  • 打开快速创建窗体:Xrm.Utility.openQuickCreate(entityLogicalName,createFromEntity,parameters).then(successCallback, errorCallback);
  • 打开HTML Web资源:Xrm.Utility.openWebResource(webResourceName,webResourceData,width, height)
  • 是否活动实体:Xrm.Utility.isActivityType(entityName)
  • 使用移动设备摄像头扫描条形码:Xrm.Utility.getBarcodeValue().then(successCallback, errorCallback)
  • 返回设备当前地理位置:Xrm.Utility.getCurrentPosition().then(successCallback, errorCallback)
  • 返回记录WebApi请求路径:Xrm.Utility.getEntityUrl(entityName, entityId)
  • 删除数据:Xrm.Utility.deleteRecord(entityName, entityId)
  • 创建数据:Xrm.Utility.create(entityLogicalName, parent, relationship, parameters, successCallback, failureCallback)
  • 检索数据:Xrm.Utility.retrieveEntityRecord(entityReference, columnNames, successCallback, actionFailedCallback)
  • 检索集合:Xrm.Utility.retrieveEntityCollection(keyQuery, successCallback, actionFailedCallback)
  • 弹出框:Xrm.Utility.openDialog (url, dialogOptions, dialogArguments, initFunctionName, returnFunction)
  • 打开记录:Xrm.Utility.openRecord(entityName, entityId, parameters)
  • 展示Hierarchy:Xrm.Utility.showHierarchyPage(entityTypeName, entityId)

Xrm.Utility

  • Xrm.Utility.closeProgressIndicator                    关闭进度对话框。
  • Xrm.Utility.getAllowedStatusTransitions           返回指定实体类型和状态码的有效状态转换。
  • Xrm.Utility.getEntityMetadata                           返回指定实体的实体元数据。
  • Xrm.Utility.getGlobalContext                            获取全局上下文。
  • Xrm.Utility.getLearningPathAttributeName      返回学习路径(指导帮助)内容设计器期望的DOM属性的名称,该属性用于标识模型驱动的应用程序表单中的UI控件。
  • Xrm.Utility.getPageContext                              获取页面上下文作为表示页面的对象。
  • Xrm.Utility.getResourceString                          返回与指定的Web资源关联的给定键的本地化字符串。
  • Xrm.Utility.invokeProcessAction                      根据指定的参数调用操作。
  • Xrm.Utility.lookupObjects                                 打开查找控件以选择一个或多个项目。
  • Xrm.Utility.refreshParentGrid                           刷新包含指定记录的父网格。
  • Xrm.Utility.showProgressIndicator                   显示带有指定消息的进度对话框。
  • //2.1、Xrm.Utility.getGlobalContext()
  • var roles2 = Xrm.Utility.getGlobalContext().userSettings.securityRoles;//当前用户角色的id数组
  • var roles3 = Xrm.Utility.getGlobalContext().userSettings.roles;//当前用户角色的数组 包括角色名称
  • //2.2、Xrm.Utility.getPageContext()
  • Xrm.Utility.getPageContext().input.createFromEntity //获取到是从哪个父记录来创建子记录的,然后执行一次查询即可

Xrm.WebApi

  • Xrm.WebApi.retrieveRecord
  • Xrm.WebApi.retrieveMultipleRecords
  • Xrm.WebApi.createRecord
  • Xrm.WebApi.updateRecord
  • Xrm.WebApi.deleteRecord
  • Xrm.WebApi.execute
  • Xrm.WebApi.executeMultiple
  • Xrm.WebApi.isAvailableOffline

Xrm.WebApi.online

  • Xrm.WebApi.online.retrieveRecord
  • Xrm.WebApi.online.retrieveMultipleRecords
  • Xrm.WebApi.online.createRecord
  • Xrm.WebApi.online.updateRecord
  • Xrm.WebApi.online.deleteRecord
  • Xrm.WebApi.online.execute
  • Xrm.WebApi.online.executeMultiple

Xrm.WebApi.offline

  • Xrm.WebApi.offline.retrieveRecord
  • Xrm.WebApi.offline.retrieveMultipleRecords
  • Xrm.WebApi.offline.createRecord
  • Xrm.WebApi.offline.updateRecord
  • Xrm.WebApi.offline.deleteRecord
  • Xrm.WebApi.offline.isAvailableOffline

Xrm.Navigation

var alertStrings = { confirmButtonLabel: "Yes", text: "操作成功!", title: "提示" };
var alertOptions = { height: 120, width: 260 };
Xrm.Navigation.openAlertDialog(alertStrings, alertOptions);
Xrm.Navigation.openErrorDialog({ message: "操作失败!" + error.message })

最佳新能

避免包含不必要的 JavaScript Web 资源库

    向窗体中添加的脚本越多,用于下载脚本的时间也会越多。 通常,脚本首次下载后会缓存在浏览器中,但首次查看窗体时的性能通常会形成重要的印象。

    对于特定示例,因为您要使用 XMLHttpRequest,因此不要在窗体脚本中包括 jQuery。 当 jQuery 提供很多人很熟悉的 $.ajax 函数来执行这些请求时,它是开发人员的首选项,不是必选项。 可以使用 Microsoft Dynamics 365 支持的所有浏览器中的本机 XMLHttpRequest 对象来执行这些请求。详细信息:jQuery 的使用

避免在 Onload 事件中加载所有脚本

    如果您有仅支持字段的 OnSave 事件或 OnChange 事件的代码,请确保使用事件处理程序为这些事件(而不是 OnLoad 事件)设置脚本库。 这样可以推迟加载这些库,从而提高窗体加载时的性能。

    为方便起见,不建议使用 OnLoad 事件处理程序中的 addOnChange 方法。 虽然此方法可减少添加事件处理程序所需的步骤数,但它将导致窗体加载速度更慢。

使用折叠选项卡来推迟加载 Web 资源

    当折叠的选项卡中的分区中包括了 Web 资源或 IFRAME 时,在选项卡折叠的情况下不会加载它们。 它们会在选项卡展开时加载。 当选项卡状态发生变化时,会发生 TabStateChange 事件。 支持折叠的选项卡中的 Web 资源或 IFRAME 所需的任何代码都可以使用 TabStateChange 事件的事件处理程序,从而减少本来必须在 OnLoad 事件中发生的代码。

设置默认可见性选项

    避免在隐藏窗体元素的 OnLoad 事件中使用窗体脚本。 请为可能隐藏的窗体元素设置默认可见性选项,以便在加载窗体时使其默认不可见。 然后,在 OnLoad 事件中使用脚本来显示您希望显示的窗体元素。

posted @ 2019-03-22 15:08  Dynamics365峰  阅读(2293)  评论(0编辑  收藏  举报