Dynamics CRM 2015自定义框架解决方案1.0发布

Dynamics CRM2015自定义框架解决方案1.0

 

 Dynamics CRM 2015自定义框架解决方案1.0版下载

一、目的

许多客户习惯之前系统自定义开发的页面、操作习惯和界面风格,但使用了Dynamics CRM 2015后只能使用产品自带的风格,导航菜单使用不是很方便,并且现阶段大部分办公设备并不支持触屏,给系统的使用带来了不便。

为解决此类问题提供了该解决方案,在CRM2015数据结构的基础上构建自定义风格的操作方式,满足用户的操作习惯,最大限度实现用户对系统的自定义。

 

二、特点

1)、支持自定义风格、样式、颜色或公司Logo等等,产品自带功能不提供的解决方案;

2)、支持多浏览器目前测试通过的浏览器有IE7及以上版本、ChromeFirefox等;

3)、运行速度提升,在同等环境下列表页面的展示速度提升到2-5倍;

4)、部署简单现有系统不需要写任何代码,只需进行三个步骤即可让现有系统运行到此框架内;

5)、完全兼容SiteMap设置,包括数据、菜单、权限等设置。因为使用的是当前登录用户权限使用SDK进行数据的读取和修改,所以插件功能完全不受影响;

数据的编辑、修改、停用、激活和删除都是当前登录人员有权限下才能使用。

注:配置的管理员账号和数据库连接字符串只是在读取框架时使用。

6)、系统自带的页面在此框架内页面完全兼容;

7)、窗体编辑页面使用两种方式:

Ø 使用系统自带的窗体布局;

Ø 使用框架提供的自定义开发模式,自定义窗体编辑页面,定制页面的布局和风格,开发者只需会htmlcssjs就能实现开发。

 

三、系统运行截图

1)、系统整体截图

2)、系统整体截图(集成呼叫中心版)

 

3)、查询关键字高亮显示

4)、选择系统自带的视图切换布局数据

5)、新建、删除、停用、启用和导出Excel等基本操作,并且此功能按钮是可以动态配置的

6)、系统自带页面仍然可用

7)、通用的实体编辑页面(即第一种方式窗体编辑页面,系统定义的窗体页面编辑布局),双击列表行数据打开编辑页面

四、部署步骤

1)、导入解决方案(XRMWeb_1_0_0_0)并发布;

2)、文件发布

将文件CRMWeb\bin目录文件发布到Program Files\Microsoft Dynamics CRM\CRMWeb\bin目录中,文件如下图;

将页面文件CRMWeb目录页面文件发布到Program Files\Microsoft Dynamics CRM\CRMWeb目录中,文件如下图

3)、Web.config文件修改

appSettings节点中加入配置项,对应修改为自己系统配置数据

    <!--CRM系统数据库连接-->

    <addkey="XRMDBCon"value="server=LUTHERPC\MSSQLSERVER2014;database=MSCRM_MSCRM;uid=sa;pwd=1234.com;"/>

    <!--组织服务地址-->

    <addkey="XRMOrgServerAddress"value="http://192.168.1.126:5555/MSCRM/XRMServices/2011/Organization.svc"/>

    <!--组织服务调用用户名-->

    <addkey="XRMUserName"value="administrator"/>

    <!--组织服务调用密码-->

    <addkey="XRMPassword"value="123.com"/>

    <!--系统域名-->

    <addkey="XRMDomain"value="xrm"/>

 

注:配置的管理员账号和数据库连接字符串只是在读取框架时使用,数据操作均使用当前登录用户身份调用组织服务。

 

 

发布成功后使用路径http://192.168.1.126:5555/MSCRM/Index.aspx进行访问http://192.168.1.126:5555/MSCRM替换成自己系统地址。

 

五、自定义开发

1、开发前菜单配置

使用SiteMap工具将实体xrm_entitywebresource(实体Web资源配置)、xrm_entitylistbutton(实体按钮配置)和xrm_form(实体窗体定义)加入到菜单中,如下图

2、配置实体对应操作按钮

1)说明:配置实体列表对应操作按钮,如果不配置使用默认操作,配置项如下图

2)、输入项

A.实体代码:需要配置对应的实体如:new_project

B.按钮名称;

C.按钮图标,对应一个Web资源图片;

D.按钮客户端脚步事件,填入点击按钮JS方法,添加方法对应AddNew,方法对应EditData等,也可以自定义方法名和参数形如:AddNew(obj,actionName)

E.按钮宽度单位为像素;

F.按钮描述,鼠标移动到按钮提示信息;

G.按钮操作名称对应方法AddNew(obj, actionName)中的actionName,点击按钮时会自动传入JS调用方法中;

H.按钮默认是否可用;

I.按钮顺序;

J.按钮是否默认可见。

3、脚本中按钮调用方法

//设置工具栏按钮是否可用

functionSetToolBoxButtonIsEnable(actionName, isEnable)

//设置工具栏按钮是否显示

functionSetToolBoxButtonIsVisible(actionName, isVisible)

3、配置实体Web资源

1)、说明:配置实体列表和窗体中自定义的Web资源,包括JSCSS,如图:

2、输入项

A. 实体代码;

B. Web资源类型,包括JS文件和CSS文件;

C. Web资源名称;

D. Web资源数据类型,包括列表和窗体。

4、配置实体窗体

1)说明:自定义实体的编辑页面如下图

2)、输入项

A. 名称;

B. 实体代码;

C. 窗体编号;

D. 窗体类型,包括编辑窗体和显示窗体;

E. 窗体内容定义,定义窗体HTML内容。

5、窗体内容定义说明

1)、使用配置实体Web资源可添加窗体自定义的JSCSS文件;

2)、实体字段对应HTML说明

Ø 字段名标签

如:<% new_name%>显示字段名称

Ø INPUT type="text"输入项标签

如:<inputfname="new_name" type="text" />加入属性fname对应实体字段,支持CRM的字段类型有:单行文本、整数、浮点数、十进制数、货币、日期和时间和多行文本。

其中日期和时间加入事件οnclick="WdatePicker({dateFmt:'yyyyMMdd',el:'Text21'});"

Ø INPUT type="checkbox"输入项标签

<inputfname="xrm_isdefault"type="checkbox" name="xrm_isdefault" /><label for="xrm_isdefault"><% xrm_isdefault%></label>加入属性fname对应实体字段,支持CRM的字段类型有:两个选项集。

Ø textarea标签

如:<textareafname="xrm_content"style="width: 750px;height: 430px;"></textarea>加入属性fname对应实体字段,支持CRM的字段类型有:单行文本和多行文本。

Ø select标签

如:<selectfname="xrm_formtype"style="width: 157px;height: 23px;"></select>

加入属性fname对应实体字段,支持CRM的字段类型有:选项集

Ø divinputimg组合标签

如:<divclass="lookup" style="width: 463px;"><inputfname="new_projectname"readonly="readonly"style="width: 463px;" /><imgltitle="选择项目名称"onclick="OpenLookupDialog(this);"src="WebResources/xrm_CUS_IMG_lookupimg"/></div>

INPUT加入属性fname对应实体字段,支持CRM的字段类型有:Lookup字段。

Ø 添加附件功能

<div datatype="attachment" autoheight="true" style="width:500px; height:200px; margin:auto;border:1px solid #E5E5E5;"></div>

Ø 添加子网格

<div relname="new_new_dealbill_new_worktasktrans_WorkTaskID"  style="width: 600px; height: 300px; margin: auto; "></div>

relname是关系的名称

 

注:所有标签的fname必须添加到标签内第一个属性,fname后后面至少需要一个空格

 
 

<select fname="new_businesstype" >正确
<select
 fname="new_businesstype"> 不正确
<select
 fname="new_businesstype" class="d123">正确

 

窗体内容定义示例:

<div style="width: 900px;margin-top: 5px; clear: both;">

           <table width="900" cellpadding="5"cellspacing="5" border="0">

               <colgroup>

                   <col style="width: 15%" />

                   <col style="width: 35%" />

                   <col style="width: 15%" />

                   <col style="width: 35%" />

               </colgroup>

               <tr>

                   <td align="right">

                       <% new_name %>

                   </td>

                   <td>

                       <input fname="new_name"style="width:290px;" type="text" />

                   </td>

                   <td align="right">

                       <% new_datatype %>

                   </td>

                   <td>

                      <select fname="new_datatype"style="width: 157px; height: 23px;">

                       </select>

                   </td>

               </tr>

           </table>

6、常用JS调用方法

1)、返回窗体所有属性值对象

xrmForm.GetFormData()
返回数据对象

2)、根据列值查询条件查询实体数据

GetEntityDataByColumnValue(entityName,columnName, columnValue, selectColumns)

参数:entityName,实体名

      columnName,条件列名

columnValue,条件列值

selectColumns,需要查询的属性名,查询多列使用竖线分割

调用方式,例如:

var entDatas =GetEntityDataByColumnValue("new_projectname", "new_projectnameid","F6B924F4-6E0D-E511-80C1-00155D00631B", "new_name|new_projectname");

根据项目编号查询项目名称返回对象为数组

3)、保存实体数据

var res = SaveData();

成功返回true,失败返回false

4)、关闭窗体

CloseForm();

5)、保存实体数据并关闭窗体

var res = SaveAndClose()

成功返回true,失败返回false

6)、根据团队编号获取用户数据 

var user=xrmPage.GetUsersByTeamId('265014C9-DA10-E511-80C2-00155D00631B');

返回对象

说明: C:\Users\Luther\Documents\Tencent Files\953754092\Image\C2C\WBUYZXQ~_9@9N(57F_1C~KE.png

7)、判断用户是否属于此团队

 var isInTeam = xrmPage.CheckUserIsInTeam(teamId, systemUserId)

调用如: 

var isInTeam = xrmPage.CheckUserIsInTeam('265014C9-DA10-E511-80C2-00155D00631B', '316469B0-DC10-E511-80C2-00155D00631B');

返回truefalse

 

8)、设置Lookup表单对象值

xrmForm.SetLookUpDataValue(entityName, fName,fId, fText)

参数:entityName:引用实体代码,不是当前实体

      fName:字段属性代码

      fId:引用实体记录编号

      fText:引用实体记录主字段名称

 

例如,清空Lookup表单对象

xrmForm.SetLookUpDataValue(inputObj.attr("refentname"),inputObj.attr("fname"), "", "");

 

9)、获取用户实体权限方法

  获取当前用户实体权限

 xrmPage.GetCurrentUserEntityPrivilege(entityName);

获取用户实体权限
 xrmPage.GetEntityPrivilege(systemUserId, entityName);

参数:entityName:实体代码

      systemUserId:用户编号

返回对象

说明: C:\Users\Luther\Documents\Tencent Files\953754092\Image\C2C\U[SNTA_UKK0KLR)A7FVOJ[M.png

返回对应的值(Append,Create等值)  0:无权限 1:用户级 2:业务部门 3:上下级业务部门 4:全组织级

10)、当前用户编号

xrmPage.GetSystemUserId();

 

11)、获取子网格对象

var subGridCon =xrmForm.GetSubGridControl(relName);

参数:relName:关系名称

 

12)、自定义子网格

Ø添加标签

<div relname="new_new_dealbill_new_projectname" iscusview="true"

 style="width: 600px; height: 300px; margin: auto; "></div>

relname是关系的名称

 

Ø编写过自定义视图代码

//查找子网格控件

var subGridCon =xrmForm.GetSubGridControl("new_new_dealbill_new_projectname");

varfetchXml ="<fetch version='1.0' output-format='xml-platform' mapping='logical'distinct='true'>" +"<entity name='" +subGridCon.TargetEntityType + "'>" +

 "<attribute name='new_name' />" +

   "<attributename='createdby' />" +

  "<filter type='and'>" +

    "<conditionattribute='statecode' operator='eq' value='0' />";    //筛选可用状态

   fetchXml += "</filter>";

   fetchXml += "</entity>";

fetchXml += "</fetch>";

 

var layoutXml ="<grid name='resultset' object='" + subGridCon.TargetEntityCode +"' jump='" + c.new_name + "' select='1' icon='1'preview='1'>" +

      "<row name='result' id='" + subGridCon.TargetEntIdName +"'>" +

                             "<cell name='new_name' width='200' />" +

                             "<cell name='createdby' width='50' />" +

                             "</row>" +

                             "</grid>";

//添加自定义视图

subGridCon.AddCustomView(fetchXml, layoutXml);

 

13)、实体列表相关方法

Ø 加载事件回调方法

xrmGrid.OnLoadData

 

Ø 刷新方法

xrmGrid.Refresh()

 

Ø 替换单元格Html方法

xrmGrid.SetDataCellHtml(attrName, value, strHtml);

参数:attrName:属性列

      value:属性值

strHtml:替换该属性值单元格Html

例如:

xrmGrid.SetDataCellHtml("new_emergencylevel","3", strHtml);

 

Ø 根据属性设置单元格样式

xrmGrid.SetDataCellStyle (attrName, styleKey, styleValue);

参数:attrName:属性列

      styleKey:样式关键字

styleValue样式值

 

调用示例:

(1)、添加Web资源(JS类型),将该资源添加到对应的列表实体中

3)、在JS中添加如下代码

jQuery(document).ready(function() {

 

   xrmGrid.OnLoadData = function () {

       //1:正常 2:紧急 3:特级

 

       var strHtml = '<img src="WebResources/new_IMG_emergencylevel1"/>';

       xrmGrid.SetDataCellHtml("new_emergencylevel", "1",strHtml);

 

       strHtml = '<img src="WebResources/new_IMG_emergencylevel2"/>';

       xrmGrid.SetDataCellHtml("new_emergencylevel", "2",strHtml);

 

       strHtml = '<img src="WebResources/new_IMG_emergencylevel3"/>';

       xrmGrid.SetDataCellHtml("new_emergencylevel", "3",strHtml);

 

       //设置单元格样式

       //xrmGrid.SetDataCellStyle("new_emergencylevel","text-align", "center");

    };

 

});

 

实现列表效果:

 

欢迎广大CRM爱好者使用和测试,提出您的意见和建议,后续会持续加入更多的功能。如需帮助请给我发邮件953754092@qq.com

                                                                                                作者:陆建宇  QQ: 953754092


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值