高章伟
2022-02-18 8b5f4c6c281cfa548f92de52c8021e37aa81901e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
public without sharing class InquiryFormHandler extends Oly_TriggerHandler {
        private Map<Id, Inquiry_form__c> newMap;
        private Map<Id, Inquiry_form__c> oldMap;
        private List<Inquiry_form__c> newList;
        private List<Inquiry_form__c> oldList;
 
    public InquiryFormHandler(){
 
         this.newMap = (Map<Id, Inquiry_form__c>) Trigger.newMap;
        this.oldMap = (Map<Id, Inquiry_form__c>) Trigger.oldMap;
        this.newList = (List<Inquiry_form__c>) Trigger.new;
        this.oldList = (List<Inquiry_form__c>) Trigger.old;
        
    }
 
    protected override void beforeInsert() {
        beforeExecute();
    }
    protected override void beforeUpdate() {
        beforeExecute();
    }
 
    protected override void afterInsert() {
        shareToOSCM();
    }
 
     protected override void afterUpdate() {
        shareToOSCM();
    }
     //Before処理
    private void beforeExecute() {
        Map<Id,Inquiry_form__c> accMap = new Map<Id,Inquiry_form__c>();
        for(Inquiry_form__c nObj : newList) {
            List<Account> accList  = [Select Id,OwnerId from Account where Id =: nObj.Department_ID__c];
            for(Account acc : accList){
                nObj.Depart_Owner__c = acc.OwnerId;
            }
        }
    }
    
     // 战略科室的主担当 を取得、Inquiry_form__Shareに設定(Read)
    private void shareToOSCM() {
        //存放用于新增的共享数据
        List<Inquiry_form__Share> insertList = new List<Inquiry_form__Share>();
        //存放(会议询问单id,共享对象)
        Map<Id,Inquiry_form__Share> insertMap = new Map<Id,Inquiry_form__Share>();
        //存放最后需要新增的共享数据
        List<Inquiry_form__Share> lastInsertList = new List<Inquiry_form__Share>();
        //存放已有的相同的共享原因的数据
        List<Id> deleteTargetAOIdList = new List<Id>();
        //存放用于的id
        List<Id> userIdList = new List<Id>();
        // String rowCause = 'Manual';
        //新增一个共享原因
        String rowCause = Schema.Inquiry_form__Share.RowCause.OCSM_Owner_c_User__c;
        System.debug('rowCause:'+rowCause);
        String ownerCause = 'Owner';
        //Apex共有の理由名OCSM_Owner_c_User
        for(Inquiry_form__c nObj : newList) {
            Inquiry_form__c oObj = null;
            System.debug('战略科室担当:'+nObj.Depart_Owner__c);
            if (oldMap != null && oldMap.containsKey(nObj.Id)) {
                oObj = oldMap.get(nObj.Id);
            }
            
 
            if ( nObj.Depart_Owner__c != null && (oObj == null || oObj.Depart_Owner__c != nObj.Depart_Owner__c)) {
                Inquiry_form__Share aos = new Inquiry_form__Share(
                        RowCause = rowCause,
                        ParentId = nObj.Id,
                        UserOrGroupId = nObj.Depart_Owner__c,
                        AccessLevel = 'Edit');
                //存放要新增的共享数据
                insertList.add(aos);
                System.debug('key:'+nObj.Id);
                //存放(会议询问单id,共享对象);
                insertMap.put(nObj.Id,aos);
                //存放用户id 用作检索条件
                userIdList.add(nObj.Depart_Owner__c);
                if (oObj != null && oObj.Depart_Owner__c != nObj.Depart_Owner__c) {
                    deleteTargetAOIdList.add(nObj.Id);
                }
            }
        }
        System.debug('insertList:'+insertList);
        System.debug('insertMap1:'+insertMap);
        System.debug('IDlIST:'+deleteTargetAOIdList);
        // 先 Delete 后 Insert
        if (deleteTargetAOIdList.size() > 0) {
            List<Inquiry_form__Share> deleteList = [SELECT Id
                FROM Inquiry_form__Share
                WHERE RowCause = :rowCause
                  AND ParentId IN :deleteTargetAOIdList
            ];
            delete deleteList;
        }
        //判断需要共享的人  是不是创建人 如果是则说明有一条这个人的owner数据 则不新增
        if (insertMap!= null) {
            List<Inquiry_form__Share> ownerList = [SELECT Id,ParentId,UserOrGroupId
                FROM Inquiry_form__Share
                WHERE RowCause = :ownerCause
                  AND ParentId IN :insertMap.keySet()
                  AND UserOrGroupId IN :userIdList
            ];
            System.debug('ownerList:'+ownerList);
            if(ownerList.size() > 0){
                for( Inquiry_form__Share  inq:ownerList){
                    String id = String.valueOf(inq.ParentId);
                    System.debug('id:'+id);
                    if(insertMap.containsKey(id)){
                        insertMap.remove(inq.ParentId);
                    }
                }
            }
            
        }
        System.debug('insertMap2:'+insertMap);
        
        if(insertMap != null){
                for(Inquiry_form__Share inquiry : insertMap.values()){
                    lastInsertList.add(inquiry);
                }
        }
        
 
        System.debug('共享内容:' +lastInsertList);
        if(lastInsertList.size() > 0){
            insert lastInsertList;
        }
        
    }
}