2012-09-25 37 views
8

Có cách nào để lấy danh sách tất cả các trường trong bảng trong Salesforce không? DESCRIBE myTable không hoạt động và SELECT * FROM myTable không hoạt động.Salesforce SOQL mô tả bảng

Trả lời

9

Từ bên trong Apex, bạn có thể có được điều này bằng cách chạy đoạn mã Apex sau. Nếu bảng/đối tượng của bạn có tên là MyObject__c, thì điều này sẽ cung cấp cho bạn Tập tên API của tất cả các trường trên đối tượng mà bạn có quyền truy cập (điều này quan trọng --- ngay cả với Quản trị viên hệ thống, nếu một số trường nhất định trên bảng của bạn/đối tượng không nhìn thấy được qua Dòng Cấp an ninh đối với bạn, họ sẽ không hiển thị ở đây):

// Get a map of all fields available to you on the MyObject__c table/object 
// keyed by the API name of each field 
Map<String,Schema.SObjectField> myObjectFields 
    = MyObject__c.SObjectType.getDescribe().fields.getMap(); 

// Get a Set of the field names 
Set<String> myObjectFieldAPINames = myObjectFields.keyset(); 

// Print out the names to the debug log 
String allFields = 'ALL ACCESSIBLE FIELDS on MyObject__c:\n\n'; 
for (String s : myObjectFieldAPINames) { 
    allFields += s + '\n'; 
} 
System.debug(allFields); 

để kết thúc này đi, và đạt được SELECT * FROM MYTABLE chức năng, bạn sẽ cần phải xây dựng một truy vấn SOQL động sử dụng các lĩnh vực:

List<String> fieldsList = new List<String>(myObjectFieldAPINames); 
String query = 'SELECT '; 
// Add in all but the last field, comma-separated 
for (Integer i = 0; i < fieldsList.size()-1; i++) { 
    query += fieldsList + ','; 
} 
// Add in the final field 
query += fieldsList[fieldsList.size()-1]; 
// Complete the query 
query += ' FROM MyCustomObject__c'; 
// Perform the query (perform the SELECT *) 
List<SObject> results = Database.query(query); 
2

cuộc gọi API describeSObject trả về tất cả siêu dữ liệu về một đối tượng/bảng nhất định bao gồm các trường của nó. Có sẵn trong SOAP, REST & API Apex.

1

Hãy thử sử dụng Schema.FieldSet

Schema.DescribeSObjectResult d = Account.sObjectType.getDescribe(); 
Map<String, Schema.FieldSet> FsMap = d.fieldSets.getMap(); 

complete documentation

+0

Tôi sẽ truy vấn điều này bằng SOQL như thế nào? – Maverick

+0

Tôi nghĩ rằng nó không phải là có thể sử dụng chỉ có SOQL ... bạn có thể làm điều đó bằng cách sử dụng Javascript (hoặc bất kỳ ngôn ngữ thực hiện API), hoặc Apex như tôi đã trả lời. –

+0

Bạn có thể xem cùng một câu hỏi và cùng một câu trả lời tại đây: http://stackoverflow.com/questions/8780413/salesforce-soql-query-to-fetch-all-the-fields-on-the-entity –

-4

Các bạn đã thử DESC myTable?

Đối với tôi, nó hoạt động tốt, nó cũng nằm trong các mẹo cơ bản về in nghiêng. Hãy xem:

enter image description here

+0

[sf: MALFORMED_QUERY] MALFORMED_QUERY: mã thông báo không mong muốn: DESC –

+0

Thú vị. Nó làm việc cho tôi. – Riccardo

Các vấn đề liên quan