You need to sign in to do that
Don't have an account?
恵美子 大橋
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;
}
}
下記コードは、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;
}
}
説明不足で申し訳ございません。
案件所有者(projectOwner)=担当者(e.staff__c)にしたいのですが、どこに、どのようなコードを追加したらいいでしょうか。
ご教示頂ければ幸いです。
project.Name = e.subject__c;
登録出来ました。
助かりました。