2013-12-20 5 views
1

두 Salesforce 테이블 이름이 주어지면 두 테이블 사이에 상위/하위 관계가 있는지, 그리고 관계가 존재하는 테이블이 상위인지 확인하고 싶습니다. .Salesforce API : 두 임의 테이블 간의 관계를 확인하는 방법이 있습니까

나는이 방법을 간단한 경우와 함께 사용할 수 있지만 최악의 경우 두 테이블의 모든 하위 관계를 검토해야하므로 최적화되지 않았습니다. 나는 또한이 접근법이 모든 경우를 다루고 있다고 확신하지 못한다.

private String getParent(String table1, String table2) throws Exception 
{ 
    DescribeSObjectResult[] describeSObjectResults = 
     pc.describeSObjects(new String[] {table1, table2}); 

    // Child relationships of table1 
    for (ChildRelationship cr : describeSObjectResults[0].getChildRelationships()) 
    { 
     // table1 has a child matching table2 
     if (table2.equalsIgnoreCase(cr.getChildSObject())) 
     { 
      return table1; 
     } 
    } 
    // Child relationships of table2 
    for (ChildRelationship cr : describeSObjectResults[1].getChildRelationships()) 
    { 
     // table1 has a child matching table2 
     if (table1.equalsIgnoreCase(cr.getChildSObject())) 
     { 
      return table2; 
     } 
    } 

    throw new Exception("There is no parent/child relationship."); 
} 

더 좋은 방법이 있나요?

답변

1

여기에 아무것도 바꿀 수 있을지 모르겠습니다. & 코드를 이해하는 것이 간단하고 명확합니다.

모든 필드를 검사하고 "fieldDescribe"메서드가 getReferenceTo()과 같은 의미있는 결과를 반환하는지 확인하여 하위 관계에 대해 "아래로"하위 관계 만 설명하고 "위로"이동하여 설명 할 수 있습니다.

그러나 나는 그렇게 할 것이다 : 그것은 당신이 모든 하나의 필드를 설명하는 의미

  1. - 그리고 그 중 몇은 실제로 조회 할 것이다.
    • Case.OwnerIdFolder 가리킬 수
    • Report.ParentId
    • 를 쳤다 "활동 가능"을 포함하는 객체를 가리킬 수 User 또는
    • Event.WhoIdQueue 가리킬 수 룩업은 "돌연변이"인 경우
    • 그것은 추가 두통 수단 , User 또는 Organization

성능에 대해 걱정이된다면 ... 이것은 외부의 것입니까? Apex가 아니라 Java 또는 C# (throws Exception 비트).

DB에서 일부 헬퍼 테이블을 미리 채운 다음이 캐시 된 데이터를 참조 할 수 있습니다.

org에 대해 "엔터프라이즈 WSDL"의 캐시 된 복사본을 가지고 시도해 볼 수 있습니다. & 때마다 로컬로 보관 된 XML을 스캔하는 것이 더 빠를 것이라고 확신합니다. 한 번씩 신선한 사본). 당신은 "WSDL에서 생성 된 캐시와 로컬 DB를 더할 수 없다면 - 심지어 비싼 기술을 호출하도록 만들 수도 있습니다."-

관련 문제