You need to sign in to do that
Don't have an account?
Vanitha 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
Controller:
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 .
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
Controller:
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 .