Ну что же. Попробую с примером. Кстати, спасибо что уделил время
Опишу только те функции, которые используются в процессе формирования кнопки, думаю другие не столь важны (они работают).
Здесь определяются параметры кнопки, а также параметр, который будет передан в функцию
function requestMatching(userRoles) {
var fieldscollection = null;
if (!userRoles || typeof (userRoles) !== 'object') {
alert ('requestMatching. Параметр не обноружне либо задан не верно');
return;
}
var matchingFields = {manager:{result:null, note: null},
cheifsale: {result: 'new_resultsale', note: 'new_decisionnotesale'},
managerzup: {result: 'new_resultzup', note: 'new_decisionnotezup'}};
for (var key in userRoles) {
if (!userRoles.hasOwnProperty(key)) continue;
//alert ('Пробуем роль ' + key + ': ' + userRoles.key);
if (userRoles[key]) {
//alert ('Ищем ' + key + ': ' + matchingFields[key]);
if (matchingFields[key] && xpga(matchingFields[key].note)) {//Проверка на совпадение имён свойств коллекий филдов и ролей
Xrm.Page.getControl(matchingFields[key].note).setVisible(true);
fieldscollection = matchingFields[key];
}
}
}
var buttonYes = createCustomButtonV2('tab4', {
id : 'matchingYes',
//onclick : ,
title : 'Одобрить заявку на старт работ',
value : fieldscollection}, {event:'onclick', func: function () {clickYes(fieldscollection);
}});
buttonYes.innerHTML = 'Согласовать';
var buttonNone = createCustomButtonV2('tab4', {
id : 'matchingNone',
//onclick : '',
title : 'Откклонить и отправить на доработку',
value : 'Отказать'});
buttonNone.innerHTML = 'Отказать';
}
Здесь билдиться сама кнопка
function createCustomButtonV2(place, buttonobj, eventfunc) {
if (!place || !buttonobj) {
alert ("createImageButton. Параметры не определены");
return;
}
//("style","width:150px; margin:5px 0px 5px 0px; display:inline-block")
var customdiv = document.createElement("div");
var placebuttondom = document.getElementById(place) ? document.getElementById(place) : null;
var buttonimagelink = buttonobj.src ? buttonobj.src : null;
var buttonelm = document.createElement("button");
//var buttontype = buttonobj.type? buttonobj.type : "button";//Тип кнопки
var custovdivdom;
var buttondom;
var defaultproperties = {
type: "button",
style: "margin: 5px; width: 120px; display: inline;"
};
//buttondom.setAttribute("src", "url");
customdiv.setAttribute("style", "display:inline-block; width:150px; height:40px; margin:5px 20px 5px 5px");
for (var key in buttonobj) {
if (buttonobj.hasOwnProperty(key)) {
buttonelm.setAttribute(key, buttonobj[key]);
}
}
for (var def in defaultproperties) {
if (defaultproperties.hasOwnProperty(def)) {
if (!buttonobj[def]) {
buttonelm.setAttribute(def, defaultproperties[def]);
}
}
}
custovdivdom = placebuttondom.appendChild(customdiv);
buttondom = custovdivdom.appendChild(buttonelm);
if (eventfunc) {//Обработчик события
if (window.addEventListener) {
buttondom.addEventListener(eventfunc.event, eventfunc.func);
}
else {//ie8
buttondom.attachEvent(eventfunc.event, eventfunc.func);
}
}
return buttondom;
}
Сама функция (пока в таком виде)
function clickYes(fields) {
alert ('Набор полей: ' + fields);
}
Если вместо addEventListener просто присвоить onclick: 'clickYes()' то alert срабатывает