Группы пользователей

Добрый день.
До недавнего времени был реализован такой функционал:

function GetOpportunityDefs() {
        if (Assigned(OpportunityDefs)) {
                return OpportunityDefs;
        }
        OpportunityDefs = new Object();
        OpportunityDefs.TypeID='{2BFFE3FC-C07B-4398-A709-8B160975592B}'; //     Корпоративная продажа
        OpportunityDefs.StatusID='{ACE0A224-A004-47FD-A6DA-4E1D2D3C375A}'; //   В работе
        OpportunityDefs.RatingID='{541B04FC-D81B-404B-A965-827CDF2976C4}'; //   Обычный
        return OpportunityDefs;
}

Но сейчас появилась группа частных продаж и необходимо, чтоб система определяла, пользователь входит в группу частные или корпоративные продажи и в зависимости от этого выставляла стандартные данные.
Необходимо добавить условие:

if(Пользователь в группе Корпоративная продажа)
{
        OpportunityDefs.TypeID='{2BFFE3FC-C07B-4398-A709-8B160975592B}'; //     Корпоративная продажа
        OpportunityDefs.StatusID='{ACE0A224-A004-47FD-A6DA-4E1D2D3C375A}'; //   В работе
        OpportunityDefs.RatingID='{541B04FC-D81B-404B-A965-827CDF2976C4}'; //   Обычный
}
if(Пользователь в группе Частная продажа)
{
        OpportunityDefs.TypeID='{4A64A1FD-C7D9-422A-AB37-1C49D49D7D97}'; //     Частная продажа
        OpportunityDefs.StatusID='{ACE0A224-A004-47FD-A6DA-4E1D2D3C375A}'; //   В работе
        OpportunityDefs.RatingID='{541B04FC-D81B-404B-A965-827CDF2976C4}'; //   Обычный
}

Вот как задать такое условие я не могу понять. Пробовал объявить dataset и проверять по id группы, но почему-то не получается

Нравится

11 комментариев
var DatasetGroups = Services.GetSingleItemByUSI('ds_Group');
	DatasetGroups.Open();
	DatasetGroups.Edit();
	var CorpSales = DatasetGroups.Values('ID');
	CorpSales = '{A5D835EE-8A96-4677-B9BA-85A9BB43918E}';
	var Sales = DatasetGroups.Values('ID');
	Sales = '{809BF7A8-FFED-4A7B-9283-9354ABB13874}';
	if(CorpSales){
	OpportunityDefs.TypeID='{2BFFE3FC-C07B-4398-A709-8B160975592B}'; // 	Корпоративная продажа
	OpportunityDefs.StatusID='{ACE0A224-A004-47FD-A6DA-4E1D2D3C375A}'; //	В работе
	OpportunityDefs.RatingID='{541B04FC-D81B-404B-A965-827CDF2976C4}'; //	Обычный
	}
	if(Sales){
	OpportunityDefs.TypeID='{4A64A1FD-C7D9-422A-AB37-1C49D49D7D97}'; // 	Частная продажа
	OpportunityDefs.StatusID='{ACE0A224-A004-47FD-A6DA-4E1D2D3C375A}'; //	В работе
	OpportunityDefs.RatingID='{541B04FC-D81B-404B-A965-827CDF2976C4}'; //	Обычный
	}

Думал так сделать, но оно почему то не фильтрует как надо

	OpportunityDefs = new Object();	
	var DatasetGroups = Services.GetSingleItemByUSI('ds_Group');
	DatasetGroups.Close();
	EnableDatasetFilters(DatasetGroups, false);
	ApplyDatasetFilter(DatasetGroups, 'TypeID', true);
	DatasetGroups.Open();
	DatasetGroups.Edit();
	var CorpSales = DatasetGroups.Values('ID');
	CorpSales == '{A5D835EE-8A96-4677-B9BA-85A9BB43918E}';
	var Sales = DatasetGroups.Values('ID');
	Sales == '{809BF7A8-FFED-4A7B-9283-9354ABB13874}';
	if(CorpSales){
	OpportunityDefs.TypeID='{2BFFE3FC-C07B-4398-A709-8B160975592B}'; // 	Корпоративная продажа
	OpportunityDefs.StatusID='{ACE0A224-A004-47FD-A6DA-4E1D2D3C375A}'; //	В работе
	OpportunityDefs.RatingID='{541B04FC-D81B-404B-A965-827CDF2976C4}'; //	Обычный
	}
	else if(Sales){
	OpportunityDefs.TypeID='{4A64A1FD-C7D9-422A-AB37-1C49D49D7D97}'; // 	Частная продажа
	OpportunityDefs.StatusID='{ACE0A224-A004-47FD-A6DA-4E1D2D3C375A}'; //	В работе
	OpportunityDefs.RatingID='{541B04FC-D81B-404B-A965-827CDF2976C4}'; //	Обычный
	}

Так не получается, как понимаю неверный фильтр

EnableDatasetFilters(DatasetGroups, false);
	ApplyDatasetFilter(DatasetGroups, 'TypeID', true);

Олег, не понял, что у Вас происходит в скрипте выше.
Затык в определении принадлежности пользователя к группе?

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

Попробуйте использовать что-то вроде функции:

function UserInGrop(ContactID, AdminGroupID) {
	var Dataset = GetSingleItemByCode('ds_UserInGroup', 'UserInGrop');
	EnableDatasetFilters(Dataset, false);
	ApplyDatasetFilter(Dataset, 'GroupID', AdminGroupID, true);
	ApplyDatasetFilter(Dataset, 'ContactID', ContactID, true);
	RefreshDataset(Dataset);
	if (Dataset.IsEOF) {
		Dataset.Close();
		return false;
	}
	Dataset.Close();
	return true;
}

где ContactID - ID контакта, AdminGroupID - ID группы в таблице tbl_AdminUnit

Это не то немного.
Есть 2 функции:

function SetDefaultDatasetValues(Dataset) {
	var Today = GetTodayDate();
	var EstimatedStartDate = Today.getVarDate();
	var EstimatedCloseDate = AddDateDays(Today, 7).getVarDate();	
	Dataset.DisableEvents();
	try {
		Dataset.ValAsDateTime('EstimatedStartDate') = EstimatedStartDate;
		Dataset.ValAsDateTime('EstimatedCloseDate') = EstimatedCloseDate;	
		Dataset.ValAsDateTime('StartDate') = EstimatedStartDate;
 
 
		Dataset.Values('OwnerID') = Connector.CurrentUser.ContactID;
		var OpportunityDefs = GetOpportunityDefs();
		var StatusID = OpportunityDefs.StatusID;
		if (!IsEmptyGUID(StatusID)) {
			Dataset.Values('StatusID') = StatusID;
		}
  		var AccountID = CurrentUser.Attributes('AccountID');
		if (!IsEmptyGUID(AccountID)) {
			Dataset.Values('SupplierID') = AccountID;		
		}
		var RatingID = OpportunityDefs.RatingID;
		if (!IsEmptyGUID(RatingID)) {
			Dataset.Values('RatingID') = RatingID;
		}
  		var TypeID = OpportunityDefs.TypeID;
  		if (!IsEmptyGUID(TypeID)) {
			Dataset.Values('TypeID') = TypeID;
 		}
	}
	finally {
		Dataset.EnableEvents();
	}
}
function GetOpportunityDefs() {
	if (Assigned(OpportunityDefs)) {
		return OpportunityDefs;
	}
	OpportunityDefs = new Object();
	var Dataset = GetSingleItemByCode('ds_UserInGroup', 'UserInGrop');
	Dataset.Open();
	var Sales = Dataset.Values('GroupID');
	if(Sales == '{A5D835EE-8A96-4677-B9BA-85A9BB43918E}'){
	OpportunityDefs.TypeID='{2BFFE3FC-C07B-4398-A709-8B160975592B}'; // 	Корпоративная продажа
	OpportunityDefs.StatusID='{ACE0A224-A004-47FD-A6DA-4E1D2D3C375A}'; //	В работе
	OpportunityDefs.RatingID='{541B04FC-D81B-404B-A965-827CDF2976C4}'; //	Обычный
	}
	if(Sales == '{809BF7A8-FFED-4A7B-9283-9354ABB13874}'){
	OpportunityDefs.TypeID='{4A64A1FD-C7D9-422A-AB37-1C49D49D7D97}'; // 	Частная продажа
	OpportunityDefs.StatusID='{ACE0A224-A004-47FD-A6DA-4E1D2D3C375A}'; //	В работе
	OpportunityDefs.RatingID='{541B04FC-D81B-404B-A965-827CDF2976C4}'; //	Обычный
	}
	return OpportunityDefs;
}

2й скрипт не работает так как надо. Надо как то текущую группу пользователя определять, а я вообще по группе делаю проверку.

function GetOpportunityDefs(AdminGroupID) {
	if (Assigned(OpportunityDefs)) {
		return OpportunityDefs;
	}
	OpportunityDefs = new Object();
	var Dataset = Services.GetSingleItemByUSI('ds_UserInGroup');
	Dataset.Open();
	Dataset.Edit();
	var GroupID = Connector.CurrentUser.ContactID;
	Dataset.ValAsGUID('GroupID') = GroupID;
	if(GroupID == '{A5D835EE-8A96-4677-B9BA-85A9BB43918E}'){
	OpportunityDefs.TypeID='{2BFFE3FC-C07B-4398-A709-8B160975592B}'; // 	Корпоративная продажа
	OpportunityDefs.StatusID='{ACE0A224-A004-47FD-A6DA-4E1D2D3C375A}'; //	В работе
	OpportunityDefs.RatingID='{541B04FC-D81B-404B-A965-827CDF2976C4}'; //	Обычный
	}
	if(GroupID == '{809BF7A8-FFED-4A7B-9283-9354ABB13874}'){
	OpportunityDefs.TypeID='{4A64A1FD-C7D9-422A-AB37-1C49D49D7D97}'; // 	Частная продажа
	OpportunityDefs.StatusID='{ACE0A224-A004-47FD-A6DA-4E1D2D3C375A}'; //	В работе
	OpportunityDefs.RatingID='{541B04FC-D81B-404B-A965-827CDF2976C4}'; //	Обычный
	}
	return OpportunityDefs;
}

По идее должно работать, но не работает, что не так подскажите

"Зголич Олег Александрович" написал:var GroupID = Connector.CurrentUser.ContactID;

Олег, Вы получаете ID контакта текущего пользователя и сравниваете с ID
"Зголич Олег Александрович" написал:if(GroupID == '{A5D835EE-8A96-4677-B9BA-85A9BB43918E}'){

Это ID контакта или группы? Что если пользователь входит в несколько групп?

GroupID это ID группы, пользователь может входить только в одну из двух данных групп

и ниже у меня ведь Dataset.Values('GroupID') = GroupID;

Вот функция возвращающая true\false входит ли пользователь UserID в группу GroupID

function IsUserInGroup(UserID, GroupID){
	var ds_UserInGroup = Services.GetNewItemByUSI('ds_UserInGroup');
	ApplyDatasetFilter(ds_UserInGroup, 'UserID', UserID, true);
	ApplyDatasetFilter(ds_UserInGroup, 'GroupID', GroupID, true);
	ds_UserInGroup.Open();
	var Result = !ds_UserInGroup.IsEmptyPage;
	ds_UserInGroup.Close();
	return Result;
}

пример использования

...
var test = IsUserInGroup(Connector.CurrentUser.ID, '{1EBA8CA3-D7D5-4B12-9352-F527A38CBB90}');
...

смотрим входит ли текущий пользователь в группу с указанным ID

подходит?

Спасибо огромное за функцию. Вот конечный результат, все работает просто замечательно.

function IsUserInGroup(UserID, GroupID){
        var ds_UserInGroup = Services.GetNewItemByUSI('ds_UserInGroup');
        ApplyDatasetFilter(ds_UserInGroup, 'UserID', UserID, true);
        ApplyDatasetFilter(ds_UserInGroup, 'GroupID', GroupID, true);
        ds_UserInGroup.Open();
        var Result = !ds_UserInGroup.IsEmptyPage;
        ds_UserInGroup.Close();
        return Result;
}
 
function GetOpportunityDefs(UserID, GroupID) {
	if (Assigned(OpportunityDefs)) {
		return OpportunityDefs;
	}
	OpportunityDefs = new Object();
 
    var CorpSalesID = IsUserInGroup(Connector.CurrentUser.ID, '{A5D835EE-8A96-4677-B9BA-85A9BB43918E}');
    var SalesID = IsUserInGroup(Connector.CurrentUser.ID, '{809BF7A8-FFED-4A7B-9283-9354ABB13874}');
 
	if(CorpSalesID){
	OpportunityDefs.Title='Корпоративная продажа';
	OpportunityDefs.TypeID='{2BFFE3FC-C07B-4398-A709-8B160975592B}'; // 	Корпоративная продажа
	OpportunityDefs.StatusID='{ACE0A224-A004-47FD-A6DA-4E1D2D3C375A}'; //	В работе
	OpportunityDefs.RatingID='{541B04FC-D81B-404B-A965-827CDF2976C4}'; //	Обычный
	}
	if(SalesID){
	OpportunityDefs.Title='Частная продажа';
	OpportunityDefs.TypeID='{4A64A1FD-C7D9-422A-AB37-1C49D49D7D97}'; // 	Частная продажа
	OpportunityDefs.StatusID='{ACE0A224-A004-47FD-A6DA-4E1D2D3C375A}'; //	В работе
	OpportunityDefs.RatingID='{541B04FC-D81B-404B-A965-827CDF2976C4}'; //	Обычный
	}
	return OpportunityDefs;
}
Показать все комментарии