zoukankan      html  css  js  c++  java
  • CRM JS

    注意事项:Xrm.Page中的方法使用的是实体、字段、关系的逻辑名称。
    窗体调试:contentIFrame.Xrm.Page.getControl("compositeControlParams").setDisabled(false);

    一、Xrm.Page.context:上下文信息管理器
    1、Xrm.Page.context.getServerUrl():获取服务器URL。
    2、Xrm.Page.context.getOrgUniqueName():获取组织名称。
    3、Xrm.Page.context.getUserRoles():获取当前用户安全角色数组(每个对象中存储的是安全角色的Guid)。
    Iframe 中获取当前数据guid
    this.parent.Xrm.Page.context.getId();

    二、Xrm.Page.data.entity:实例数据管理器
    ㈠Xrm.Page.data.entity:实例级别
    1、Xrm.Page.data.entity.getId():返回当前实例的Guid值。
    2、Xrm.Page.data.entity.getEntityName():返回当前实例所属实体的逻辑名称。
    3、Xrm.Page.data.entity.getIsDirty():返回当前实例是否修改。
    4、Xrm.Page.data.entity.getDataXml():
    5、Xrm.Page.data.entity.addOnSave(function/functionName):添加保存记录时调用的函数。
    ⑴取消OnSave事件:event.returnValue = false;
    function OnSaveHandler(ExecutionObj){ //2013适用,注意:要勾选上表单编辑中的执行上下文
    ExecutionObj.getEventArgs().preventDefault(); }

    6、Xrm.Page.data.entity.removeOnSave(function/functionName):删除保存记录时调用的函数。
    7、Xrm.Page.data.entity.save(无/"saveandclose"/"saveandnew"):保存/保存并关闭/保存并新建。

    ㈡Xrm.Page.data.entity.attributes:属性集级别
    1、Xrm.Page.data.entity.attributes.getLength():返回属性集中的属性数量。
    2、Xrm.Page.data.entity.attributes.forEach( function( attribute, index ) ):遍历属性集,执行函数操作,参数为当前属性和索引值。
    3、Xrm.Page.data.entity.attributes.get( String / Index / null / function(attribute, index) ):返回属性或属性集。
    Xrm.Page.getAttribute( String / Index / null / function(attribute, index) ):快捷方式
    ⑴String:返回指定逻辑名称的属性(对象)。
    ⑵Index:返回指定索引值的属性(对象)。
    ⑶null:返回所有属性(数组)。
    ⑷function(attribute, index):返回函数return true的属性(数组)。

    ㈢Xrm.Page.getAttribute:属性级别
    1、Xrm.Page.getAttribute("LogicalName").getAttributeType():返回属性的类型。
    2、Xrm.Page.getAttribute("LogicalName").getFormat():返回属性格式的设置选项。
    3、Xrm.Page.getAttribute("LogicalName").getName():返回属性的逻辑名称。
    4、Xrm.Page.getAttribute("LogicalName").addOnChange(function/functionName):添加属性变更时调用的函数。
    5、Xrm.Page.getAttribute("LogicalName").removeOnChange(function/functionName):删除属性变更时调用的函数。
    6、Xrm.Page.getAttribute("LogicalName").setSubmitMode("always"/"never"/"ditry"):设置在保存记录时,是否提交属性中的数据。
    ⑴always:始终
    ⑵never:从不
    ⑶ditry:脏页
    7、Xrm.Page.getAttribute("LogicalName").setRequiredLevel("none/required/recommended"):可选/必选/推荐。

    属性取值方法:若字段内容为空,则返回值为null。
    1、单行文本、多行文本:
    Xrm.Page.getAttribute("LogicalName").getValue():String
    2、整数、浮点数、十进制数、货币:
    Xrm.Page.getAttribute("LogicalName").getValue():Number
    3、两个选项:
    Xrm.Page.getAttribute("LogicalName").getValue():Boolean
    4、选项集:
    Xrm.Page.getAttribute("LogicalName").getText():String
    Xrm.Page.getAttribute("LogicalName").getValue():Number
    Xrm.Page.getAttribute("LogicalName").getOption("选项的值"):Option对象
    ⑴text:选项的标签
    ⑵value:选项的值
    Xrm.Page.getAttribute("LogicalName").getOptions():Option对象数组
    5、日期和时间:
    Xrm.Page.getAttribute("LogicalName").getValue():Date对象
    6、查找:
    Xrm.Page.getAttribute("LogicalName").getValue():LookUp对象数组
    ⑴[0].id:对象的Guid
    ⑵[0].name:对象的主字段内容(LookUp中的显示名称)
    ⑶[0].entityType:对象所属实体的逻辑名称(LogicalName)

    属性设值方法:若要设置字段为空,则设置为null。
    1、单行文本、多行文本:
    Xrm.Page.getAttribute("LogicalName").setValue(String);
    2、整数、浮点数、十进制数、货币:
    Xrm.Page.getAttribute("LogicalName").setValue(Number);
    3、两个选项:
    Xrm.Page.getAttribute("LogicalName").setValue(Boolean);
    4、选项集:
    Xrm.Page.getAttribute("LogicalName").setValue(Number);
    5、日期和时间:
    Xrm.Page.getAttribute("LogicalName").setValue(Date Object);
    e.g:Xrm.Page.getAttribute("LogicalName").setValue(new Date(1990,10,12)); // 显示 1990/11/12
    6、查找:
    Xrm.Page.getAttribute("LogicalName").setValue(LookUp Object 数组);
    e.g:
    var lookup = new Array(1);
    lookup[0] = new Object();
    lookup[0].id = Xrm.Page.getAttribute("new_chazhao").getValue()[0].Id;
    lookup[0].name = Xrm.Page.getAttribute("new_chazhao").getValue()[0].Name;
    lookup[0].entityType = Xrm.Page.getAttribute("new_chazhao").getValue()[0].entityType;
    Xrm.Page.getAttribute("LogicalName").setValue(lookup);
    //js中得到该实体中lookup的属性 retrieveRecord(Xrm.Page.getAttribute("new_coursename").getValue()[0].id, "new_courseSet", function (data, textStatus, XmlHttpRequest) {
    var Item = new Object();
    Item.id = data.new_courselevel.Id
    Item.name = data.new_courselevel.Name;
    Item.typename = data.new_courselevel.LogicalName;
    var array = new Array();
    array[0] = Item;
    Xrm.Page.getAttribute("new_courselevellook").setValue(array);
    }, null, false);

    三、Xrm.Page.ui:窗体界面管理器
    ㈠Xrm.Page.ui:窗体级别
    1、Xrm.Page.ui.getFormType():返回表单窗体的类型。
    ⑴ 0:未定义
    ⑵ 1:创建
    ⑶ 2:更新
    ⑷ 3:只读模式
    ⑸ 4:已禁用
    ⑹ 5:快速创建(已弃用)
    ⑺ 6:批量编辑
    ⑻11:读优化
    2、Xrm.Page.ui.refreshRibbon():刷新功能区。

    3、Xrm.Page.ui.close():关闭窗体。

    Xrm.Page.ui.tabs.get("general").setLabel("Major"); //js改变选项卡标签值

    ㈡Xrm.Page.ui.controls:控件级别(相似方法同上)
    1、Xrm.Page.ui.controls.getLength();
    2、Xrm.Page.ui.controls.forEach(function(control, index));
    3、Xrm.Page.ui.controls.get(String/Index/null/function(attribute, index));
    Xrm.Page.getControl(String/Index/null/function(attribute, index))(快捷方式)
    4、属性.controls.get(0):可以获得对应控件。


    控件方法:
    1、Xrm.Page.getControl("控件逻辑名称").setVisible(true/false):可见/不可见控件。
    2、Xrm.Page.getControl("控件逻辑名称").setDisabled(true/false):禁用/启用控件。
    3、Xrm.Page.getControl("LogicalName").addCustomView(viewId, entityName, viewDisplayName, fetchXml, layoutXml, isDefault):添加查找对话框视图(查找字段的视图选择器必须开启)。
    // 指定视图的GUID(任意)
    var viewId = null;
    // 查找实体的逻辑名称
    var entityName = null;
    // 指定视图的名称
    var viewDisplayName = null;
    // 视图的fetchXml查询
    var fetchXml = null;
    // 指定视图布局XML
    var layoutXml = null;
    // 是否设置为默认视图
    var isDefault = true;
    4、Xrm.Page.getControl("LogicalName").addCustomFilter(fetchXml):添加视图筛选条件,对所有视图有效,必须在addPreSearch中调用。
    5、Xrm.Page.getControl("LogicalName").addPreSearch(function):在显示查询视图前,调用参数方法,常用于添加视图筛选条件。
     · 猜想:点击查找按钮,加载查询语句,执行addPreSearch参数方法,显示查找视图。
     · 注意:对同一个查询控件执行多次addPreSearch方法,在执行其参数方法时,会按照添加顺序依次执行每次添加的参数方法。

    6、Xrm.Page.getControl("IFrameLogicalName").setSrc(URL):设置资源地址。
     · 每次展开选项卡,IFrame将刷新重置,因此,对src的修改,应放在TabStateChange事件中,而不是OnLoad事件。

    ㈢Xrm.Page.ui.tabs: 选项卡级别(相似方法同上)
    1、Xrm.Page.ui.tabs.getLength();
    2、Xrm.Page.ui.tabs.forEach(function(attribute, index));
    3、Xrm.Page.ui.tabs.get(String/Index/null/function(attribute, index));
    选项卡方法:见SDK。

    ㈣Xrm.Page.ui.tabs.get(...).sections:选项卡中节级别(相似方法同上)
    1、Xrm.Page.ui.tabs.get(...).sections.getLength();
    2、Xrm.Page.ui.tabs.get(...).sections.forEach(function(attribute, index));
    3、Xrm.Page.ui.tabs.get(...).sections.get(String/Index/null/function(attribute, index));
    节方法:见SDK。

    ㈤Xrm.Page.ui.navigation.items:关联导航视图(相似方法同上)
    1、Xrm.Page.ui.navigation.items.getLength();
    2、Xrm.Page.ui.navigation.items.forEach(function(item, index));
    3、Xrm.Page.ui.navigation.items.get(String/Index/null/function(attribute, index));
     · String:在CRM2013中为"nav_关系名称"
    节方法:见SDK。

    四、Xrm.Utility:
    1、Xrm.Utility.openEntityForm(LocalName, Id, Parameters):
    ⑴打开新记录:Xrm.Utility.openEntityForm("account");
    ⑵打开新记录并设置默认值:Xrm.Utility.openEntityForm("account", null, parameters);
    var parameters = {};
    parameters["文本/十进制数"] = String;
    parameters["数字/货币"] = Number;
    parameters["两个选项"] = true/false;
    parameters["选项集"] = Value;
    parameters["时间和日期"] = "1/31/1990";
    parameters["查找"] = ID;
    parameters["查找name"] = Name;
    parameters["查找type"] = EntityType(仅限系统自带客户/负责人字段);
    ⑶打开已有记录:Xrm.Utility.openEntityForm("account", "A85C0252-DF8B-E111-997C-00155D8A8410");


    Xrm.Page.ui.getFormType() != 1 窗体不是创建状态

    Xrm.Page.ui.setFormNotification('创建保存成功!', "INFO", "remind"); 通知


    var object=new Object();
    obj.new_type = { Value: "100000000" }; //picklist赋值
    obj.new_contractno = { Id: "" +id + "", LogicalName: "" + Xrm.Page.data.entity.getEntityName() + "", Name: "1" };//lookup赋值

    高级JS
    1. Xrm.Page.context.getClient()
    它是用来替代之前的 context.isOutlookClient() 接口的,返回值可能是 Browser 、Outlook或者Mobile之一。
    2. Xrm.Page.data.refresh(save).then(successCallback, errorCallback)
    用来异步刷新界面,可以保存当前修改且不需要重新载入页面。我们知道Dynamics CRM 2011 记录详情界面保存后后悔重新载入页面,现在Dynamics CRM 2013提供了新选择。
    3. Xrm.Page.data.save().then(successCallback, errorCallback)
    异步的保存对记录的更改,并在保存成功后调用回掉函数successCallback。
    4. Xrm.Page.getAttribute(arg).getIsPartyList()
    返回查找字段是不是参与方列表,比如活动的必须方字段就是,我们新建的客制化实体目前是的查找字段是不能查找多个实体的,就不是参与方列表。
    5. Xrm.Page.context.getUserName()
    以前有getUserId(),要给查找实体是系统用户(SystemUser)的查找类型字段赋值为当前用户还真是有点麻烦,需要用ODATA查询下用户的主属性(姓名)的值才能赋值。当时我就在想,为啥没有getUserName()呢?哈哈,这不,想啥来啥,赞一个。我用代码 alert(Xrm.Page.context.getUserName()); 获取到的输出如下,正是当前用户的姓名。


    5.Xrm.Page.data.entity.getPrimaryAttributeValue()
    这个用来获取实体的主属性的值,主属性默认情况下就是解决方案前缀加上_name,比如new_name,示例代码是 alert(Xrm.Page.data.entity.getPrimaryAttributeValue());,结果如下:


    6. Xrm.Page.ui.setFormNotification()
    在Dynamics CRM 2011中,只有少部分地方系统有窗体通知,比如商机界面如果没有选择价目表会出现窗体提示,但是SDK中并没有提供自定义开发的时候如何设置窗体消息的方法,虽然网上有人说可以做到,毕竟官方没有公开支持嘛。一些用户也有这需求,因为总是弹出窗口来提示有时候挺烦人的。


    到Dynamics CRM 2013时明确方便的支持了,示例代码是 Xrm.Page.ui.setFormNotification('窗体通知消息一错误', 'ERROR', 'D1ADCA8C-D70D-4A2E-A759-BA08FE8A221B'); ,效果如下图所示:


    使用代码 Xrm.Page.ui.setFormNotification('窗体通知消息一警告', 'WARNING', 'D1ADCA8C-D70D-4A2E-A759-BA08FE8A221B'); 的效果如下图所示:


    使用代码 Xrm.Page.ui.setFormNotification('窗体通知消息一信息', 'INFO', 'D1ADCA8C-D70D-4A2E-A759-BA08FE8A221B'); 的效果如下图所示:


    当然,一次添加多个消息也是可以的,如下图所示。


    这里会用到一个GUID的值,我一般使用Visual Studio自带的创建GUID工具即可。


    7. Xrm.Page.ui.clearFormNotification(uniqueId)
    清除参数指定的表单级别的消息。
    8. Xrm.Page.getControl(arg).setNotification(message)
    为指定的控件设置一个消息,能阻止窗体保存,是代替以前用alert方法弹出对话框提示错误信息的绝好替代方法。
    9. Xrm.Page.getControl(arg).clearNotification()
    清除为指定控件设置的消息。
    10. Xrm.Utility.isActivityType(entityName)
    传入实体的逻辑名称,判断boolean值告知是否是活动实体
    11. Xrm.Utility.alertDialog(message,onCloseCallback)
    显示一个消息,并在用户点击确定按钮后调用回调函数 onCloseCallback,请以后使用该函数代替window.alert。
    12. Xrm.Utility.confirmDialog(message,yesCloseCallback,noCloseCallback)
    显示一个确认对话框,当用户点击确定时调用函数yesCloseCallback,点击取消时调用函数noCloseCallback。
    下面这个例子涵盖了前面几个函数:
    function BtnOnClick() {
    Xrm.Utility.confirmDialog('确定要继续操作吗?', function () {
    Xrm.Page.getControl('new_name').setNotification('你点击了确定按钮!');
    Xrm.Page.ui.clearFormNotification('D1ADCA8C-D70D-4A2E-A759-BA08FE8A221B');
    }, function () {
    Xrm.Utility.alertDialog('你点击了取消按钮', function () { });
    });
    }

  • 相关阅读:
    [CF864F]Cities Excursions
    [AGC012F]Prefix Median
    [TC-FindingFriends]Finding Friends
    [TC-HouseProtection]House Protection
    [CTSC2018]假面
    [CF877F]Ann and Books
    [CF509F]Progress Monitoring
    [CF735E/736C]Ostap and Tree
    CF611H New Year and Forgotten Tree
    CF538H Summer Dichotomy
  • 原文地址:https://www.cnblogs.com/jayblog/p/9318354.html
Copyright © 2011-2022 走看看