Freigeben über


Überlegungen zum Verwenden des Siebel-Adapters mit SharePoint

Dieses Thema enthält Informationen zu Problemen, die bei der Verwendung des Microsoft BizTalk-Adapters für Siebel eBusiness-Anwendungen mit Microsoft Office SharePoint Server auftreten können, zusammen mit Lösungen. Die Probleme sind in zwei Kategorien unterteilt:

  • Allgemeine Probleme

  • Probleme mit benutzerdefinierten Webparts

Allgemeine Probleme

Dieser Abschnitt enthält Probleme, die entweder keine Lösung aufweisen oder die das Ändern der Anwendungsdefinitionsdatei für die Lösung erfordern.

Problem 1: Die vom WCF-Dienst zurückgegebenen Daten vom einfachen Typ werden nicht angezeigt.

Erklärung: Microsoft Office SharePoint Server erwartet, dass die vom WCF-Dienst zurückgegebenen Daten nur den DataSet- oder Sammlungstyp aufweisen. Wenn die vom WCF-Dienst zurückgegebenen Daten vom einfachen Typ sind, werden die Daten von Microsoft Office SharePoint Server nicht angezeigt.

Lösung: Keine Auflösung. Dies ist eine bekannte Einschränkung bei Microsoft Office SharePoint Server.

Problem 2: Eine Fehlermeldung wird angezeigt, wenn die vom WCF-Dienst zurückgegebenen Daten NULL sind.

Erklärung: Wenn die vom WCF-Dienst zurückgegebenen Daten ein NULL-Wert sind, zeigt Microsoft Office SharePoint Server eine Fehlermeldung an. Angenommen, Sie verwenden das Business Data List-Webpart für die Finder-Methode instance und suchen im Siebel-System basierend auf einem Suchausdruck nach Kunden. Der angegebene Suchausdruck ruft einen NULL-Wert ab. In diesem Fall zeigt Microsoft Office SharePoint Server eine Fehlermeldung an.

Lösung: Keine Auflösung. Dies ist eine bekannte Einschränkung bei Microsoft Office SharePoint Server.

Problem 3: Ein vom WCF-Dienst zurückgegebenes Array des einfachen Typs wird nicht angezeigt.

Erklärung: Wenn es sich bei den vom WCF-Dienst zurückgegebenen Daten um ein Array vom einfachen Typ handelt, werden die Daten von Microsoft Office SharePoint Server nicht angezeigt. Darüber hinaus wird beim Ausführen einer Methode instance im Business Data Catalog Definition Editor, die ein Array des einfachen Typs zurückgibt, die folgende Fehlermeldung angezeigt: "Back-End-Systemadapter hat eine Struktur zurückgegeben, die mit den entsprechenden Metadaten nicht kompatibel ist (MethodInstance, Parameter oder TypeDescriptor)."

Lösung: Keine Auflösung. Es ist eine bekannte Einschränkung mit Microsoft Office SharePoint Server und Business Data Catalog Definition Editor.

Problem 4: Eine Anwendungsdefinitionsdatei, die einen komplexen Typparameter mit mehr als 300 Feldern enthält, kann nicht importiert werden.

Erklärung: Microsoft Office SharePoint Server kann keine Anwendungsdefinitionsdatei importieren, die mehr als 300 Felder in dem vom WCF-Dienst zurückgegebenen komplexen Typparameter enthält, und zeigt eine Fehlermeldung an, wenn Sie dies versuchen. Dies liegt an der Einschränkung von Microsoft Office SharePoint Server, dass nicht mehr als 300 Felder eines komplexen Typparameters angezeigt werden können.

Lösung: Verwenden Sie den Business Data Catalog Definition-Editor, um die Anzahl der Felder des Komplexen Typparameters auf kleiner oder gleich 300 zu begrenzen. Je nach Anforderung können Sie die Felder des komplexen Typparameters im Business Data Catalog Definition Editor löschen, die in Microsoft Office SharePoint Server nicht angezeigt werden müssen. Alternativ können Sie auch die Anwendungsdefinitionsdatei aus dem Business Data Catalog Definition Editor mit allen Feldern exportieren und dann die Anwendungsdefinitionsdatei in einem Editor oder einer beliebigen XML-Erstellungsanwendung ändern, um die felder zu löschen, die nicht erforderlich sind, um die Anzahl der Felder auf 300 zu begrenzen.

Probleme mit benutzerdefinierten Webparts

Dieser Abschnitt enthält Probleme, die die Verwendung benutzerdefinierter Webparts zur Lösung erfordern. Ausführliche Informationen zur Verwendung eines benutzerdefinierten Webparts zum Beheben von Problemen, die beim Arbeiten mit dem Siebel-Adapter und Microsoft Office SharePoint Server auftreten können, finden Sie unter Verwenden eines benutzerdefinierten Webparts mit dem Siebel-Adapter.

Problem 1: Der Index eines Enumerators wird anstelle des Werts für den Enumerationsdatentyp angezeigt.

Erklärung: Wenn ein Geschäftsdatenlisten- oder Geschäftsdatenelement-Webpart in Microsoft Office SharePoint Server Daten des Enumerationstyps enthält (ein eindeutiger Typ, der aus einer Reihe benannter Konstanten besteht, die als Enumeratoren bezeichnet werden), wird der Index des Enumerators anstelle seines Werts in Microsoft Office SharePoint Server angezeigt. Dies liegt daran, dass die Geschäftsdatenlisten- und Geschäftsdatenelement-Webparts die Werte der Daten des Enumerationstyps fälschlicherweise im SharePoint-Portal drucken.

Lösung: Verwenden Sie ein benutzerdefiniertes Webpart, um den Wert des Enumerators anstelle des Indexes zu drucken. Informationen zur Verwendung eines benutzerdefinierten Webparts finden Sie unter Verwenden eines benutzerdefinierten Webparts mit dem Siebel-Adapter. Sie können beispielsweise das folgende Codebeispiel in Ihrem Webpart verwenden, um die richtigen Werte von Enumerationsdaten auf Microsoft Office SharePoint Server auszudrucken.

namespace CustomWebpart  
{  
    public class CustomWebPart : WebPart  
    {  
        private string displayText = "Hello World!";  
  
        [WebBrowsable(true), Personalizable(true)]  
        public string DisplayText  
        {  
            get { return displayText; }  
            set { displayText = value; }  
        }  
        protected override void Render(System.Web.UI.HtmlTextWriter writer)  
        {  
            string SearchExpr = "[Address Name] LIKE \"*\"";  
            object ElementType = null;  
  
/***Step 1: Get the required entity and method.***/  
  
            LobSystem newSystem = ApplicationRegistry.GetLobSystems()["WebServiceLobSystem"]; // Name specified in application definition file  
            LobSystemInstance newSystemInstance = newSystem.GetLobSystemInstances()["Siebel_Instance"]; // Name specified in application definition file  
            Entity CategoryEntity = newSystem.GetEntities()["Siebel_Method_Name"]; // Name specified in application definition file  
            Method newMethod = CategoryEntity.GetMethods()["Query"]; // Name specified in application definition file  
            MethodInstance methodInstance = newMethod.GetMethodInstances()["MethodInstance0"]; // Name specified in application definition file  
  
/***Step 2: Get the list of input parameters.***/  
            Object[] args = methodInstance.GetMethod().CreateDefaultParameterInstances(methodInstance); // Get default value of the input parameter  
            Object[] ArgsInput = new Object[args.Length];  
  
/***Step 3: Assign them required values.***/  
  
           //Assigning values to a complex type parameter. Index of this parameter is 3rd in args array.   
           /*** Complex Type Parameter is defined as follows:  
           <Parameter Direction="In" Name="BusinessAddressQueryInputRecord">  
           <TypeDescriptor TypeName="BDC.BusinessAddressQueryInputRecord,WebServiceLobSystem" Name="BusinessAddressQueryInputRecord">  
              <TypeDescriptors>  
                 <TypeDescriptor TypeName="System.String, ...." Name="SearchExpr"></TypeDescriptor>  
                 <TypeDescriptor TypeName="System.String, ...." Name="SortSpec"></TypeDescriptor>  
                 <TypeDescriptor TypeName="System.String[], ...." IsCollection="true" Name="QueryFields"></TypeDescriptor>  
              </TypeDescriptors>  
           </TypeDescriptor>  
           </Parameter>  
            * We are assigning value to Parameter SearchExpr. ***/  
  
            Assembly asm = Assembly.GetAssembly(args[2].GetType());  
            Type t = asm.GetType(args[2].GetType().ToString()); // Get type of the parameter  
  
            FieldInfo[] FI = t.GetFields();  
            ElementType = Activator.CreateInstance(t);  
            ElementType.GetType().GetFields()[0].SetValue(ElementType, (Object)SearchExpr);  
  
            ArgsInput[2] = ElementType; // ArgsInput is fed as input while executing Method Instance.  
  
/***Step 4: Execute the particular method instance using the required value.***/              
  
            IEntityInstanceEnumerator prodEntityInstanceEnumerator = (IEntityInstanceEnumerator)CategoryEntity.Execute(methodInstance, newSystemInstance, ref ArgsInput); //Method instance of type Finder is being used here.  
  
/***Step 5: Display the output on the custom Web Part in Microsoft Office SharePoint Server.***/  
  
            writer.Write("<table>");  
            while (prodEntityInstanceEnumerator.MoveNext())  
            {  
                IEntityInstance IE = prodEntityInstanceEnumerator.Current;  
  
                writer.Write("<tr>");  
                foreach (Field f in CategoryEntity.GetFinderView().Fields)  
                {  
  
                    writer.Write("<td>");  
                    writer.Write(IE[f]);  
                    writer.Write("</td>");  
                }  
                writer.Write("</tr>");  
            }  
            writer.Write("</table>");  
  
        }  
    }  
}  
  

Problem 2: Werte für Arrayelemente können nicht angegeben werden

Erklärung: Wenn der Eingabeparameter des WCF-Diensts ein Array ist, können Sie keine Werte für die Arrayelemente mithilfe von Filtern angeben, die in der Anwendungsdefinitionsdatei definiert sind, die mit dem Business Data Catalog Definition Editor erstellt wurde. Dies bedeutet, dass Sie das Geschäftsdatenlisten- oder Geschäftsdatenelement-Webpart in Microsoft Office SharePoint Server nicht verwenden können, um Werte für diese Eingabeparameter (Arrayelemente) für den WCF-Dienst anzugeben. Dies liegt daran, wie Arrays in der Anwendungsdefinitionsdatei definiert werden.

Lösung: Verwenden Sie ein benutzerdefiniertes Webpart, um Arrayelementen Werte zuzuweisen. Informationen zur Verwendung eines benutzerdefinierten Webparts finden Sie unter Verwenden eines benutzerdefinierten Webparts mit dem Siebel-Adapter. Beispielsweise können Sie das folgende Codebeispiel in Schritt 3 in "Problem 1: Index eines Enumerators wird anstelle des Werts für den Enumerationsdatentyp angezeigt" verwenden, um Arrayelementen Werte zuzuweisen.

/***Assign required values to parameters of type array.***/   
/***Assumption is that the ith parameter of Method is of type Array and all the simple type elements in the array are of type string***/  
  
            Type t = asm.GetType(args[i].GetType().ToString()); // Get type of the parameter  
            Type TElement = t.GetElementType(); // Getting type of element of array  
            int index = 5; //Size of Array  
            Array ElementArray = Array.CreateInstance(TElement, index); //Creating an array of length: index  
  
            for (int ind = 0; ind < index; ind++)  
            {  
                //Creating an instance of an element of array  
                object ElementType = Activator.CreateInstance(TElement);  
                FieldInfo[] FI = ElementType.GetType().GetFields();  
                for (int f = 0; f \< FI.Length; f++)  
                {  
                    ElementType.GetType().GetFields()[f].SetValue(ElementType, (Object)"ElementValue");  
                }  
                ElementArray.SetValue(ElementType, ind);  
            }  
  
            ArgsInput[i] = (object)ElementArray; // As shown in sample, ArgsInput is fed as input while executing Method Instance  
  

Problem 3: Einschränkung beim Angeben von NULL-Werten auf komplexe Typparameter

Erklärung: Wenn Sie keinen Wert für einen komplexen Typparameter aus einem Webpart in Microsoft Office SharePoint Server angeben, sollte NULL als Wert für den komplexen Typparameter an den WCF-Dienst übergeben werden. Für den komplexen Typparameter wird jedoch ein Wert ohne NULL übergeben, und NULL wird für die untergeordneten Elemente (des einfachen Typs) übergeben. Dies führt zu einem Konflikt zwischen dem erwarteten Nachrichtenschema und dem Nachrichtenschema, das an den WCF-Dienst übergeben wird. Daher zeigt der Siebel-Adapter möglicherweise eine Fehlermeldung an.

Hinweis

Um den Standardwert eines komplexen Typparameters zu ermitteln, wenn kein Wert aus einem Webpart in Microsoft Office SharePoint Server übergeben wird, verwenden Sie Schritt 2 im Codebeispiel, das unter "Issue 1: Index of an Enumerator is displayed anstelle des Werts für den Enumerationsdatentyp" erwähnt wird.

Lösung: Verwenden Sie ein benutzerdefiniertes Webpart, um dem Parameter für komplexen Typ einen NULL-Wert zuzuweisen, wenn kein Wert aus einem Webpart in Microsoft Office SharePoint Server angegeben wird. Informationen zur Verwendung eines benutzerdefinierten Webparts finden Sie unter Verwenden eines benutzerdefinierten Webparts mit dem Siebel-Adapter.

Problem 4: Einschränkung beim Anzeigen eines einzelnen Datensatzes in Microsoft Office SharePoint Server basierend auf mehreren Werten

Erläuterung: Wenn Sie einen einzelnen Datensatz in Microsoft Office SharePoint Server basierend auf mehreren Werten (Eingabeparametern) aus einem Siebel-System anzeigen möchten, können Sie keines der drei Webparts (Geschäftsdatenliste, Geschäftsdatenelement und Liste für Geschäftsdaten) verwenden, die in Schritt 3: Erstellen einer SharePoint-Anwendung zum Abrufen von Daten aus Siebel in Tutorial 1 angegeben sind: Präsentieren von Daten aus einem Siebel-System auf einer SharePoint-Website.

Lösung: Dazu müssen Sie ein benutzerdefiniertes Webpart verwenden. Informationen zur Verwendung eines benutzerdefinierten Webparts finden Sie unter Verwenden eines benutzerdefinierten Webparts mit dem Siebel-Adapter. Beispielsweise können Sie in Schritt 3 in "Problem 1: Index eines Enumerators wird anstelle des Werts für den Enumerationsdatentyp angezeigt" den Code ändern, um Werte für mehrere Parameter bereitzustellen, anstatt Eingaben für einen einzelnen Geschäftskomponentenparameter bereitzustellen.

Weitere Informationen

Verwenden des Siebel-Adapters mit SharePoint