99re热视频这里只精品,久久久天堂国产精品女人,国产av一区二区三区,久久久精品成人免费看片,99久久精品免费看国产一区二区三区

Apex - SOQL

2019-10-26 16:26 更新

SOQL為了使用SFDC數(shù)據(jù)庫(kù)設(shè)計(jì)的 Salesforce 對(duì)象查詢(xún)語(yǔ)言。它可以在單個(gè)sObject中在給定標(biāo)準(zhǔn)上搜索記錄。


像SOSL一樣,它不能搜索多個(gè)對(duì)象,但它支持嵌套查詢(xún)。


SOQL示例

想想我們正在進(jìn)行的化學(xué)公司的例子。 假設(shè),我們想有一個(gè)今天創(chuàng)建的記錄列表,其客戶(hù)名稱(chēng)不是'test'。 在這種情況下,我們將必須使用如下所示的SOQL查詢(xún):


例如:

//fetching the Records via SOQL
List<apex_invoice__c> InvoiceList = new List<apex_invoice__c>();
InvoiceList = [SELECT Id, Name, APEX_Customer__r.Name, APEX_Status__c FROM APEX_Invoice__c WHERE createdDate = today AND APEX_Customer__r.Name != 'Test'];//SOQL query for given  criteria

//Printing the fetched records
System.debug('We have total '+InvoiceList.size()+' Records in List');
for (APEX_Invoice__c objInvoice: InvoiceList) {	
	System.debug('Record Value is '+objInvoice);//Printing the Record fetched
}

您可以通過(guò)開(kāi)發(fā)人員控制臺(tái)中的查詢(xún)編輯器運(yùn)行SOQL查詢(xún),如下所示。

在開(kāi)發(fā)人員控制臺(tái)中運(yùn)行以下查詢(xún)。 搜索今天創(chuàng)建的發(fā)票記錄。

SELECT Id, Name, APEX_Customer__r.Name, APEX_Status__c FROM APEX_Invoice__c WHERE createdDate = today

您必須選擇要為其設(shè)置值的字段,否則可能會(huì)導(dǎo)致運(yùn)行時(shí)錯(cuò)誤。


遍歷關(guān)系字段

這是SFDC中最重要的部分之一,因?yàn)楹芏鄷r(shí)候我們需要遍歷父子對(duì)象關(guān)系。

此外,可能會(huì)需要在Database中插入兩個(gè)關(guān)聯(lián)對(duì)象記錄。 例如,Invoice對(duì)象與Customer對(duì)象具有關(guān)系,因此一個(gè)客戶(hù)可以有多個(gè)發(fā)票。

假設(shè)您正在創(chuàng)建發(fā)票,然后您想將此發(fā)票與客戶(hù)相關(guān)聯(lián)。 您可以使用以下代碼實(shí)現(xiàn)此功能:

//Now create the invoice record and relate it with the Customer object 
//Before executing this, please create a Customer Records with Name 'Customer Creation Test'
APEX_Invoice__c objInvoice = new APEX_Invoice__c();

//Relating Invoice to customer via id field of Customer object
objInvoice.APEX_Customer__c = [SELECT id FROM APEX_Customer__c WHERE Name = 'Customer Creation Test' LIMIT 1].id;
objInvoice.APEX_Status__c = 'Pending';
insert objInvoice;//Creating Invoice
System.debug('Newly Created Invoice'+objInvoice);//Newly creted invoice

在開(kāi)發(fā)者控制臺(tái)中執(zhí)行此代碼段。 執(zhí)行后,從開(kāi)發(fā)人員控制臺(tái)復(fù)制發(fā)票的Id,然后在SFDC中打開(kāi)它,如下所示。 您可以看到父記錄已分配給發(fā)票記錄,如下所示。


遍歷關(guān)系字段


獲取子記錄

讓我們舉一個(gè)例子,我們希望所有的發(fā)票與特定的客戶(hù)記錄相關(guān)。 為此,您必須知道子關(guān)系名稱(chēng)。 要查看子關(guān)系名稱(chēng),請(qǐng)轉(zhuǎn)到子對(duì)象的字段詳細(xì)信息頁(yè)面,并檢查“子關(guān)系”值。 在我們的示例中,它是由__r在末尾附加的發(fā)票。


例如:

首先,我們需要設(shè)置數(shù)據(jù),創(chuàng)建一個(gè)名為“ABC客戶(hù)”記錄的客戶(hù),然后向該客戶(hù)添加3張發(fā)票。

現(xiàn)在,我們想獲取客戶(hù)的ABC客戶(hù)有多少?gòu)埌l(fā)票。 下面是同樣的查詢(xún):

//Fetching Child Records using SOQL
List<apex_customer__c> ListCustomers = [SELECT Name, Id, (SELECT id, Name FROM Invoices__r) FROM APEX_Customer__c WHERE Name = 'ABC Customer'];//Query for fetching the Child records along with Parent
System.debug('ListCustomers '+ListCustomers);//Parent Record

List<apex_invoice__c> ListOfInvoices = ListCustomers[0].Invoices__r;//By this notation, you could fetch the child records and save it in List
System.debug('ListOfInvoices values of Childs '+ListOfInvoices);//Child records

您可以在Debug日志中看到記錄值。


獲取父記錄

假設(shè)您要獲取創(chuàng)建日期為今天的發(fā)票的客戶(hù)名稱(chēng),那么您可以使用以下查詢(xún):


例如:獲取父記錄的值以及子對(duì)象。

//Fetching Parent Record Field value using SOQL
List<apex_invoice__c> ListOfInvoicesWithCustomerName = new List<apex_invoice__c>();
ListOfInvoicesWithCustomerName = [SELECT Name, id, APEX_Customer__r.Name FROM APEX_Invoice__c LIMIT 10];    //Fetching the Parent record's values
for (APEX_Invoice__c objInv: ListOfInvoicesWithCustomerName) {
	System.debug('Invoice Customer Name is '+objInv.APEX_Customer__r.Name); //Will print the values, all the Customer Records will be printed
}

這里我們使用了APEX_Customer__r.Name,其中APEX_Customer__r是父關(guān)系名,這里你必須在Parent字段的末尾附加__r,然后你可以獲取父字段值。


聚合函數(shù)

SOQL具有我們?cè)赟QL中的聚合函數(shù)。 聚合函數(shù)允許我們匯總和匯總數(shù)據(jù)。 讓我們看一下細(xì)節(jié)。

假設(shè),您想知道我們從客戶(hù)'ABC客戶(hù)'獲得的平均收入是多少,那么您可以使用此函數(shù)來(lái)占用平均值。


例如:

//Getting Average of all the invoices for a Perticular Customer
AggregateResult[] groupedResults = [SELECT AVG(APEX_Amount_Paid__c)averageAmount FROM APEX_Invoice__c WHERE APEX_Customer__r.Name = 'ABC Customer'];
Object avgPaidAmount = groupedResults[0].get('averageAmount');
System.debug('Total Average Amount Received From Customer ABC is '+avgPaidAmount);

檢查調(diào)試日志中的輸出。 請(qǐng)注意,包含聚合函數(shù)的任何查詢(xún)都會(huì)在AggregateResult對(duì)象數(shù)組中返回其結(jié)果。 AggregateResult是一個(gè)只讀的sObject,只用于查詢(xún)結(jié)果。 當(dāng)我們想生成大數(shù)據(jù)報(bào)告時(shí),這很有用。


還有其他的聚集函數(shù),你可以用它來(lái)進(jìn)行數(shù)據(jù)匯總。

MIN() -此可以用來(lái)找到最小值

MAX() -此可以用來(lái)找出最大值。


綁定Apex變量

您可以在SOQL查詢(xún)中使用Apex變量來(lái)獲取所需的結(jié)果。 Apex變量可以通過(guò)冒號(hào)(:)符號(hào)引用。


例如:

//Apex Variable Reference
String CustomerName = 'ABC Customer';
List<apex_customer__c> ListCustomer = [SELECT Id, Name FROM APEX_Customer__c WHERE Name = :CustomerName];//Query Using Apex variable
System.debug('ListCustomer Name'+ListCustomer);//Customer Name


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)