• 恵美子 大橋
  • NEWBIE
  • 0 Points
  • Member since 2019

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 6
    Questions
  • 5
    Replies
いつもお世話になっております。

今までClassicで使用していたJavaScript ボタンがlightningでは使用出来ない為、下記URLボタンを作成いたしました。
-------------------------------------------------------------
/apex/averageInputForm?id={!Item__c.Id}&pId={!Item__c.projectId__c}
-----------------------------------------------------------------
こちらにJavaScript ボタンで設定しておりました条件(alert)を追加する為のコードをご教示頂きたいです。
JavaScriptのコードは以下の通りです。
-----------------------------------------------------------
var flg1 = {!Item__c.jointFlg__c};

if(flg1==false){
    alert("合同案件のアイテムではないので按分を行えません");
}
else if({!ISNULL(Item__c.Maisu__c)}){
        alert("印刷枚数が入力されていません");
}
else{
   window.location.href = "/apex/averageInputForm?id={!Item__c.Id}&pId={!Item__c.projectId__c}";
}
 
お世話になっております。
以前も質問させて頂きましたが、リストビューのレコードに対して一括アクションを実行するための「JavaScriptボタン」を、lightningでも使用するには「カスタム Visualforce ボタン」を作成するしかないという事のようです。(設定コンバータでは変換できませんでした)。
javaのコードは以下の通りです。
こちらを、lightningでも使用出来るコードをご教示いただけますと幸いです。

{!REQUIRESCRIPT('/soap/ajax/28.0/connection.js')}
{!REQUIRESCRIPT('/soap/ajax/28.0/apex.js')}

var chk = sforce.apex.execute( 'GrobalClass', 'checkSeikyuUser',{});

if(chk == "false"){
alert("権限がありません。");
}
else{

var records = {!GETRECORDIDS( $ObjectType.Item__c )};
var result = sforce.apex.execute( 'invoiceController', 'validate', {idList:records});

var r = eval("("+ result +")");

if(r.isSuccess==false){
alert(r.mess);
}else{
window.open("/apex/invoiceOnly?id="+records, width=800, height=600);
}
}

 

日頃より大変お世話になっております。
下記のようなエラーが出て困っております。

対応として出来る限り外部ID項目に変更致しましたが、数式項目が引っ掛かているようで困っております。

サポートからは、下記の通りAPEXのWhere句を変更するよう言われておりますが、どう変えたらいいか分かりません。
誰か助けてください。
(現在のWhere句)
Where NyukoBango__c = :nyukouNo
    ※数式項目です。

(エラー解消が見込めるWhere句サンプル)
Where NyukoBangoEigyoBango__c = :<新規バインド変数>
AND NyukoBangoDate__c = :<新規バインド変数>
AND NyukoBangoRenban__c = :<新規バインド変数>
AND NyukoBango__c = :nyukouNo

(エラー内容)
Apex script unhandled trigger exception by user/organization: 00510000000v3ki/00D10000000KCEI ItemTrigger: execution of AfterUpdate caused by: System.QueryException: Non-selective query against large object type (more than 200000 rows). Consider an indexed filter or contact salesforce.com about custom indexing. Even if a field is indexed a filter might still not be selective when: 1. The filter value includes null (for instance binding with a list that contains null) 2. Data skew exists whereby the number of matching rows is very large (for instance, filtering for a particular foreign key value that occurs many times) Class.ItemTriggerHandler.setReOutputInfo: line 534, column 1 Class.ItemTriggerHandler.OnAfterUpdate: line 56, column 1 Trigger.ItemTrigger: line 20, column 1

リストビューのレコードに対して一括アクションを実行するためのJavaScriptボタンがございます。
コードは以下の通りです。
こちらをlightningでも使用する方法をご存知の方がいらっしゃいましたらご教示頂きたく存じます。

{!REQUIRESCRIPT('/soap/ajax/28.0/connection.js')}
{!REQUIRESCRIPT('/soap/ajax/28.0/apex.js')}

var chk = sforce.apex.execute( 'GrobalClass', 'checkSeikyuUser',{});

if(chk == "false"){
alert("権限がありません。");
}
else{

var records = {!GETRECORDIDS( $ObjectType.Item__c )};
var result = sforce.apex.execute( 'invoiceController', 'validate', {idList:records});

var r = eval("("+ result +")");

if(r.isSuccess==false){
alert(r.mess);
}else{
window.open("/apex/invoiceOnly?id="+records, width=800, height=600);
}
}
いつもお世話になっております。

下記コードは、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;
    }

}
sale.otherSuplier__c = e.siirekaisya__c;
上記コードは別々のカスタムオブジェクトの項目(参照項目)です。
参照先は取引先です。
文字で入力し、IDに変換するコードを教えてください。
お世話になっております。
以前も質問させて頂きましたが、リストビューのレコードに対して一括アクションを実行するための「JavaScriptボタン」を、lightningでも使用するには「カスタム Visualforce ボタン」を作成するしかないという事のようです。(設定コンバータでは変換できませんでした)。
javaのコードは以下の通りです。
こちらを、lightningでも使用出来るコードをご教示いただけますと幸いです。

{!REQUIRESCRIPT('/soap/ajax/28.0/connection.js')}
{!REQUIRESCRIPT('/soap/ajax/28.0/apex.js')}

var chk = sforce.apex.execute( 'GrobalClass', 'checkSeikyuUser',{});

if(chk == "false"){
alert("権限がありません。");
}
else{

var records = {!GETRECORDIDS( $ObjectType.Item__c )};
var result = sforce.apex.execute( 'invoiceController', 'validate', {idList:records});

var r = eval("("+ result +")");

if(r.isSuccess==false){
alert(r.mess);
}else{
window.open("/apex/invoiceOnly?id="+records, width=800, height=600);
}
}

 
リストビューのレコードに対して一括アクションを実行するためのJavaScriptボタンがございます。
コードは以下の通りです。
こちらをlightningでも使用する方法をご存知の方がいらっしゃいましたらご教示頂きたく存じます。

{!REQUIRESCRIPT('/soap/ajax/28.0/connection.js')}
{!REQUIRESCRIPT('/soap/ajax/28.0/apex.js')}

var chk = sforce.apex.execute( 'GrobalClass', 'checkSeikyuUser',{});

if(chk == "false"){
alert("権限がありません。");
}
else{

var records = {!GETRECORDIDS( $ObjectType.Item__c )};
var result = sforce.apex.execute( 'invoiceController', 'validate', {idList:records});

var r = eval("("+ result +")");

if(r.isSuccess==false){
alert(r.mess);
}else{
window.open("/apex/invoiceOnly?id="+records, width=800, height=600);
}
}
いつもお世話になっております。

下記コードは、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;
    }

}
sale.otherSuplier__c = e.siirekaisya__c;
上記コードは別々のカスタムオブジェクトの項目(参照項目)です。
参照先は取引先です。
文字で入力し、IDに変換するコードを教えてください。