Triggers 地图中的顶点地图

Triggers 地图中的顶点地图,triggers,salesforce,apex-code,Triggers,Salesforce,Apex Code,我需要在我的触发器中的一个映射中有一个映射。我知道最初如何构建地图,正如文件所述: Map addendums=新映射{} 然而,我在给多维贴图赋值时遇到了困难。通常我会使用.put将值放入一维映射中。也许我仍然应该使用这个函数,但我一辈子都搞不懂正确的语法 我尝试了以下不起作用的方法: 附录c,附录Id,附录 附录c,附录Id,附录 有人知道怎么做吗 谢谢 我找到了这样做的方法,尽管我不确定这是否是最有效的方法。因此,如果您有更好的解决方案,请让我知道,我会将解决方案贷记转移给您 我所做的是分

我需要在我的触发器中的一个映射中有一个映射。我知道最初如何构建地图,正如文件所述:

Map addendums=新映射{}

然而,我在给多维贴图赋值时遇到了困难。通常我会使用.put将值放入一维映射中。也许我仍然应该使用这个函数,但我一辈子都搞不懂正确的语法

我尝试了以下不起作用的方法:

附录c,附录Id,附录

附录c,附录Id,附录

有人知道怎么做吗


谢谢

我找到了这样做的方法,尽管我不确定这是否是最有效的方法。因此,如果您有更好的解决方案,请让我知道,我会将解决方案贷记转移给您

我所做的是分配第一张地图,然后将该地图放在最终地图中

// This line creates the map in the proper format
Map<Id,Map<Id,Addendum__c>> addendums = new Map<Id,Map<Id,Addendum__c>>{};

// This for loop goes through each addendum and first places it into a single dimension map.  
// Once that map is created, it is placed into the final multi-dimensional
for(Addendum__c addendum : [SELECT Id,Opportunity__c FROM Addendum__c WHERE Opportunity__c IN :oppBatch]){
    Map<Id,Addendum__c> thisAddendum = new Map<Id,Addendum__c>{ addendum.Id => addendum };
    addendums.put(addendum.Opportunity__c,thisAddendum);
}

我找到了这样做的方法,尽管我不确定这是否是最有效的方法。因此,如果您有更好的解决方案,请让我知道,我会将解决方案贷记转移给您

我所做的是分配第一张地图,然后将该地图放在最终地图中

// This line creates the map in the proper format
Map<Id,Map<Id,Addendum__c>> addendums = new Map<Id,Map<Id,Addendum__c>>{};

// This for loop goes through each addendum and first places it into a single dimension map.  
// Once that map is created, it is placed into the final multi-dimensional
for(Addendum__c addendum : [SELECT Id,Opportunity__c FROM Addendum__c WHERE Opportunity__c IN :oppBatch]){
    Map<Id,Addendum__c> thisAddendum = new Map<Id,Addendum__c>{ addendum.Id => addendum };
    addendums.put(addendum.Opportunity__c,thisAddendum);
}

Josh提供的方法效果很好。如果要删除一行代码,可以使用以下方法:

Map<Id, Map<Id,Addendum__c>> addendums = new Map<Id,Map<Id,Addendum__c>>();
for(Addendum__c addendum : [SELECT Id,Opportunity__c FROM Addendum__c WHERE Opportunity__c IN :oppBatch]){
    addendums.put(addendum.opportunity__c, new Map<Id, Addendum__c>{addendum.id => addendum});
}

我不知道还有比这个更有效的方法。

Josh提供的方法效果很好。如果要删除一行代码,可以使用以下方法:

Map<Id, Map<Id,Addendum__c>> addendums = new Map<Id,Map<Id,Addendum__c>>();
for(Addendum__c addendum : [SELECT Id,Opportunity__c FROM Addendum__c WHERE Opportunity__c IN :oppBatch]){
    addendums.put(addendum.opportunity__c, new Map<Id, Addendum__c>{addendum.id => addendum});
}

我不知道还有比这更有效的方法。

使用示例代码会有效,当然,第二级地图只能有一个条目,如果您需要更多条目,那么下面的代码将为您提供帮助:

// This line creates the map in the proper format
Map<Id,Map<Id,Addendum__c>> addendums = new Map<Id,Map<Id,Addendum__c>>{};

// This for loop goes through each addendum and first places it into a single dimension map.  
// Once that map is created, it is placed into the final multi-dimensional
for(Addendum__c addendum : [SELECT Id,Opportunity__c FROM Addendum__c WHERE Opportunity__c IN :oppBatch])
{
    if(addendums.get(addendum.Opportunity__c) == null)
    {
        addendums.put(addendum.Opportunity__c, new Map<Id, Addendum__c>{addendum.Id => addendum);
    }
    else
    {
        addendums.get(addendum.Opportunity__c).put(addendum.Id, addendum);
    }
}

正如您所看到的,这将使用“在第一个地图上获取”来获取正确的第二级地图,我们希望在其中添加附录。

使用示例代码将起作用,当然第二级地图只能有一个条目,如果您处于可能需要更多条目的情况下,则下面的代码将为您提供帮助:

// This line creates the map in the proper format
Map<Id,Map<Id,Addendum__c>> addendums = new Map<Id,Map<Id,Addendum__c>>{};

// This for loop goes through each addendum and first places it into a single dimension map.  
// Once that map is created, it is placed into the final multi-dimensional
for(Addendum__c addendum : [SELECT Id,Opportunity__c FROM Addendum__c WHERE Opportunity__c IN :oppBatch])
{
    if(addendums.get(addendum.Opportunity__c) == null)
    {
        addendums.put(addendum.Opportunity__c, new Map<Id, Addendum__c>{addendum.Id => addendum);
    }
    else
    {
        addendums.get(addendum.Opportunity__c).put(addendum.Id, addendum);
    }
}

正如您所见,这使用“在第一张地图上获取”来获得正确的二级地图,我们希望在其中添加一个附录。

感谢您的回复,我想我只需将其分开,以便在一年后不可避免地必须返回时更容易阅读。感谢您的回复,我想我会把它拆开,这样当我不可避免地要在一年后重温它时,它更容易阅读。