function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Vanitha ManiVanitha Mani 

Trigger for 3 fields

Hi.
I have a product build link table which links the product build..i wriiten a trigger for it..but i need to link 3 more fields in case system version,system and product.here system_version system and product are formula fields in link object..how to link it to field in case object
thease are the fields in product build link object
User-added imageController:

global with sharing class SVC_Problem_Incident_Ctl extends SVC_Link_Ctl_Helper
{
    /**
     * Class controller
     */
    public SVC_Problem_Incident_Ctl()
    {
        // init class
        init();

        // configure assignments object
        if (sourceObjectName == 'Case') {
            configure('SVC_Incident_Problem_Link__c', 'Problem__c', 'Incident__c');
        } else if (sourceObjectName == 'SVC_Problem__c') {
            configure('SVC_Incident_Problem_Link__c', 'Incident__c', 'Problem__c');
        }

        if(sourceObjectName == 'Case') {
            // setup filters object
            filters = new Case(
                // set default status to empty value ...
                Status                     = '',
                // emulates from date filter ...
                Due_Date__c                = Date.today().addDays(-60),
                // emulate to date filter ...
                Estimated_Shipment_Date__c = Date.today()
            );

            // restrict to system / product only
            List<SVC_Problem__c> productList = [SELECT System__c, Product__c FROM SVC_Problem__c WHERE Id = :targetObjectId];
            if (!productList.isEmpty()) {
                if (!String.isEmpty(productList.get(0).System__c)) {
                    selectedSystemId  = productList.get(0).System__c;
                }
                if (!String.isEmpty(productList.get(0).Product__c)) {
                    selectedProductId = productList.get(0).Product__c;
                }
            }
        }
        if (sourceObjectName == 'SVC_Problem__c') {
            List<Case> caseList = [SELECT Actual_System__c, Actual_Product__c FROM Case WHERE Id = :targetObjectId];
            if (!caseList.isEmpty()) {
                selectedSystemId  = caseList.get(0).Actual_System__c;
                selectedProductId = caseList.get(0).Actual_Product__c;
            }
        }
    }

    /**
     * Method returns data matching search critieria
     *
     * @param  params Map of parameters
     * @return        DataTableWrapper object
     */
    @RemoteAction
    global static DataTableWrapper getData(Map<String, String> params)
    {
        // pagination related items
        Integer startVal         = params != null && params.containsKey('start') ? Integer.valueOf(params.get('start')) : 0;
        Integer lengthVal        = params != null && params.containsKey('length') ? Integer.valueOf(params.get('length')) : 10;

        // sorting related items
        String orderBy           = params != null && params.containsKey('orderBy') ? params.get('orderBy') : 'Id';
        String orderDir          = params != null && params.containsKey('orderDir') ? params.get('orderDir') : 'asc';

        // config related items
        String sourceObjectName  = params != null && params.containsKey('sourceObjectName') ? params.get('sourceObjectName') : null;
        String targetObjectId    = params != null && params.containsKey('targetObjectId') ? params.get('targetObjectId') : null;
        String fieldSetName      = params != null && params.containsKey('fieldSetName') ? params.get('fieldSetName') : 'Search_List_Columns';
        Integer draw             = params != null && params.containsKey('draw') ? Integer.valueOf(params.get('draw')) : 0;

        // search value
        String searchValue       = params != null && params.containsKey('search') ? params.get('search') : null;

        // custom args
        String selectedSystemId  = params != null && params.containsKey('selectedSystemId')  ? params.get('selectedSystemId') : null;
        String selectedProductId = params != null && params.containsKey('selectedProductId') ? params.get('selectedProductId') : null;

        // extract filter values
        String status            = params != null && params.containsKey('status') ? params.get('status') : null;
        DateTime fromDate        = params != null && params.containsKey('fromDate') ? SVC_Link_Ctl_Helper.getDateTime(params.get('fromDate')) : null;
        DateTime toDate          = params != null && params.containsKey('toDate') ? SVC_Link_Ctl_Helper.getDateTime(params.get('toDate')) : null;

        // Initialize values
        Integer totalCount       = 0;
        Integer filteredCount    = 0;
        String query             = '';

        if (sourceObjectName == 'SVC_Problem__c') {
            query = 'SELECT ';
            query += ' count() ';
            query += ' FROM ' + sourceObjectName;
            query += ' WHERE ';
                query += ' Id NOT IN (SELECT Problem__c FROM SVC_Incident_Problem_Link__c WHERE Incident__c = :targetObjectId) ';
            if (!String.isEmpty(selectedSystemId)) {
                query += ' AND ';
                    query += ' System__c = :selectedSystemId';
                if (!String.isEmpty(selectedProductId)) {
                    query += ' AND ';
                        query += ' Product__c = :selectedProductId';
                }
            }
        } else if (sourceObjectName == 'Case') {
            Id recordTypeId   = [SELECT Id FROM RecordType WHERE DeveloperName = 'Systems_Incident'].get(0).Id;

            List<String> statuses;
            SVC_General_Service_Settings__c config = SVC_General_Service_Settings__c.getInstance();
            if (status == 'Open') {
                statuses = config.Incident_Status_As_Open__c != null ? config.Incident_Status_As_Open__c.split(',') : new List<String>();
            } else if (status == 'Closed'){
                statuses = config.Incident_Status_As_Closed__c != null ? config.Incident_Status_As_Closed__c.split(',') : new List<String>();
            }

            query = 'SELECT ';
            query += ' count() ';
            query += ' FROM ' + sourceObjectName;
            query += ' WHERE ';
                query += ' Id NOT IN (SELECT Incident__c FROM SVC_Incident_Problem_Link__c WHERE Problem__c = :targetObjectId) ';
            query += ' AND ';
                query += ' RecordTypeId = :recordTypeId';

            // add custom params
            if (statuses != null && !statuses.isEmpty()) {
                query += ' AND ';
                    query += ' Status IN :statuses';
            }
            if (fromDate != null) {
                fromDate = fromDate.addDays(-1);
                query += ' AND ';
                    query += ' CreatedDate > :fromDate';
            }
            if (toDate != null) {
                toDate = toDate.addDays(1);
                query += ' AND ';
                    query += ' CreatedDate < :toDate';
            }
            if (!String.isBlank(selectedSystemId)) {
                query += ' AND ';
                    query += ' System__c = :selectedSystemId';
                if (!String.isBlank(selectedProductId)) {
                    query += ' AND ';
                        query += ' Product__c = :selectedProductId';
                }
            }
        }

        // 10000 is max supported
        totalCount = Database.countQuery(query + ' LIMIT 10000');

        // add search conditions based on user input
        query += SVC_Link_Ctl_Helper.buildSearchString(sourceObjectName, fieldSetName, searchValue);

        // 10000 is max supported
        filteredCount = Database.countQuery(query + ' LIMIT 10000');

        query  = query.replace('count()', SVC_Link_Ctl_Helper.getColumnList(sourceObjectName, fieldSetName));
        // order by requested params
        query += ' ORDER BY ' + orderBy + ' ' + orderDir + (orderDir == 'asc' ? ' NULLS FIRST' : ' NULLS LAST');
        // add limit equal to number of records per page multiplied by current page number so we limit number of records to be processed
        query += ' LIMIT ' + String.valueOf(startVal == 0 ? lengthVal : (startVal + 1) * lengthVal);

        // intialize standard controller with query
        ApexPages.StandardSetController setCon = new ApexPages.StandardSetController(Database.getQueryLocator(query));
        setCon.setPageSize(lengthVal);

        // set page number
        setCon.setPageNumber((startVal / lengthVal) + 1);

        // create wrapper
        return new DataTableWrapper (
            draw,
            totalCount,
            filteredCount,
            setCon.getRecords()
        );
    }
}
trigger:

trigger SVC_Ticket_Product_Build_LinkTrigger on SVC_Ticket_Product_Build_Link__c (after insert) {
    if (trigger.isAfter && trigger.isInsert) {
        handleAfterInsert(trigger.new);
    }

    private static void handleAfterInsert(SVC_Ticket_Product_Build_Link__c[] ticketProductBuildLinks) {
        removeExistingLinks(ticketProductBuildLinks);
        updateCaseProductBuild(ticketProductBuildLinks);
    }

    private static void removeExistingLinks(SVC_Ticket_Product_Build_Link__c[] ticketProductBuildLinks) {
        Set<ID> caseIds = new Set<ID>();
        Set<ID> linksIds = new Set<ID>();
        for (SVC_Ticket_Product_Build_Link__c ticketProductBuildLink : ticketProductBuildLinks) {
            caseIds.add(ticketProductBuildLink.Ticket__c);
            linksIds.add(ticketProductBuildLink.Id);
        }

        delete [SELECT Id FROM SVC_Ticket_Product_Build_Link__c WHERE Id NOT IN :linksIds AND Ticket__c IN :caseIds];
    }

    private static void updateCaseProductBuild(SVC_Ticket_Product_Build_Link__c[] ticketProductBuildLinks) {
        Case[] ticketsToUpdate = new Case[]{};
        for (SVC_Ticket_Product_Build_Link__c ticketProductBuildLink : ticketProductBuildLinks) {
            Case ticket = new Case(ID=ticketProductBuildLink.Ticket__c, Product_Build__c=ticketProductBuildLink.Product_Build__c);
            ticketsToUpdate.add(ticket);
        }

        upsert ticketsToUpdate;
    }
}

here product build is linked properly..how to link system, system version ,product .