trigger ReportTrigger on Report__c (before insert, before update) { 
 | 
    // ---------------------------------------------------------------------- 
 | 
    // ここより、承認プロセス用に、经理、部长、总监を更新する 
 | 
    // ---------------------------------------------------------------------- 
 | 
    if (Trigger.isBefore) { 
 | 
        // 申請中かどうかのチェック 
 | 
        List<Id> copyUserIds = new List<Id>();                      // 件数は Trigger.New と同じ 
 | 
        List<Report__c> newList = new List<Report__c>();    // 件数は Trigger.New と同じ 
 | 
        Report__c old = null; 
 | 
        for (Report__c local : Trigger.New) { 
 | 
            if ( Trigger.isUpdate) { 
 | 
                old = Trigger.oldMap.get(local.Id); 
 | 
            } 
 | 
            // 申請中になったとき、ログインユーザーからプレセス用の上司を設定 
 | 
            if (Trigger.isInsert 
 | 
                    || (Trigger.isUpdate && old.Status__c != local.Status__c && local.Status__c == '申请中') 
 | 
                    || (Trigger.isUpdate && old.OwnerId != local.OwnerId) 
 | 
            ) { 
 | 
                newList.add(local); 
 | 
                if (Trigger.isInsert || (Trigger.isUpdate && old.OwnerId != local.OwnerId)) { 
 | 
                    copyUserIds.add(local.OwnerId); 
 | 
                } else { 
 | 
                    copyUserIds.add(UserInfo.getUserId()); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        Map<Id, User> copyUserMap = new Map<Id, User>([ 
 | 
            SELECT Id, Name, SalesManager__c, BuchangApprovalManagerSales__c, JingliApprovalManager__c, BuchangApprovalManager__c, ZongjianApprovalManager__c FROM User WHERE Id IN :copyUserIds 
 | 
        ]); 
 | 
        for (Integer i = 0; i < copyUserIds.size(); i++) { 
 | 
            Report__c local = newList[i]; 
 | 
            User loginUser = copyUserMap.get(copyUserIds[i]); 
 | 
            local.SalesManager__c = loginUser.SalesManager__c == null ? loginUser.Id : loginUser.SalesManager__c; 
 | 
            local.BuchangApprovalManagerSales__c = loginUser.BuchangApprovalManagerSales__c == null ? loginUser.Id : loginUser.BuchangApprovalManagerSales__c; 
 | 
            local.JingliApprovalManager__c = loginUser.JingliApprovalManager__c == null ? loginUser.Id : loginUser.JingliApprovalManager__c; 
 | 
            local.BuchangApprovalManager__c = loginUser.BuchangApprovalManager__c == null ? loginUser.Id : loginUser.BuchangApprovalManager__c; 
 | 
            local.ZongjianApprovalManager__c = loginUser.ZongjianApprovalManager__c == null ? loginUser.Id : loginUser.ZongjianApprovalManager__c; 
 | 
        } 
 | 
    } 
 | 
    // ---------------------------------------------------------------------- 
 | 
    // ここまで、承認プロセス用に、经理、总监を更新する 
 | 
    // ---------------------------------------------------------------------- 
 | 
} 
 |