Доброго дня.
Задача такая:
Есть запись у кастомного объекта. Юзер "A" её создал и может что угодно сделать.
Есть юзер "B" у которого профили настроены так, что он ее видеть не может.
Задача, сделать так что бы он мог ее увидеть и изменить.
Знаю что можно заюзать вот это.
Но вот не совсем понимаю как это сделать на деле(
По сути надо зинсертить SharingRecord, в которой будет указано что данный юзер может ее редактировать.
А вот как правильно это сделать,я не совсем догоняю.
Доброго дня. Задача такая: Есть запись у кастомного объекта. Юзер "A" её создал и может что угодно сделать. Есть юзер "B" у которого профили настроены так, что он ее видеть не может. Задача, сделать так что бы он мог ее увидеть и изменить. Знаю что можно заюзать [url=http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_bulk_sharing_creating_with_apex.htm]вот это[/url]. Но вот не совсем понимаю как это сделать на деле( По сути надо зинсертить SharingRecord, в которой будет указано что данный юзер может ее редактировать. А вот как правильно это сделать,я не совсем догоняю.
может мне кажется, но твоя проблема решается проще.
Видимость записей (а не их полей) определяется:
(1) OWD - организайшн-вайд дефолт - тут как понимаю объект Приватный.
(2) Ролями пользователя - вертикальная видимость - если включена
(4) Шеринг рулсами которые определяет ЛОгику видимости и к какой категории юзеров (по роли, группе, индивидуально)эта логиика применяется (если у записи рек тайп "Восток" - то видят все кто в роли "сотрудники Восток").
есть еще более тонкие настройки, в том числе какие новые настройки Персонал шеринг (что-то вроде того).
на некоторых стандартных объектая есть спец кнопки связынные с шерингом - они описывают типичные ситуации шеринга.
ВОзможно тебе просто нужно настроить Роли и шеринг рулсы? об этом есть и Верхаус и в Рекрутинг ворбуках, плюс тоже самое еще раз в Секюрити воркбкук.
[quote="Виктор Сенько"]Есть юзер "B" у которого профили настроены так, что он ее видеть не может. [/quote] может мне кажется, но твоя проблема решается проще. Видимость записей (а не их полей) определяется: (1) OWD - организайшн-вайд дефолт - тут как понимаю объект Приватный. (2) Ролями пользователя - вертикальная видимость - если включена (4) Шеринг рулсами которые определяет ЛОгику видимости и к какой категории юзеров (по роли, группе, индивидуально)эта логиика применяется (если у записи рек тайп "Восток" - то видят все кто в роли "сотрудники Восток"). есть еще более тонкие настройки, в том числе какие новые настройки Персонал шеринг (что-то вроде того). на некоторых стандартных объектая есть спец кнопки связынные с шерингом - они описывают типичные ситуации шеринга. ВОзможно тебе просто нужно настроить Роли и шеринг рулсы? об этом есть и Верхаус и в Рекрутинг ворбуках, плюс тоже самое еще раз в Секюрити воркбкук.
Настройки шаринга и приватности не подойдут((
Надо заюзать именно это "таблицу шаринга". Что бы открыть доступ именно для этой записи, и только для нее.
Настройки шаринга и приватности не подойдут(( Надо заюзать именно это "таблицу шаринга". Что бы открыть доступ именно для этой записи, и только для нее.
Опишу цепочку.
Есть Юзер A с ролью Role и профилем Profile
Есть Юзер B с ролью Role2 и профилем Profile2
Юзер А создает запись кастомного обьекта.
Юзер В должен видеть это запись, который создал Юзер A, но не должен видеть другие записи созданные юзерами с таким же ролью Role и профилем Profile.
Тоесть посути надо расшарить определённую запись на определённого юзера.
Опишу цепочку. Есть Юзер A с ролью Role и профилем Profile Есть Юзер B с ролью Role2 и профилем Profile2 Юзер А создает запись кастомного обьекта. Юзер В должен видеть это запись, который создал Юзер A, но не должен видеть другие записи созданные юзерами с таким же ролью Role и профилем Profile. Тоесть посути надо расшарить определённую запись на определённого юзера.
:):):):):):):):):):):):):)
И опять отвечу сам себе) Все оказалось очень легко!!!
Coaching_Form__Share hiringManagerShare = new Coaching_Form__Share();
hiringManagerShare.ParentId = 'a0mc0000002L6cy'; // ИД записи
hiringManagerShare.UserOrGroupId = '005E0000000dlL3'; // ИД юзера
hiringManagerShare.AccessLevel = 'edit'; // Что он может для этой записи!
Database.insert(hiringManagerShare,false);
:):):):):):):):):):):):):) И опять отвечу сам себе) Все оказалось очень легко!!! [code]Coaching_Form__Share hiringManagerShare = new Coaching_Form__Share(); hiringManagerShare.ParentId = 'a0mc0000002L6cy'; // ИД записи hiringManagerShare.UserOrGroupId = '005E0000000dlL3'; // ИД юзера hiringManagerShare.AccessLevel = 'edit'; // Что он может для этой записи! Database.insert(hiringManagerShare,false);[/code]
ну это что-то новое для меня.
АйДи наверное лучше кверить по какомуто признаку (имя пользователя, название записи) - этот признак, по которому кверится, можно даже вынести в Кастом сеттинг если предполагается, что возможно изменения. Тогда код будет даже "гибчее".
PS: из условия примера выше мне показалось, что речь идет об единичном случае шеринга (поэтому я упомянул, что что АйДи лучшенужно кверить и прочее). Но наверное я ошибаюсь, наверное такой "програмный" шеринг делается для описание какой-то уникальной логики шеринга для всех вновь создаваемых записей, на которые эта логика распространияется.
Тогда такой код пойдет в тригер. Я правильно понял?
[quote="Виктор Сенько"]Coaching_Form__Share hiringManagerShare = new Coaching_Form__Share();[/quote] ну это что-то новое для меня. АйДи наверное лучше кверить по какомуто признаку (имя пользователя, название записи) - этот признак, по которому кверится, можно даже вынести в Кастом сеттинг если предполагается, что возможно изменения. Тогда код будет даже "гибчее". PS: из условия примера выше мне показалось, что речь идет об единичном случае шеринга (поэтому я упомянул, что что АйДи лучшенужно кверить и прочее). Но наверное я ошибаюсь, наверное такой "програмный" шеринг делается для описание какой-то уникальной логики шеринга для всех вновь создаваемых записей, на которые эта логика распространияется. Тогда такой код пойдет в тригер. Я правильно понял?
Очень распространенная задача:
решается с помощью sharing. Для объекта естественно должно стоять Private.
(отдельный вопрос роль не/подчиненная и шарится ли записать автоматом по иерархии ролей)
если запись не шарится по иерархии, то запись созданная A не будет видна B - чтобы расширить есть 3 пути:
1. кнопка Shanring на Standard layout
2. Sharing Rules
3. code sharing
первые 2 понятны, третий вот пример:
MyObject__Share MyObjectShare = new MyObject__Share ();
MyObjectShare.ParentId = <record.Id>;
MyObjectShare.UserOrGroupId = <user.Id>;
MyObjectShare.AccessLevel = <level>;
insert MyObjectShare;
Очень распространенная задача: решается с помощью sharing. Для объекта естественно должно стоять Private. (отдельный вопрос роль не/подчиненная и шарится ли записать автоматом по иерархии ролей) если запись не шарится по иерархии, то запись созданная A не будет видна B - чтобы расширить есть 3 пути: 1. кнопка Shanring на Standard layout 2. Sharing Rules 3. code sharing первые 2 понятны, третий вот пример: [code] MyObject__Share MyObjectShare = new MyObject__Share (); MyObjectShare.ParentId = <record.Id>; MyObjectShare.UserOrGroupId = <user.Id>; MyObjectShare.AccessLevel = <level>; insert MyObjectShare; [/code] где, <record.Id> id записи которую надо расшарить, <user.Id> - с кем надо расшарить, <level> - уровень доступа (read, edit). [quote="Виктор Сенько"]Есть юзер "B" у которого профили настроены так, что он ее видеть не может. [/quote] Как раз тут неправильно. B тоже должен видеть объект в профиле. Иначе смысла от sharing никакого не будет.
[quote]Как раз тут неправильно. B тоже должен видеть объект в профиле. Иначе смысла от sharing никакого не будет.[/quote] Да, немного ошибся. [quote]Тогда такой код пойдет в тригер. Я правильно понял?[/quote] Да именно туда и ушел)