Salesforce 对象(“区域\帐户\帐户”)
这是因为对于以这种方式编写的循环 如果它不起作用(我还没有测试过),您将不得不做一些更复杂的更改 选项2 如果要从主查询中删除子查询,则必须将它们放在execute()中。大概是这样的:Salesforce 对象(“区域\帐户\帐户”),salesforce,apex-code,force.com,Salesforce,Apex Code,Force.com,这是因为对于以这种方式编写的循环 如果它不起作用(我还没有测试过),您将不得不做一些更复杂的更改 选项2 如果要从主查询中删除子查询,则必须将它们放在execute()中。大概是这样的: for(对象s:范围){ 地域主控tm=(地域主控)s; 对于(Territory_User_uuuC uu:[从Territory_User_uuC中选择User_uuC,其中Territory_Master_uuuC=:tm.Id]){ 对于(Territory\u Account\uuuu c aa:[从
for(对象s:范围){
地域主控tm=(地域主控)s;
对于(Territory_User_uuuC uu:[从Territory_User_uuC中选择User_uuC,其中Territory_Master_uuuC=:tm.Id]){
对于(Territory\u Account\uuuu c aa:[从Territory\u Account\uuuu c中选择Account\uuuuuuu c,其中Territory\u Master\uuuuuuuuu c=:tm.Id]){
acctMembers.add(新AccountTeamMember(
AccountId=aa.Account\uu\c,
TeamMemberRole=‘销售代表’,
UserId=uu.User\uu\c)
);
acctSharingRules.add(新帐户共享)(
AccountId=aa.Account\uu\c,
OpportunityAccessLevel='Read',
CaseAccessLevel='Read',
AccountAccessLevel='编辑',
UserOrGroupId=uu.User\uu(c)
);
}
}
}
旁注
acctSharingRules.add(新帐户共享)(
AccountId=aa.Account\uu\c,
OpportunityAccessLevel='Read',
CaseAccessLevel='Read',
AccountAccessLevel='编辑',
UserOrGroupId=uu.User\uu(c)
);
非常有帮助的回答。选项1不幸的表现与我的原始代码一样,但你用选项2将其钉住了。我稍微修改了你的代码以符合逻辑,最终结果完美无瑕。我还考虑了你的旁注。谢谢你的帮助。很高兴帮助你,而且我自己也学到了一些东西:)事实上,我有一个放屁的时刻。忽略读取的大约50K行的位。您最担心的应该是在每个上下文中插入10K行(因此每个
execute()
call);)谢谢你的回答。我稍微重新编码一下就可以让它工作了。
//list to hold new account teams
List<AccountTeamMember> acctMembers = new List<AccountTeamMember>();
//list to hold new account sharing rules
List<AccountShare> acctSharingRules = new List<AccountShare>();
global Database.querylocator start(Database.BatchableContext BC){
String query = 'SELECT (SELECT User__c FROM Territory_Users__r), (SELECT Account__c FROM Territory_Accounts__r) FROM Territory_Master__c';
return Database.getQueryLocator(query);}
global void execute(Database.BatchableContext BC, List<sObject> scope){
for (sObject s : scope) {
Territory_Master__c tm = (Territory_Master__c) s;
Territory_User__c[] userList = tm.getSObjects('Territory_Users__r');
Territory_Account__c[] accountList = tm.getSObjects('Territory_Accounts__r');
if (userList != null && accountList != null){
for(Territory_User__c uu : userList){
for(Territory_Account__c aa: accountList){
AccountTeamMember addRecord = new AccountTeamMember();
addRecord.AccountId = aa.Account__c;
addRecord.TeamMemberRole = 'Sales Rep';
addRecord.UserId = uu.User__c;
acctMembers.add(addRecord);
AccountShare addSharing = new AccountShare();
addSharing.AccountId = aa.Account__c;
addSharing.OpportunityAccessLevel = 'Read';
addSharing.CaseAccessLevel = 'Read';
addSharing.AccountAccessLevel = 'Edit';
addSharing.UserOrGroupId = uu.User__c;
acctSharingRules.add(addSharing);
}
}
}
}
//DML
if(acctMembers.size() > 0){
insert acctMembers;
}
if(acctSharingRules.size() > 0){
insert acctSharingRules;
}
}
global Database.querylocator start(Database.BatchableContext BC){
String query = 'SELECT Id FROM Territory_Master__c';
return Database.getQueryLocator(query);}
global void execute(Database.BatchableContext BC, List<sObject> scope){
for(sObject s : scope){
Territory_Master__c tm = (Territory_Master__c) s;
List<Territory_User__c> userList = [SELECT User__c FROM Territory_User__c WHERE Territory_Master__c = :tm.Id];
List<Territory_Account__c> accountList = [SELECT Account__c FROM Territory_Account__c WHERE Territory_Master__c = :tm.Id];
if (userList != null && accountList != null){
for(Territory_User__c uu : userList){
for(Territory_Account__c aa: accountList){
AccountTeamMember addRecord = new AccountTeamMember();
addRecord.AccountId = aa.Account__c;
addRecord.TeamMemberRole = 'Sales Rep';
addRecord.UserId = uu.User__c;
acctMembers.add(addRecord);
acctSharingRules.add(new AccountShare(
AccountId = aa.Account__c,
OpportunityAccessLevel = 'Read',
CaseAccessLevel = 'Read',
AccountAccessLevel = 'Edit',
UserOrGroupId = uu.User__c)
);
}
}
}
}
//DML
if(acctMembers.size() > 0){
insert acctMembers;
}
if(acctSharingRules.size() > 0){
insert acctSharingRules;
}
}