1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

カレンダーの共有設定を自動化する

Last updated at Posted at 2021-10-10

他のユーザのカレンダーを自分のカレンダーに表示しようと思うと画面からユーザを選んでの設定になります。
これを自動化できないかという質問がありました。

調べてみると同じ質問が見つかりましたが、できないという回答でしたね。
本当なのか?

調べてみるとカレンダーの共有時には
CalendarView オブジェクトが追加されていることが分かりました。
image.png

また、このオブジェクトの説明にはちゃんとApexで追加する例題がありましたね。

Group userGroup = [SELECT Id FROM Group WHERE Name = 'Sales Group' LIMIT 1];
List<Id> groupId = new List<Id>();
groupId.add(userGroup.id);
List<GroupMember> groupMembers = [SELECT UserOrGroupId FROM GroupMember
   WHERE GroupId IN: groupId];

List<CalendarView> calendarViews = new List<CalendarView>();
for (GroupMember groupMember : groupMembers) {
   CalendarView calendarView = new CalendarView(name = 'Opportunity Close
    Dates', SobjectType = 'Opportunity', StartField = 'CloseDate', DisplayField =
    'Name', OwnerId = groupMember.UserOrGroupId);
   calendarViews.add(calendarView);
}
insert calendarViews;

では、これを参考に作りましょう。

public with sharing class addCalendarView {
    
    public static Boolean addRecord() {

        SET<String> targetUserSet = new SET<String>();
        //ここに必要なユーザ名をセットする
        targetUserSet.add('xxxxx@brave-hawk-3moqt3.com');
        targetUserSet.add('cbrown@apblue44210807.com');
        
        List<User> targetUserList = [SELECT Id, UserName,LastName,FirstName FROM User WHERE UserName =: targetUserSet];
        
        List<CalendarView> insertCalendarViewList = new List<CalendarView>();
        for (User u : targetUserList){
            for (User u2 : targetUserList){
                if ( u.Id <> u2.Id) {
                    CalendarView cw = new CalendarView();
                    cw.Name = u.FirstName + ' ' + u.LastName;
                    cw.SobjectType = 'Event';
                    cw.StartField = 'StartDateTime';
                    cw.DisplayField = 'Subject';
                    cw.OwnerId = u2.Id;
                    
                    insertCalendarViewList.add(cw);                    
                }                
            }
            
            
        }
        
        if( insertCalendarViewList.size() > 0) insert insertCalendarViewList;
        
        return true;
    }

}

テストクラス

@isTest
public class addCalendarView_test {

    @isTest
    public static void test01() {
        
        Test.startTest();
        addCalendarView.addRecord();
        Test.stopTest();
        
        List<CalendarView> targetCalendarViewList = [select Id,Name,SobjectType,StartField ,DisplayField,OwnerId FROM CalendarView];
        System.assertEquals(targetCalendarViewList.size(), 2);
    }
}

実際に処理できましたが、何故かMy Calendarsに分類されてしまいました。

image.png

元の質問

カレンダーの共有について

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?