深入浅出Dynamics crm

发布时间 2023-12-04 15:06:16作者: 葡萄藤下的碎阳
                                 //sly 2023/12/4出品
                                 **深入浅出Dynamics crm**
                                 

窗体js功能操作

上下文(executionContext)

登录系统管理员账户打开实体窗体编辑器 进行如下操作:

1701314966390 image-20231130114115797

上下文方法示例

//executionContext 系统参数 上下文对象
function OnInit(executionContext)
{
    //返回一个值,该值指示执行此处理程序的顺序。
    executionContext.getDepth();
    //返回一个对象,该对象现有的执行的方法。 描述:当指定的事件发生时,您可以使用执行上下文对象的getEventArgs方法来检索可能包含您可以使用的其他方法的对象。
    executionContext.getEventArgs();
    //Description:从Xrm对象模型返回事件源对象,而不是HTML DOM对象。例如,在OnChange事件中,此方法返回表示已更改列的formContext.data.entity对象。
    executionContext.getEventSource()
    //根据调用方法的位置,返回对窗体或窗体上的项的引用。
    executionContext.getFormContext()
    //获取共享变量
    executionContext.getSharedVariable(key);
    //设置共享变量
    executionContext.setSharedVariable(key, value);
}

getEventSource 方法详细链接

getEventArgs 方法详细链接

formContext object model

![1701316001432](C:\Users\Administrator\Desktop\深入浅出Dynamics crm.assets\1701316001432.jpg)

获取formContext示例

function OnInit(executionContext)
{
   //获取formContext对象
   var formContext = executionContext.getFormContext(); // get formContext
}
formContext.data 表单数据 提供处理表单上的数据的属性和方法。
//添加要在加载表单数据时调用的函数。
formContext.data.addOnLoad(myFunction);
//获取一个布尔值,该值指示表单数据是否已被修改。
formContext.data.getIsDirty();
//获取一个布尔值,该值指示是否所有表单数据都有效。如果表单上的必填项列为空,则会显示控制级错误通知。也可以使用setlsValid方法将列设置为无效。 formContext.getAttribute(arg).setIsValid(bool, message);
formContext.data.isValid();
//刷新页面数据 save:如果数据应该在刷新之前保存,则为True,否则为false。
formContext.data.refresh(save).then(successCallback, errorCallback);
//移除加载表单数据时要调用的函数。
formContext.data.removeOnLoad(myFunction)
//异步保存数据 注意:使用此方式保存数据会触发默认的系统保存事件 可用executionContext.getEventArgs().preventDefault(); 取消保存
formContext.data.save(saveOptions).then(successCallback, errorCallback);
formContext.data.entity 表单列的操作
//添加完成保存事件后的操作方法 注意:on-premises 本地部署不支持此方法
formContext.data.entity.addOnPostSave(myFunction);
//移除完成保存事件后的操作方法 注意:on-premises 本地部署不支持此方法
formContext.data.entity.removeOnPostSave(myFunction);
//添加OnSave事件触发时调用的函数。该事件发生在保存操作发生之前,可用executionContext.getEventArgs().preventDefault(); 取消保存
formContext.data.entity.addOnSave(myFunction);
//返回表示保存记录时将发送到服务器的XML的字符串。只有已更改或提交模式设置为“always”的列中的数据才会发送到服务器。
formContext.data.entity.getDataXml();
//返回表示记录的表的逻辑名称的字符串。
formContext.data.entity.getEntityName();
//返回引用记录的查找值
formContext.data.entity.getEntityReference();
//返回表示记录GUID值的字符串。 注意:使用需要去除”{}“
formContext.data.entity.getId();
//获取一个布尔值,该值指示表单中的任何列是否已被修改。
formContext.data.entity.getIsDirty();
//获取一个布尔值,该值指示是否所有表数据都有效。
formContext.data.entity.isValid();
//移除OnSave事件触发时调用的函数
formContext.data.entity.removeOnSave(myFunction);
窗体列 formContext.getAttribute(“xx”)
//取值
.getValue()
//赋值
.setValue()
//对列添加值改变事件 myFunction:需要触发的方法
.addOnChange(myFunction)
//移除OnChange事件
.removeOnChange()
//强行触发列的值改变事件方法
.fireOnChange() 
//获取必填等级
.getRequiredLevel()
//设置必填等级 value:required、none
.setRequiredLevel(value)
//获取列类型 boolean、datetime、decimal、double、file、image、lookup、money、multiselectoptionset (choices)、optionset (choice)、string
.getAttributeType() 
//返回arg列的格式化选项的字符串值
.getFormat()
//获取页面载入时初始值
.getInitialValue()
//判断该列值是否改变 改变为true 否则为false
.getIsDirty()
//返回一个布尔值,该值指示查找是否表示partylist查找。Partylist查找允许设置多个记录
.getIsPartyList()
//返回指示列允许的最大值的数字。
.getMax()
//返回一个数字,指示字符串或备注列的最大长度。
.getMaxLength()
//返回指示列允许的最小值的数字
.getMin()
//返回该列的逻辑名称的字符串。
.getName()
//返回一个选项对象,其值与传递给方法的参数(标签或枚举值)相匹配。
.getOption(value)
//返回表示列的有效选项的选项对象数组。
.getOptions()
//返回选项对象或分别在一个或多个选项列中选择的选项对象数组。
.getSelectedOption()
//返回formContext.data.entity对象,该对象是所有列的父对象。
.getParent()
//返回小数点右边允许的位数。
.getPrecision()
//设置小数点右边允许的位数。 value:Number类型
.setPrecision(value)
//获取列提交数据类型
.getSubmitMode()
//设置列提交数据类型 always、never、ditry
.setSubmitMode()
//返回一个或多个选项列的当前选定选项的文本字符串值 没有选中数据则返回null
.getText()
//返回一个对象,该对象具有三个布尔属性,对应于权限,指示用户是否可以创建、读取或更新列的数据值 canRead、canUpdate、canCreate
.getUserPrivilege()
//返回一个布尔值,以指示列的值是否有效。
.isValid()
//为列设置一个提醒,确定该列对于消息是有效还是无效。bool:true、false  message:提醒的信息
.setIsValid(bool, message)

上下文 Xrm.Page.context
//用户ID
.getUserId()
//用户角色:
.getUserRoles()
//v:9.0 版本及以上版本获取用户角色 一次性获取用户的角色
Xrm.Utility.getGlobalContext().userSettings.roles;
//用户语言:
.getUserLcid()
//组织名称:
.getOrgUniqueName()
//组织语言:
.getOrgLcid()
//路径参数:
.getQueryStringParameters()
窗体状态 formContext.ui
//获取当前窗体状态
var formType = formContext.ui.getFormType();
//创建
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;
//关闭当前表单
.close();
//添加要在窗体OnLoad事件上调用的函数。
.addOnLoad(myFunction);
//获取视口的高度,以像素为单位。
.getViewPortHeight();
//获取视口宽度以像素为单位。
.getViewPortWidth();
//使功能区重新评估控制其中显示内容的数据。refreshAll:指示是否刷新当前页面上的所有功能区命令栏。如果指定false,则只刷新页面级功能区命令栏。如果不指定该参数,则默认传递false。
.refreshRibbon(refreshAll);
//从窗体OnLoad事件中移除一个函数。
.removeOnLoad(myFunction)
//设置要在窗体上显示的表的名称。
.setFormEntityName(arg);
//显示表单级别的通知。您可以显示任意数量的通知,并且它们将一直显示,直到使用clearFormNotification删除它们。通知区域的高度是有限的,所以每条新消息都将被添加到顶部。用户可以向下滚动以查看尚未删除的旧消息。
//message 消息的文本。 level 消息的级别,它定义了消息的显示方式。指定以下值之一: ERROR 错误、WARNING 警告、INFO 通知。 uniqueId 消息的唯一标识符,稍后可以与clearFormNotification一起使用以删除通知。
.setFormNotification(message, level, uniqueId);
导航 Xrm.Navigation

//导航到指定的表列表、表记录、HTML web资源或自定义页面。

 //pageInput 必填 根据要导航到的页面类型而定义对象 
 //navigationOptions 导航到页面的选项:是内联打开还是在对话框中打开。如果不指定此参数,默认情况下将内联打开页面。
 //successCallback  在内联导航成功导航到页面时执行的函数,以及在导航到对话框时关闭对话框时执行的函数。
 //errorCallback 当操作失败时执行的函数。
 Xrm.Navigation.navigateTo(pageInput,navigationOptions).then(successCallback,errorCallback);

使用示例:

导航到XX实体列表

var pageInput = {
    pageType: "entitylist", //导航位置类型:实体列表
    entityName: "account" //导航实体名称:account
};
Xrm.Navigation.navigateTo(pageInput).then(
    function success() {
            // Run code on success
    },
    function error() {
            // Handle errors
    }
);

导航到现有实体记录

var pageInput = {
    pageType: "entityrecord", //导航位置类型:实体
    entityName: "account", //实体名称
    entityId: "5a57f2c3-5672-ea11-a812-000d3a339706" //实体ID
};
var navigationOptions = {
    target: 2, //窗体实现模式,1表示内联窗体,完全遮挡当前页面. 2表示模态窗体,在当前页面之上弹出窗体
    height: {value: 80, unit:"%"}, //当前页面的80%高度
    width: {value: 70, unit:"%"},//当前页面的70%宽度
    position: 1, //窗体位置,1表示中间位置,2表示侧边栏显示
    title:"客户实体" //窗体标题
};
Xrm.Navigation.navigateTo(pageInput, navigationOptions).then(
    function success() {
            // Run code on success
    },
    function error() {
            // Handle errors
    }
);

导航到创建模式下的窗体并获取数据

var pageInput = {
    pageType: "entityrecord",
    entityName: "account"    
};
var navigationOptions = {
    target: 2,
    height: {value: 80, unit:"%"},
    width: {value: 70, unit:"%"},
    position: 1
};
Xrm.Navigation.navigateTo(pageInput, navigationOptions).then(
    function success(result) {
            var entityId=result.savedEntityReference[0].id; //创建的实体ID
            var entityName=result.savedEntityReference[0].name; //创建的实体名称
    },
    function error() {
            // Handle errors
    }
);

导航到web资源

var pageInput = {
    pageType: "webresource", //导航位置类型:web资源
    webresourceName: "new_sample_webresource.htm" //资源名称
};
var navigationOptions = {
    target: 2,
    width: 500, //页面宽度 500px
    height: 400, //页面高度 400px
    position: 1
};
Xrm.Navigation.navigateTo(pageInput, navigationOptions).then(
    function success() {
            // Run code on success
    },
    function error() {
            // Handle errors
    }
);
.openAlertDialog

//显示包含消息和按钮的警报对话框。

//alertStrings 必填 要在警报对话框中使用的字符串
//alertOptions 设置弹出框的宽度和高度
//successCallback 当警报对话框关闭时执行的函数,单击确认按钮或按ESC取消。
//errorCallback 当操作失败时执行的函数。
Xrm.Navigation.openAlertDialog(alertStrings,alertOptions).then(successCallback,errorCallback);

使用示例

弹出警告框

var alertStrings = { 
    confirmButtonLabel: "Yes", //(可选)字符串。确认按钮标签。如果不指定按钮标签,则使用OK作为按钮标签。
    text: "This is an alert.", //字符串。要在警报对话框中显示的消息
    title: "Sample title"  //(可选)字符串。警告对话框的标题。
};
var alertOptions = { 
    height: 120, //弹出框的高度
    width: 260  //弹出框的宽度
};
Xrm.Navigation.openAlertDialog(alertStrings, alertOptions).then(
    function (success) {
        //关闭时执行的函数,单击确认按钮或按ESC取消。
        console.log("Alert dialog closed");
    },
    function (error) {
        console.log(error.message);
    }
);
.openConfirmDialog

//显示包含消息和两个按钮的确认对话框。

//confirmStrings 需要在确认对话框里使用的字符串
//alertOptions 设置弹出框的宽度和高度
//successCallback 当警报对话框关闭时执行的函数,单击确认按钮或按ESC取消。
//errorCallback 当操作失败时执行的函数。
Xrm.Navigation.openConfirmDialog(confirmStrings,confirmOptions).then(successCallback,errorCallback);

使用示例

弹出确认框

var confirmStrings = {
    cancelButtonLabel:"取消",//(可选)取消按钮标签如果未指定取消按钮标签,则使用cancel作为按钮标签
    confirmButtonLabel:"确认",//(可选)确认按钮标签。如果未指定确认按钮标签,则使用OK作为按钮标签
    subtitle:"消息确认",//(可选)在确认对话框中显示的字幕
    text:"This is a confirmation.",  //字符串。要在确认对话框中显示的消息
    title:"Confirmation Dialog" //在确认对话框中显示的标题
};
var confirmOptions = { 
    height: 200, //高度 200px
    width: 450 //宽度 450px
};
Xrm.Navigation.openConfirmDialog(confirmStrings, confirmOptions).then(
function (success) {    
    if (success.confirmed)
        //点击确认
        console.log("Dialog closed using OK button.");
    else
        //点击取消或者关闭
        console.log("Dialog closed using Cancel button or X.");
});
.openForm

//打开实体表单或快速创建表单。

//entityFormOptions 必填 用于打开表单的表单选项。
//formParameters 向表单传递额外参数的字典对象。
//successCallback 当记录保存在快速创建表单中时执行的函数。将一个对象作为参数传递给该函数。对象有一个savedEntityReference数组,该数组具有以下列来标识显示或创建的记录:entityType:表的逻辑名称。id:记录GUID值的字符串表示形式。name:显示或创建的记录的主列值。
//注意:当您为现有或新记录打开表单时,不会执行successCallback函数。successCallback函数只在快速创建保存记录时执行使用openForm方法打开的表单。
//errorCallback 发生错误回调
Xrm.Navigation.openForm(entityFormOptions, formParameters).then(successCallback, errorCallback);

使用示例

打开现有实体

var entityFormOptions = {};
entityFormOptions["entityName"] = "contact"; //实体名称
entityFormOptions["entityId"] = "8DA6E5B9-88DF-E311-B8E5-6C3BE5A8B200"; //实体ID

// Open the form.
Xrm.Navigation.openForm(entityFormOptions).then(
    function (success) {
        console.log(success);
    },
    function (error) {
        console.log(error);
    });

打开新的纪录实体

var entityFormOptions = {};
entityFormOptions["entityName"] = "contact"; //实体名称

//设置新实体默认值
var formParameters = {};
formParameters["firstname"] = "Sample";
formParameters["lastname"] = "Contact";
formParameters["fullname"] = "Sample Contact";
formParameters["emailaddress1"] = "contact@adventure-works.com";
formParameters["jobtitle"] = "Sr. Marketing Manager";
formParameters["donotemail"] = "1";
formParameters["description"] = "Default values for this record were set programmatically.";
//设置查找类型值
formParameters["preferredsystemuserid"] = "3493e403-fc0c-eb11-a813-002248e258e0"; 
formParameters["preferredsystemuseridname"] = "Admin user"; // Name of the user.
Xrm.Navigation.openForm(entityFormOptions, formParameters).then(
    function (success) {
        console.log(success);
    },
    function (error) {
        console.log(error);
    });