SharePoint で SAP アダプターを使用する場合の考慮事項
このトピックでは、Microsoft BizTalk Adapter for mySAP Business Suite と Microsoft Office SharePoint Server の使用時に発生する可能性がある問題と解決策について説明します。 問題は 2 つのカテゴリに分けられます。
一般的な問題
カスタム Web パーツに関する問題
一般的な問題
このセクションには、解決策がない、または解決のためにアプリケーション定義ファイルを変更する必要がある問題が含まれています。
問題 1: WCF サービスによって返される単純型データが表示されない
説明: Microsoft Office SharePoint Server は、WCF サービスによって返されるデータが DataSet またはコレクション型のみであると想定しています。 WCF サービスによって返されるデータが単純型の場合、Microsoft Office SharePoint Server ではデータは表示されません。
解決策: 解像度なし。 これは、Microsoft Office SharePoint Server の既知の制限事項です。
問題 2: WCF サービスによって返されるデータが NULL の場合、エラー メッセージが表示される
説明: WCF サービスによって返されるデータが NULL 値の場合、Microsoft Office SharePoint Server にエラー メッセージが表示されます。 たとえば、 Finder メソッド インスタンスにビジネス データ リスト Web パーツを使用していて、検索式に基づいて SAP システムの顧客を検索するとします。 指定した検索式は NULL 値をフェッチします。 この場合、Microsoft Office SharePoint Server にエラー メッセージが表示されます。
解決策: 解像度なし。 これは、Microsoft Office SharePoint Server の既知の制限事項です。
問題 3: WCF サービスによって返される単純型の配列が表示されない
説明: WCF サービスによって返されるデータが単純型の配列である場合、Microsoft Office SharePoint Server ではデータは表示されません。 さらに、Business Data Catalog Definition Editor で単純型の配列を返すメソッド インスタンスを実行すると、次のエラー メッセージが表示されます。"バックエンド システム アダプターは、対応するメタデータ (MethodInstance、Parameter、または TypeDescriptor) と互換性のない構造体を返しました。
解決策: 解像度なし。 これは、Microsoft Office SharePoint Server および Business Data Catalog 定義エディターに関する既知の制限事項です。
問題 4: 300 を超えるフィールドを持つ複合型パラメーターを含むアプリケーション定義ファイルをインポートできない
説明: Microsoft Office SharePoint Server は、WCF サービスによって返される複合型パラメーターに 300 を超えるフィールドを含むアプリケーション定義ファイルをインポートできず、その場合はエラー メッセージが表示されます。 これは、複合型パラメーターの 300 を超えるフィールドを表示できないという Microsoft Office SharePoint Server の制限によるものです。
解決方法: ビジネス Data Catalog定義エディターを使用して、複合型パラメーターのフィールド数を 300 以下に制限します。 要件に応じて、Microsoft Office SharePoint Server に表示する必要のないビジネス Data Catalog定義エディターで複合型パラメーターのフィールドを削除できます。 または、すべてのフィールドを含むビジネス Data Catalog定義エディターからアプリケーション定義ファイルをエクスポートし、メモ帳または XML オーサリング アプリケーションのアプリケーション定義ファイルを変更して、フィールドの数を 300 に制限するために不要なフィールドを削除することもできます。
カスタム Web パーツに関連する問題
このセクションには、解決のためにカスタム Web パーツを使用する必要がある問題が含まれています。 カスタム Web パーツを使用して SAP アダプターと Microsoft Office SharePoint Server の操作中に発生する可能性がある問題を解決する方法の詳細については、「 SAP アダプターでカスタム Web パーツを使用する」を参照してください。
問題 1: 複数の値に基づいて Microsoft Office SharePoint Server に 1 つのレコードを表示することに関する制限事項
説明: SAP システムの複数の値 (入力パラメーター) に基づいて Microsoft Office SharePoint Server で 1 つのレコードを表示する場合は、「 手順 3: チュートリアル 1: SAP からデータを取得する SharePoint アプリケーションを作成する 」で指定した 3 つの Web パーツ (ビジネス データ リスト、ビジネス データ アイテム、およびビジネス データ関連リスト) を使用することはできません。 SharePoint サイト上の SAP システムからのデータの表示。
解決方法: これを行うには、カスタム Web パーツを使用する必要があります。 カスタム Web パーツの使用の詳細については、「 SAP アダプターでカスタム Web パーツを使用する」を参照してください。 そのトピックの 「手順 1: カスタム Web パーツを作成する」では、手順 5 で次のコード サンプルを使用できます。 次のコード サンプルでは、入力パラメーターとして BankCountry と BankKey を受け取り、Microsoft Office SharePoint Server で 1 つのレコードとして表示します。
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 BankCountry = "US";
string BankKey = "134329042";
/***Step 1: Get the required entity and method.***/
LobSystem newSystem = ApplicationRegistry.GetLobSystems()["BAPI_BANK_GETDETAIL"]; // Name specified in application definition file
LobSystemInstance newSystemInstance = newSystem.GetLobSystemInstances()["BAPI_BANK_GETDETAIL_Instance"]; // Name specified in application definition file
Entity CategoryEntity = newSystem.GetEntities()["Entity"]; // Name specified in application definition file
Method newMethod = CategoryEntity.GetMethods()["BAPI_BANK_GETDETAIL"]; // Name specified in application definition file
MethodInstance methodInstance = newMethod.GetMethodInstances()["MethodInstance"]; // Name specified in application definition file
/***Step 2: Get the list of input parameters.***/
Object[] args = methodInstance.GetMethod().CreateDefaultParameterInstances(methodInstance); //Get the default values of the input parameters.
Object[] ArgsInput = new Object[args.Length];
/***Step 3: Assign them required values.***/
Type t = null;
char[] myString = BankCountry.ToCharArray();
String s = new String(myString);
t = s.GetType();
ArgsInput[0] = Activator.CreateInstance(t, myString);
myString = BankKey.ToCharArray();
s = new String(myString);
t = s.GetType();
ArgsInput[1] = Activator.CreateInstance(t, myString);
/***Step 4: Execute the particular method instance using the required value.***/
IEntityInstance IE = (IEntityInstance)CategoryEntity.Execute(methodInstance, newSystemInstance, ref ArgsInput); //Method instance of type Specific Finder is being used here.
/***Step 5: Display the output on the custom Web Part in Microsoft Office SharePoint Server.***/
writer.Write("<table>");
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>");
}
}
Note
アプリケーション定義ファイルには 、Specific Finder メソッド インスタンスが含まれている必要があります。 Specific Finder メソッドは、識別子に基づいて特定のレコードを検索します。 特定の Finder メソッド インスタンスの作成の詳細については、「手順 2: チュートリアル 1: SharePoint サイト上の SAP システムからのデータの提示」の「要件 2: 顧客の一覧から特定の顧客の詳細を取得する」を参照してください。
問題 2: 配列要素に値を指定できない
説明: WCF サービスの入力パラメーターが配列の場合、Business Data Catalog 定義エディターを使用して作成されたアプリケーション定義ファイルで定義されているフィルターを使用して配列要素に値を指定することはできません。 これは、Microsoft Office SharePoint Server のビジネス データ リストまたはビジネス データ アイテム Web パーツを使用して、WCF サービスに対するこれらの入力パラメーター (配列の要素) の値を指定できないことを意味します。 これは、アプリケーション定義ファイルで配列を定義する方法が原因です。
解決方法: カスタム Web パーツを使用して、配列要素に値を割り当てます。 カスタム Web パーツの使用の詳細については、「 SAP アダプターでカスタム Web パーツを使用する」を参照してください。 たとえば、「問題 1: 複数の値に基づいて Microsoft Office SharePoint Server に 1 つのレコードを表示する場合の制限事項」の手順 3 の次のコード サンプルを使用して、配列要素に値を割り当てることができます。
/***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 string type.***/
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
問題 3: 複合型パラメーターに NULL 値を指定することに関する制限事項
説明: Microsoft Office SharePoint Server の Web パーツから複合型パラメーターの値を指定しない場合は、複合型パラメーターの値として NULL を WCF サービスに渡す必要があります。 ただし、複合型パラメーターには NULL 以外の値が渡され、(単純型の) 子要素には NULL が渡されます。 これにより、予期されるメッセージ スキーマと、WCF サービスに渡されるメッセージ スキーマが一致しません。 その結果、SAP アダプターにエラー メッセージが表示されることがあります。
Note
Microsoft Office SharePoint Server の Web パーツから値が渡されない場合に複合型パラメーターの既定値を確認するには、「問題 1: 複数の値に基づいて Microsoft Office SharePoint Server に 1 つのレコードを表示する場合の制限事項」で説明されているコード サンプルの手順 2 を使用します。
解決方法: カスタム Web パーツを使用して、複合型パラメーターに NULL 値を割り当てます。 カスタム Web パーツの使用の詳細については、「 SAP アダプターでカスタム Web パーツを使用する」を参照してください。