2012-03-30 6 views
0

Können wir mithilfe der Salesforce-API auf alle für ein Objekt spezifischen Seitenlayouts zugreifen?Kann ich über die Salesforce-API auf alle für ein Objekt spezifischen Seitenlayouts zugreifen?

Wir sind derzeit auf die Verwendung von Datensatztypen beschränkt und verfügen daher über ein Seitenlayout pro Datensatztyp. Wir möchten vermeiden, dass wir für jedes benötigte Seitenlayout einen Datensatztyp erstellen müssen, sondern einfach auf verschiedene Seitenlayouts zugreifen, die einem Objekt zugeordnet sind.

Um Ihnen ein größeres Bild zu geben, möchten wir das Seitenlayout einer zweiten Registerkarte (in einem Webbrowser, der in .NET codiert ist) basierend auf den Werten, die auf der ersten Registerkarte eingegeben wurden, steuern. Die erste Registerkarte würde für alle gleich sein, aber die zweite Registerkarte wäre spezifisch für eines der 80 Finanzierungsprogramme. Wie es jetzt ist, müssen wir 80 Datensatztypen erstellen, um die 80 verschiedenen Seitenlayouts zuzuordnen. Wir möchten die Record-Typen nicht erstellen müssen.

Vielen Dank! Izumi.

Antwort

1

der describeLayout Aufruf in dem SOAP-API werden alle mit einem Objekt zugeordnet Layouts zurückkehren

+0

Vielen Dank für Ihre Antwort . Wenn Sie auf den Link klicken, den Sie angegeben haben, heißt es: "Benutzerprofile können mehrere Layouts pro Objekt haben, wobei jedes Layout für einen bestimmten Datensatztyp spezifisch ist". Das ist unser Problem. Wir möchten auf verschiedene Seitenlayouts zugreifen, ohne für jedes Seitenlayout einen Datensatztyp erstellen zu müssen. Weißt du, ob das möglich ist? Vielen Dank! –

+0

Der Parameter recordTypeId in describeLayout ist optional, aber nicht sicher, ob Sie Layouts erhalten, die nicht für den aktuellen Benutzer zugeordnet sind. – superfell

0

Ich denke, Salesforce Metadata API kann hilfreich sein, in diesem Fall (dh der rufende Benutzer Zugriff hat). Aber das Problem ist, gibt es die ZIP-Dateien zurück. Ich bin nicht sicher, dass die vom Retrieve-Aufruf zurückgegebene XML-Datei eine serialisierte Form des Objekts ist, das von der Salesforce-API aus DescribeLayout Call zurückgegeben wird.

http://www.salesforce.com/us/developer/docs/api_meta/index.htm

0

Ich hoffe, dass Sie die Lösung jetzt herausgefunden haben, aber in Fall ist es negativ, hier eine Lösung:

Im SFDC Metadata API finden Sie die listMetadata Methode finden, die die Namen zurückgibt und andere Eigenschaften der Komponenten. Hier ist Beispielcode für Sie, die alle Konto Objekt Seitenlayouts in der org einträgt: (natürlich haben Sie als Admin thro der API anmelden mit Metadatabinding zuerst):

// this is the Login method ... please refer to Metadata Api documentation 
metadatabinding = (MetadataBindingStub)new MetadataServiceLocator().getMetadata(); 


// this is another method in which you call the listMetadata method 
ListMetadataQuery query = new ListMetadataQuery(); 
    query.setType("Layout"); 
    double asOfVersion = 23.0; 
    // Assuming that the SOAP binding has already been established. 
    FileProperties[] metadatafile = metadatabinding.listMetadata(
    new ListMetadataQuery[] {query}, asOfVersion); 
    if (metadatafile != null) { 
    for (FileProperties fp : metadatafile) { 
     if(fp.getFullName().contains("Account")){ 
     System.out.println("Component fullName: " + fp.getFullName()); 
     System.out.println("Component type: " + fp.getType()); 
      } 
     } 
0
public void listMetadata() { 
    try { 
     ListMetadataQuery query = new ListMetadataQuery(); 
     query.setType("Layout"); 
     double asOfVersion = 21.0; 
     // Assuming that the SOAP binding has already been established. 
     FileProperties[] lmr = metadatabinding.listMetadata(new ListMetadataQuery[] { 
      query 
     }, asOfVersion); 
     String layoutName[] = { 
      "SVMXC__Activity_Master__c-Activity Master Layout" 
     }; 
     System.out.println("Component length: " + lmr.length); 
     if (lmr != null) { 
      for (FileProperties n: lmr) { 
       if (n.getNamespacePrefix() != null && n.getNamespacePrefix().equals("SVMXC")) { 
        System.out.println("Component fullName SVMXC: " + n.getFullName()); 
        System.out.println("Component type SVMXC: " + n.getType()); 
       } else { 
        System.out.println("Component fullName direct: " + n.getFullName()); 
        System.out.println("Component type: " + n.getType()); 
       } 
      } 
     } 
    } catch (Exception ce) { 
     ce.printStackTrace(); 
    } 
} 
+0

Willkommen bei StackOverflow! Erwägen Sie, einige Erklärungen hinzuzufügen. Vielen Dank. – potame