rtcrm.js常用脚本库方法解析

源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
/***********************************************************
将Xrm对象下的常用的方法封装为 Rt对象,使用类似JQuery的Selector 方式访问
选择器,支持如 #new_name, :section #section01 ,#tab tab01 三种的选择器
************************************************************/
var rtcrm = function (selector) {
function _isNull(v) {
/// <summary>check if object null</summary>
/// <param name="v"></param>
/// <returns type=""></returns>
return v === null || v === undefined;
}

function _isNullOrEmpty(v) {
/// <summary>check if stirng is null or empty</summary>
/// <param name="v"></param>
return _isNull(v) || v === "";
}

function _gets() {
/// <summary>根据selector返回CRM的对象数组</summary>
/// <returns type="Array">CRM对象数组</returns>
if (_isNullOrEmpty(selector)) return null;

//将形如 #new_name,#new_date,:tab #tab01 的selector拆分逐个判断查找
var strList = selector.split(',');
if (_isNull(strList) || strList.length == 0) return null;

//要返回的UI 对象数据,包括界面上的控件、Tab、Section三种类型
var uis = [];

//逐个的Selector判断
for (var i = 0; i < strList.length; i++) {
var str = strList[i];

// # 号开头的是Id Selector
if (str.charAt(0) == "#") {
//去掉前缀
var ui = Xrm.Page.ui.controls.get(str.substring(1));
if (ui) {
uis[uis.length] = ui;
}
}
// * 代表选择所有的界面UI控件
else if (str.charAt(0) == "*") {
Xrm.Page.ui.controls.forEach(function (uiA) {
if (uiA) {
uis[uis.length] = uiA;
}
});
}
//:好开头的代表伪类,只支持 ;tab :section两种伪类
else if (str.charAt(0) == ":") {
var tabStrList = str.split(' ');
if (_isNull(tabStrList) || tabStrList.length < 2 || tabStrList[1].substring(0, 1) != "#")
continue;

var tabName = tabStrList[1].substring(1);

// :tab 伪类 selector
var obj = null;
if (tabStrList[0] == ":tab") {
obj = Xrm.Page.ui.tabs.get(tabName);
}
//:section 伪类 selector
else if (tabStrList[0] == ":section") {
var tabs = Xrm.Page.ui.tabs.get();
for (var index in tabs) {
obj = tabs[index].sections.get(tabName);
if (!_isNull(obj))
break;
}
}
if (_isNull(obj)) continue;
//如果Selector内容只有2个字符串,如 :tab #tab01 ,则代表选择的是tab本身
if (tabStrList.length == 2) {
uis[uis.length] = obj;
}
//如果Selector内容只有3 个字符串,如 :tab #tab01 * ,代表选择tab下的所有的 控件,第三个字符串必须是 * 号
else if (tabStrList.length == 3) {
tabStrList[2] == "*" && obj && obj.controls && obj.controls.forEach(function (uiA) {
uis[uis.length] = uiA;
});
}
}
}
return uis;
}

function _each(fn) {
/// <summary>对于 选择到的所有的CRM UI元素调用 fn函数,fn函数形如: function(ui,index)</summary>
/// <param name="fn">回调函数</param>
var objs = _gets();
if (_isNull(objs) || objs.length == 0) return;

for (var i = 0; i < objs.length; i++) {
fn && fn(objs[i], i);
}
}

function _eachAttr(fn) {
/// <summary>对于 选择到的所有的CRM attribute 调用 fn函数,fn函数形如: function(attr,index)</summary>
/// <param name="fn">回调函数</param>
if (_isNull(fn)) return;

var objs = _gets();
if (_isNull(objs) || objs.length == 0) return;

for (var i = 0; i < objs.length; i++) {
if (objs[i] && objs[i].getAttribute) {
var attr = objs[i].getAttribute();
fn && fn(attr, i);
}
}
}

function _get(i) {
/// <summary>返回selector选择到的第 i 个UI 控件,如果i 不输入,则返回第一个</summary>
/// <param name="i">字段的索引,标识第几个字段</param>

// '>'优先级大于'&&'大于'?:',i为undefined时,undefined>0返回false,undefined&&false为undefined,undefined?undefined:0值为0
//undefined 派生自 null,null 和 undefined 都表示空缺的值,转化为布尔值时都是假值,可以相等
//null 和 undefined 属于两种不同类型,使用全等运算符(==)或 typeof 运算符可以进行检测
//检测一个变量是否初始化,可以使用 、undefined或typeof快速检测 eg:(a == undefined) && (a = 0);(typeof a == "undefined") && (a = 0);
var index = i && i > 0 ? i : 0;
var objs = _gets();
//若为只传一个页面字段的情况下,如rtcrm(#new_name),则此时objs中只有一个boj为"Xrm.Page.ui.controls.get('new_name');",obj.length>index为true,objs&&1为1,1&&true为true
//则表达式结果为objs[0]
return objs && objs.length && objs.length > index ? objs[index] : null;
}

function _getAttr() {
/// <summary>返回selector选择到的第 1 个attribute </summary>
var obj = _get();
return obj && obj.getAttribute ? obj.getAttribute() : null;
}

function _val(v) {
/// <summary>获取字段的值,或者设定字段的值</summary>
/// <param name="v" type="Object">如果v==undifined,则为获取字段的值,否则为设定字段的值</param>

var attr = _getAttr();
if (_isNull(attr)) return null;

if (v === undefined)
return attr.getValue ? attr.getValue() : null;
else
return attr.setValue ? attr.setValue(v) : null;
}

function _text() {
/// <summary>获取CRM的字段的文本表示</summary>
var attr = _getAttr();
return attr && attr.getText ? attr.getText() : null;
}

function _req(v) {
/// <summary>获取或设定字段的Requie Level,none、</summary>
/// <param name="v">none,required,recommended</param>
if (_isNullOrEmpty(v)) {
var attr = _getAttr();
return attr && attr.getRequiredLevel ? attr.getRequiredLevel() : null;
}
else {
_eachAttr(function (attribute) {
attribute && attribute.setRequiredLevel && attribute.setRequiredLevel(v);
});
return v;
}
}

function _length() {
/// <summary>返回选择器选择到的UI控件的个数</summary>
var objs = _gets();
if (_isNull(objs)) return 0;

return objs.length;
}

function _attrType() {
/// <summary>字段的属性类别</summary>
/// <returns type="String"></returns>
var attr = _getAttr();
return attr && attr.getAttributeType ? attr.getAttributeType() : null;
}

function _fire() {
/// <summary>调用字段的 fireOnChange</summary>
var attr = _getAttr();
attr && attr.fireOnChange && attr.fireOnChange();
}

function _isDirty() {
/// <summary>检查界面上的字段的值是否发生改变了</summary>
/// <returns type="Boolean"></returns>
var attr = _getAttr();
return attr && attr.getIsDirty ? attr.getIsDirty() : Xrm.Page.data.entity.getIsDirty();
}

function _submitMode(v) {
/// <summary>设定或者获取属性的SubmitMode</summary>
/// <param name="v"></param>
/// <returns type=""></returns>
if (_isNullOrEmpty(v)) {
var attr = _getAttr();
return attr && attr.getSubmitMode ? attr.getSubmitMode() : null;
}
else {
_eachAttr(function (attribute) {
attribute && attribute.setSubmitMode && attribute.setSubmitMode(v);
});
return v;
}
}

function _disabled(v) {
/// <summary>设定或获取UI控件是否禁用</summary>
/// <param name="v"></param>
/// <returns type=""></returns>
if (_isNull(v)) {
var obj = _get();
return obj && obj.getDisabled ? obj.getDisabled() : false;
}
else {
_each(function (ui) {
var controlType = ui.getControlType();
if (controlType != "iframe" && controlType != "webresource" && controlType != "subgrid" && controlType != "searchwidget" && controlType != "kbsearch")
ui && ui.setDisabled && ui.setDisabled(v);
});
return v;
}
}

function _visible(v) {
/// <summary>设定或获取UI控件是否可视</summary>
/// <param name="v"></param>
/// <returns type=""></returns>
if (_isNull(v)) {
var obj = _get();
return obj && obj.getVisible ? obj.getVisible() : false;
}
else {
_each(function (ui) {
ui && ui.setVisible && ui.setVisible(v);
});
return v;
}
}

function _hide() {
/// <summary>
/// 隐藏界面UI控件
/// </summary>
_visible(false);
}

function _show() {
/// <summary>
///显示字段或其他的UI控件
/// </summary>
_visible(true);
}

function _focus() {
/// <summary>
///设定控件获取输入焦点
/// </summary>
var obj = _get();
obj && obj.setFocus && obj.setFocus();
}

return {
get: _get,
getAttr: _getAttr,
val: _val,
text: _text,
req: _req,
focus: _focus,
each: _each,
eachAttr: _eachAttr,
length: _length,
attrType: _attrType,
fire: _fire,
isDirty: _isDirty,
submitMode: _submitMode,
disabled: _disabled,
visible: _visible,
hide: _hide,
show: _show
};
};

常用方法

val()

rtcrm(“#new_name”).val();
获取new_name字段的值

1
2
3
4
5
6
//找到表单上一个对象,_gets()、_get()方法
Xrm.Page.ui.controls.get("new_account_id");
//获取属性,_getAttr()方法
Xrm.Page.ui.controls.get("new_account_id").getAttribute();
//获取值,_val(v)方法
Xrm.Page.ui.controls.get("new_account_id").getAttribute().getValue();

便捷的写法

1
2
//直接获取字段
Xrm.Page.getAttribute("new_account_id").getValue()
Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2020 李明华
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信