将模块附加到 Microsoft Dynamics CRM 表单事件
Attaching modules to Microsoft Dynamics CRM Form Events
我正在使用 Typescript 编写自定义代码来处理表单事件。对于每一种形式,我都有一个单独的文件,然后我在编译时将这些文件组合成一个文件,然后我在所有形式中使用该文件。我在将事件附加到表单时遇到问题 - 我收到无法找到我的函数名称的错误。下面是已编译的 Javascript 文件中的 requirejs 模块之一。我曾尝试使用 Evaluation.[function]
、Forms/Evaluation.[function]
和 EvaluationScripts.[function]
连接事件,但没有成功。我应该使用什么命名结构来附加我的表单事件?
tsc 编译
define("Forms/Evaluation", ["require", "exports", "Global/Helpers", "Global/CCSEQ", "Global/Sync", "Global/Util", "Global/Query"], function (require, exports, Helpers, CCSEQ, Sync_4, Util_10, Query) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var EvaluationScripts = (function (_super) {
__extends(EvaluationScripts, _super);
function EvaluationScripts() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.EmployeeStaffLevelAsOfDateQuery = //query;
return _this;
}
EvaluationScripts.prototype.onLoad = function () {
};
EvaluationScripts.prototype.onSave = function (execObj) {
};
EvaluationScripts.prototype.ccseq_employeeid_onChange = function () {
};
return EvaluationScripts;
}(Helpers.FormLibrary));
exports.Evaluation = new EvaluationScripts();
});
更新
我也尝试过使用 Webpack 来编译我的模块,但是当我将 onLoad
函数连接到 onLoad
事件时仍然出现错误。下面是我的 Webpack 编译文件的示例。
Webpack-编译
var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(6)], __WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, EvaluationForm) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var Evaluation = EvaluationForm;
}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
/***/ }),
/* 6 */
/***/ (function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(7), __webpack_require__(1), __webpack_require__(4), __webpack_require__(0), __webpack_require__(3)], __WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, Helpers, CCSEQ, Sync_1, Util_1, Query) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var evaluationPeriodDate;
var EmployeeStaffLevelAsOfDateQuery = xml;
function onLoad() {
}
exports.onLoad = onLoad;
function onSave(execObj) {
}
exports.onSave = onSave;
function onCreate() {
}
exports.onCreate = onCreate;
function ccseq_employeeid_onChange() {
}
exports.ccseq_employeeid_onChange = ccseq_employeeid_onChange;
}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
我认为您在尝试使用 WebPack 时可能会稍微复杂一些。
我对所有 CRM JavaScript 使用 TypeScript,我使用的模式是为每个实体创建一个 ts 文件,如下所示:
/// <reference path="../type definations/xrm.d.ts" />
/// <reference path="../type definations/jquery.d.ts" />
namespace xrm.entities.contact {
class FormScripts {
constructor() {
//
}
private _onLoad() {
}
public OnLoad() {
this._onLoad();
}
};
//Expose the same js interface as the legacy code
export var code;
code = new FormScripts();
}
我在 CRM 中的联系人实体的 OnLoad 处理程序看起来像:
xrm.entities.contact.code.OnLoad
我们使用 gulp 将所有引用的库合并到一个 javascript 文件中,该文件可以作为一个网络资源上传到 CRM
问题不在于 webpack。问题是函数没有设置到全局范围。
全局添加函数的最简单方法是
window.Evaluation = new EvaluationScripts();
最后,我创建了一个导入所有表单文件的新文件。这与 rexkenley 的建议一起使我能够使用 CCSEQ.[FormName]
.
成功连接表单事件
Library.ts
import {Test as TestForm} from './path/to/form';
(<any>window).CCSEQ = {};
(<any>window).CCSEQ.Test = TestForm;
我正在使用 Typescript 编写自定义代码来处理表单事件。对于每一种形式,我都有一个单独的文件,然后我在编译时将这些文件组合成一个文件,然后我在所有形式中使用该文件。我在将事件附加到表单时遇到问题 - 我收到无法找到我的函数名称的错误。下面是已编译的 Javascript 文件中的 requirejs 模块之一。我曾尝试使用 Evaluation.[function]
、Forms/Evaluation.[function]
和 EvaluationScripts.[function]
连接事件,但没有成功。我应该使用什么命名结构来附加我的表单事件?
tsc 编译
define("Forms/Evaluation", ["require", "exports", "Global/Helpers", "Global/CCSEQ", "Global/Sync", "Global/Util", "Global/Query"], function (require, exports, Helpers, CCSEQ, Sync_4, Util_10, Query) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var EvaluationScripts = (function (_super) {
__extends(EvaluationScripts, _super);
function EvaluationScripts() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.EmployeeStaffLevelAsOfDateQuery = //query;
return _this;
}
EvaluationScripts.prototype.onLoad = function () {
};
EvaluationScripts.prototype.onSave = function (execObj) {
};
EvaluationScripts.prototype.ccseq_employeeid_onChange = function () {
};
return EvaluationScripts;
}(Helpers.FormLibrary));
exports.Evaluation = new EvaluationScripts();
});
更新
我也尝试过使用 Webpack 来编译我的模块,但是当我将 onLoad
函数连接到 onLoad
事件时仍然出现错误。下面是我的 Webpack 编译文件的示例。
Webpack-编译
var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(6)], __WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, EvaluationForm) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var Evaluation = EvaluationForm;
}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
/***/ }),
/* 6 */
/***/ (function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(7), __webpack_require__(1), __webpack_require__(4), __webpack_require__(0), __webpack_require__(3)], __WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, Helpers, CCSEQ, Sync_1, Util_1, Query) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var evaluationPeriodDate;
var EmployeeStaffLevelAsOfDateQuery = xml;
function onLoad() {
}
exports.onLoad = onLoad;
function onSave(execObj) {
}
exports.onSave = onSave;
function onCreate() {
}
exports.onCreate = onCreate;
function ccseq_employeeid_onChange() {
}
exports.ccseq_employeeid_onChange = ccseq_employeeid_onChange;
}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
我认为您在尝试使用 WebPack 时可能会稍微复杂一些。
我对所有 CRM JavaScript 使用 TypeScript,我使用的模式是为每个实体创建一个 ts 文件,如下所示:
/// <reference path="../type definations/xrm.d.ts" />
/// <reference path="../type definations/jquery.d.ts" />
namespace xrm.entities.contact {
class FormScripts {
constructor() {
//
}
private _onLoad() {
}
public OnLoad() {
this._onLoad();
}
};
//Expose the same js interface as the legacy code
export var code;
code = new FormScripts();
}
我在 CRM 中的联系人实体的 OnLoad 处理程序看起来像:
xrm.entities.contact.code.OnLoad
我们使用 gulp 将所有引用的库合并到一个 javascript 文件中,该文件可以作为一个网络资源上传到 CRM
问题不在于 webpack。问题是函数没有设置到全局范围。
全局添加函数的最简单方法是
window.Evaluation = new EvaluationScripts();
最后,我创建了一个导入所有表单文件的新文件。这与 rexkenley 的建议一起使我能够使用 CCSEQ.[FormName]
.
Library.ts
import {Test as TestForm} from './path/to/form';
(<any>window).CCSEQ = {};
(<any>window).CCSEQ.Test = TestForm;