function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
恵美子 大橋恵美子 大橋 

APEXコード

いつもお世話になっております。

下記コードは、VYDEXを使い、3階層になっているカスタムオブジェクトを一つのエクセルから取り込むコードです。
ですが、案件project(親オブジェクト)を取り込んだ際に、所有者がログインユーザーになってしまいます。
こちらは、デフォルトでそのように設定されており、普段は、保存後に変更しております。
出来れば、VYNDEXで取り込んだ時に、担当者=案件所有者になるような式を追加したいです。
どのようなコードを追加したらいいでしょうか?
ご教示ください。

public with sharing class estimateTriggerHandler {

    private MAP<String,Account> accMAP;
    private MAP<String,User> userMAP;
    Private MAP<string,Project__c> projectMAP;
    Private MAP<string,Item__c> itemMAP;
    Private MAP<string,Sale__c> saleMAP;
    private List<Project__c> projectList;
    private List<Item__c> itemList;
    private List<Sale__c> saleList;

    //VyNDEX連携時動作トリガ処理
    public void OnBeforeInsert(List<estimate__c> elist) {
        //初期処理(Map作成)
        createMAP();

        Savepoint sp = Database.setSavepoint();

        try{
            //案件作成
            createProjects(elist);
    
            //アイテム作成
            createItems(elist);
    
            //仕入作成
            createSales(elist);

        }catch(DmlException e){
            throw e;
            Database.rollback(sp);
        }
    }

    private void createProjects(List<estimate__c> elist){
        string key;
        Set<string> projects = new Set<string>();
        projectList = new List<Project__c>();

        //案件設定
        for(estimate__c e : elist){
            //種別=案件の場合のみ処理実行
            if(e.type__c != '案件') continue;

            //クライアント存在チェック
            //if(accMAP.get(e.client__c)==null) continue;

            //案件が登録されているか確認(Vyndexは1行ずつの読込登録するため重複確認を行う)
            key = e.subject__c + e.timestamp__c;
            if(!projectMap.containsKey(key)){
                //未登録案件の場合、案件登録
                Project__c project = New Project__c();
                project.Name = e.subject__c;
                project.client__c = accMAP.get(e.client__c).id;
                project.vyndexKey__c = key;
                projectList.add(project);

                //案件Map追加
                projectMap.put(key, project);
            }
        }

        //登録処理
        if(projectList.size()>0){
            insert projectList;
        }
    }

    private void createItems(List<estimate__c> elist){
        itemList = new List<Item__c>();
        string itemKey;
        string projectKey;

        //アイテム設定
        for(estimate__c e : elist){
            //種別=アイテムの場合のみ処理実行
            if(e.type__c != 'アイテム') continue;

            //クライアント存在チェック
            if(accMAP.get(e.client__c)==null) continue;

            //アイテムが登録されているか確認(Vyndexは1行ずつの読込登録するため重複確認を行う)
            itemKey = e.subject__c + e.project__c + e.item__c + e.itemOther__c + e.size__c + e.sizeOther__c + e.printCnt__c + e.timestamp__c;
            projectKey = e.subject__c + e.timestamp__c;
            if(!itemMap.containsKey(itemKey)){
                Item__c item = New Item__c();
                item.title__c = e.project__c;
                item.item__c = e.item__c;
                item.itemOther__c = e.itemOther__c;
                item.Maisu__c = e.printCnt__c;
                item.size__c = e.size__c;
                item.sizeOther__c = e.sizeOther__c;
                item.project__c = projectMap.get(projectKey).id;
                item.Owner__c = userMAP.get(e.staff__c).id;
                item.vyndexKey__c = itemKey;
                item.color__c = e.color__c;
                itemList.add(item);
    
                //アイテムMap追加
                itemMap.put(itemKey, item);
            }
        }

        //登録処理
        if(itemList.size()>0){
            insert itemList;
        }
    }

    private void createSales(List<estimate__c> elist){
        saleList = new List<Sale__c>(); 
        string itemKey;
        string saleKey;

        //仕入設定
        for(estimate__c e : elist){
            //種別=アイテムの場合のみ処理実行
            if(e.type__c != '仕入') continue;

            //クライアント存在チェック
            if(accMAP.get(e.client__c)==null) continue;
            
                                   
            //仕入が登録されているか確認(Vyndexは1行ずつの読込登録するため重複確認を行う)
            itemKey = e.subject__c + e.project__c + e.item__c + e.itemOther__c + e.size__c + e.sizeOther__c + e.printCnt__c + e.timestamp__c;
            saleKey = e.subject__c + e.project__c + e.sale__c + e.content__c + e.invoiceCnt__c + e.unitPrice__c + e.timestamp__c;
            system.debug('itemKey:'+itemKey);
            system.debug('itemMap:'+itemMap);
            system.debug('saleKey:'+saleKey);
            if(!saleMap.containsKey(saleKey)){
                Sale__c sale = New Sale__c();
                sale.IsUriageSeikyu__c = true;
                sale.costType__c = e.sale__c;
                sale.item__c = itemMap.get(itemKey).id;
                sale.SeikyuSuryo__c  = e.invoiceCnt__c;
                sale.UriTanka__c = e.unitPrice__c;
                sale.vyndexKey__c = saleKey;
                sale.remark__c = e.Note__c;
                sale.ShireKingaku__c = e.cost__c;
                sale.date_seikyuusyo__c = e.date_seikyuusyo__c;
                sale.otherSuplier__c = e.siirekaisya__c;
                saleList.add(sale);
    
                //仕入Map追加
                saleMap.put(saleKey, sale);
            }
        }

        //登録処理
        if(saleList.size()>0){
            insert saleList;
        }
    }
    
    private void createMAP() {
        //クライアントMAP作成(KEY : 会社名)
         RecordType rt = getRecodeType('Account','ClientRecordType'); 
        accMAP = New MAP<String,Account>();
        List<Account> accList = [Select id, Name From Account Where recordTypeID =: rt.id];
        for(Account acc : accList){
            accMap.put(acc.Name, acc);
        }
 
        
        //担当者MAP作成(KEY : ユーザ名)
        userMAP = New MAP<String,User>();
        List<User> userList = [Select id, Name, Alias From User];
        for(User usr : userList){
            userMap.put(usr.Name, usr);
        }

        //案件MAP作成(KEY : 案件名 + 作成日時)
        projectMAP = New MAP<string,Project__c>(); 
        List<Project__c> projectList = [Select id, Name, vyndexKey__c From Project__c Where vyndexKey__c != ''];
        for(Project__c pj : projectList){
            projectMAP.put(pj.vyndexKey__c, pj);
        }
        
        //アイテムMAP作成(KEY : アイテム名  + サイズ + 印刷枚数 + 作成日時)
        itemMAP = New MAP<string, Item__c>();
        List<Item__c> itemList = [Select id, Name, vyndexKey__c From Item__c Where vyndexKey__c != ''];
        for(Item__c item : itemList){
            itemMAP.put(item.vyndexKey__c, item);
        }

        //仕入MAP作成(KEY : 仕入名  + 請求数量 + 単価 + 作成日時)
        saleMAP = New MAP<string, Sale__c>();
        List<Sale__c> saleList = [Select id, Name, vyndexKey__c From Sale__c Where vyndexKey__c != ''];
        for(Sale__c sale : saleList){
            saleMAP.put(sale.vyndexKey__c, sale);
        }
    }
     
    //レコードタイプ取得関数
    private RecordType getRecodeType(String objectName, String devName) {
        List<RecordType> listRecordType = 
            [
                select  Id,
                        Name,
                        DeveloperName,
                        IsActive 
                from    RecordType
                where   IsActive = true
                  and   SobjectType =: objectName
                  and   DeveloperName =: devName
            ];
        if (!listRecordType.isEmpty()) {
            return listRecordType[0];
        }
        return null;
    }

}
Taiki YoshikawaTaiki Yoshikawa
具体的な処理については追い切れていないのですが、所有者、OwnerIdの項目に登録したいユーザのIDをセットすることで任意の所有者を登録できます。
恵美子 大橋恵美子 大橋
ご確認頂きありがとうございます。
説明不足で申し訳ございません。
案件所有者(projectOwner)=担当者(e.staff__c)にしたいのですが、どこに、どのようなコードを追加したらいいでしょうか。
ご教示頂ければ幸いです。
Taiki YoshikawaTaiki Yoshikawa
下記のコードの辺りに差し込む形で動きそうに思います。
project.Name = e.subject__c;
Taiki YoshikawaTaiki Yoshikawa
Name はOwnerIdでセットする値は対象の項目です。
恵美子 大橋恵美子 大橋
ありがとうございます。
登録出来ました。
助かりました。