webForumDet fria alternativet

Grundkurs

2 svar · 488 visningar · startad av Mattias Nordin

Mattias NordinMedlem sedan dec. 20051 046 inlägg
#1

Jag försöker lära mig hur denna kod fungerar. Kan en del om javascript men java har jag väldigt dåligt med kunskaper om.

Det jag vill göra är att förstå logiken i den övre funktionen för att lära mig hur man kopierar ett värde från en tabell och sparar det i ett fält.

Denna fungerar och gör det den ska...

trigger trgMnUpdateOpportunityFieldsFromUserTable on Opportunity (before update, before insert) {

    Set<Id> userIds = new Set<Id>();
    for (Opportunity o : Trigger.new)
        userIds.add(o.OwnerId);
    
    // Query the User table for the associated fields you need and place in a map.
    Map<Id, User> fields = new Map<Id, User>([select name from User where id in :userIds]);
    
    // Now use the map to set the appropriate fields on every Account processed by the trigger.
    for (Opportunity o : Trigger.new) {
        
        // COPY SALES CHANNEL FROM USER TO ACCOUNT
        o.sold_by__c = fields.get(o.OwnerId).name;

    }    

}

Nu vill jag kopiera funktionaliteten och hämta LastModifiedById istället för OwnerId. I övrigt så ska det fungera lika dant.

[B]Set<Id> userIds2 = new Set<Id>();
    for (Opportunity o : Trigger.new)
        userIds2.add(o.LastModifiedById);
    
        // Query the User table for the associated fields you need and place in a map.
        Map<Id, User> fields2 = new Map<Id, User>([select name from User where id in :userIds2]);
    
        // Now use the map to set the appropriate fields on every Account processed by the trigger.
        for (Opportunity o : Trigger.new) {
        
            o.Modified_by_txt__c = fields2.get(o.LastModifiedById).name;
         }    [/B]

Något blir fel när jag försöker ladda upp denna till servern. En test class protesterar.

Men det jag vill börja med är att få förklarat hur detta fungerar. Går det att skriva snyggare kod för att åstakomma samma sak?

:stud

aronMedlem sedan mars 2004487 inlägg
#2

Lite kanske jag förstår jag, men det där ser inte ut som "grundkurs":

Set används för en samling objekt som inte tillåter kopior. Se "The Java Collections Framework" i java.util paketet. For satsen är en for-each sats, för varje Opportunity i Trigger.new läggs OwnerId in i userIds samlingen.

    Set<Id> userIds = new Set<Id>();
    for (Opportunity o : Trigger.new)
        userIds.add(o.OwnerId);

Map är också från "The Java Collections Framework" och är en samling som kopplar ihop två objekt.(nyckel/värde) Det mellan [ och ] tror jag är embeded sql och och ersätts med DBMS-genererad kod vid kompilering. (Hämtar värde i namn-kolumn från User tabel då id-kolumn-värdet finns i userIds) Men jag förstå inte hur den bygger den "mapen" med id+namn då den bara kör select name.

Map<Id, User> fields = new Map<Id, User>([select name from User where id in :userIds]);

Samma for-each loop igen, hämtar namn från "mapen".

    for (Opportunity o : Trigger.new) 
        o.sold_by__c = fields.get(o.OwnerId).name;

Ja det där kanske inte bidrog med nånting "nytt" men så tolkar jag koden, ser inte varför det inte skulle funka med den modifierade koden.

colioneMedlem sedan juni 20013 386 inlägg
#3

Rena spekulationer: om det är en testclass som strular är det antagligen så att den klassen vet om hur instansen av Opportunity ska se ut och därför klagar på att din uppladdade version inte stämmer överens. Vilken klass är det som klagar och vad är det för fel du får (inkl stacktrace).

Genererad på 373 ms · cache AV · v20260730165559-full.f96bc7eb