Добрый день.
До недавнего времени был реализован такой функционал:
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;
}
Но сейчас появилась группа частных продаж и необходимо, чтоб система определяла, пользователь входит в группу частные или корпоративные продажи и в зависимости от этого выставляла стандартные данные.
Необходимо добавить условие:
{
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 группы, но почему-то не получается
Нравится
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; }