Добрый день!
В BPM 7.6 есть такой раздел Доступ на операции.
Можно создать свою операцию, добавить группы, которые могут производить эти операции.
В зависимости от назначения операции пользователь, входящий в указанную группу, может производить те или иные действия.

Хотелось бы добавить свою операцию, и например, заблокировать какие-то поля в карточке в зависимости от того, есть у пользователя право на операцию или нет.

Скажите, пожалуйста, где можно посмотреть подобный пример реализации в конфигурации?

Нравится

5 комментариев

Дарья, добрый день.

Выгрузите исходники согласно инструкции:

http://www.community.terrasoft.ru/blogs/8747

После чего выполните поиск по коду операции, например, используя поиск по содержимому в Total Commander.

Ссылка, которую вы дали - это же ветка форума 5.х, касающаяся отладки - причем здесь выгрузка исходников?
Я в принципе, уже увидела следующий пример

if (this.get("CanViewSysOperationAudit") != null) {
this.navigateToSysOperationAuditSection();
} else {
RightUtilities.checkCanExecuteOperation({
operation: "CanViewSysOperationAudit"
}, function(result) {
this.set("CanViewSysOperationAudit", result);
this.navigateToSysOperationAuditSection();
}, this);
}
}

Это пример использования операции - когда операция запрещает/разрешает использовать то или иное действие меню - в данном случае, это журнал аудита.
В основном, все операции в конфигурации используются для таких целей

Я бы хотела использовать операцию, чтобы в карточке делать недоступными для редактирования то или иное поле для тех групп пользователей.
Для того, чтобы делать активным поле в зависимости от каких-то условий надо использовать бизнес-правило.
Можно ли в качестве условия бизнес-правила использовать результат возвращения операции?

Предположила, что надо сделать виртуальный атрибут
"MyCanEditDateReact": {
dataValueType: Terrasoft.DataValueType.BOOLEAN,
value: null
},

создать метод для его заполнения
(т.е. аттрибут заполняется true,
если у пользователя есть право на операцию с кодом CanEditDateReact)
MethodCanEditDateReact: function() {

RightUtilities.checkCanExecuteOperation({
operation: "CanEditDateReact"
}, function(result) {
this.set("MyCanEditDateReact", result);

}, this);
}

вызвать метод этот в событии
onEntityInitialized: function() {
this.callParent(arguments);
this.MethodCanEditDateReact();
},

и уже в условиях бизнес-правила сравнивать заполняемый виртуальный аттрибут со значением true.
Но еще до прописывания самого бизнес-правила
наткнулась на ошибку в строке operation: "CanEditDateReact".

Возможно, что должна быть другая реализация? и в бизнес-правило надо по другому прописывать подобное условие?

Здравствуйте!

Коллеги, в пакете Nui есть замечательная схема RightsHelper. Там много примеров по использованию прав на операции.

Добрый день!
Спасибо, все получилось.
Использовала функцию checkCanExecuteOperation из схемы RightUtilites

Реализация такова была:

вызвала функцию в методе
MethodCanEditDateReact: function() {

RightUtilities.checkCanExecuteOperation({
operation: "CanEditDateReact"
}, function(result) {
this.set("MyCanEditDateReact", result);
}, this);
}

данный метод вызван в событии
onEntityInitialized: function() {
this.callParent(arguments);
this.MethodCanEditDateReact();
}

На поле наложено бизнес-правило
( если у пользователя есть право на операцию, то данное поля enabled для него)
rules {
"SatisfactionLevel": {
"EnableLevel1": {
//debugger
ruleType: BusinessRuleModule.enums.RuleType.BINDPARAMETER,
property: BusinessRuleModule.enums.Property.ENABLED,
conditions: [{
leftExpression: {
type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
attribute: "CanEditDateReact"
},
comparisonType: Terrasoft.ComparisonType.EQUAL,
rightExpression: {
type: BusinessRuleModule.enums.ValueType.CONSTANT,
value: true
}
}]
}

}

}

Показать все комментарии

Возникла такая проблема при попытке выбора "проект/стадия/работа" в счете, договоре, операции возникает исключение: "несоответствие типа".
Версия: 3.3.2.116 XRM Professional Services + обновления сервисов для интеграции с 1С (131010)

Нравится

4 комментария

Антон, необходима более подробная информация по проблеме. Попробуйте определить с помощью отладчика, в каком скрипте и в какой его строчке возникает исключение.

// wnd_ProjectDictionaryScript
 
function InitializeGridButtons() {
	var ProjectsfrmButtons = Projects.Window.ComponentsByName('frmButtons');
	ProjectsfrmButtons.IsVisible = Self.Attributes('ShowEditButtons'); // в этой стороке

Self.Attributes('ShowEditButtons') значение дебаггером посмотрите наверняка undefined или null попадает

Замените эту строчку на такую:

ProjectsfrmButtons.IsVisible = !!Self.Attributes('ShowEditButtons');
Показать все комментарии

Здравствуйте!!
Написала скрипт, который при изменениии даты (PaymentDate)в карточке счета (tbl_Invoice)должен суммировать значения полей "Сумма" (Amount) таблицы операций (tbl_Cashflow)и заносить посчитанный результат в поле "Сумма оплаты" (PaymentAmount) таблицы "Счет" (tbl_Invoice).

Код написан внутри скрипта ds_InvoiceScript и выглядет следующим образом:
function DataChange(DataField){
.....
case ('PaymentDate'):
InvoiceScript.OnDataChangeDisabled = true;
try {
var InvoiceID = DataFields.ItemsByName('InvoiceID').Value;
var PaymentAmount = DataFields.ItemsByName('PaymentAmount').Value;
var Summ = GetDetailSummary('tbl_Cashflow', 'InvoiceID', InvoiceID, 'Amount', stSum);
if (IsEmptyValue(Summ))
{
Summ = 0;
}
SetFloatDataFieldWithRound(DataFields.ItemsByName('PaymentAmount'), Summ);
}
finally{
InvoiceScript.OnDataChangeDisabled = false;
}
break;
}
}
При попытке же изменить дату выдается ошибка: "Ошибка выполнения метода 'SelfOnDatasetDataChange".
Помогите, пожалуйста разобраться в чем дело.
С уважением, Гашникова Екатерина

Нравится

2 комментария

Добрый день, Екатерина!

Ошибка в строке:
var InvoiceID = DataFields.ItemsByName('InvoiceID').Value;
правильный вариант:
var InvoiceID = DataFields.ItemsByName('ID').Value;

Проверил, работает.
Желаю успехов!

Спасибо, большое!!!
Все заработало

Показать все комментарии