0

洞察に感謝します(そして、長い投稿を前もってお詫びします)

Salesforce.com 組織 (クラウド インストール) で構成されたメタデータに基づいて、クライアント用の構成ワークブックを定期的に作成する必要があります。クライアントは、このワークブックが Excel ファイルであることを好みます。

Salesforce.com メタデータ API を使用して、組織内の各 Salesforce.com オブジェクト用の便利な xml ベースの「.object」ファイルを作成できます。このファイルには、最終的に Excel に必要なメタデータが含まれています。

特定の .object ファイルのメタデータを格納するための「テンプレート」として機能する単一のワークシートを含む Excel ワークブックを既に作成しています。

オブジェクトのカスタム フィールド、レコード タイプ、および検証メタデータを格納するために、このワークシートに 3 つの個別のテーブルを作成しました。

このワークシートの 3 つのテーブルすべてに、特定の .object ファイルからのメタデータを入力する単一の .XSD ファイルを作成しました。

VB マクロで、このワークシート、テーブル、および .XSD ファイルを使用して、次のタスクを実行する .object ファイルのリストをループ処理したいと考えています。

  1. 既存のテンプレート ワークシートをコピーする - 解決済み
  2. .object ファイル名の一部を使用して新しいコピーの名前を変更する - 解決済み
  3. .XSD ファイルと既存のテーブルを使用した ImportXML (新しいワークシート テーブルに現在の反復の .object ファイル メタデータを入力します)
  4. 次の .object ファイルまで繰り返し、それぞれに独自のタブができるまで繰り返します

注:この .object のリストは、おそらくディレクトリをスキャンして、構成ワークブックごとに個別に作成します。

主な問題: テンプレート ワークシートをコピーして名前を変更することはできますが、新しいワークシートに対してインポート XML を実行すると、(すべてのワークシートにわたって) テーブルのすべてのインスタンスのデータが上書きされます。

これが意味することは、必要なすべてのワークシートが得られることになりますが、各ワークシートに適切な .object 固有のメタデータではなく、実行された最終インポートからの同じ .object ファイルのメタデータがすべて含まれることになります。

質問:

  1. このアーキテクチャは問題に適していますか?
  2. 元のワークシート (保持したいテーブル以外のデータと書式設定を含む) をコピーして追加の各シートを作成しているので、同じテーブルを各シートにコピーする必要があると想定しています。

    1. これらのコピーされたテーブルを互いに分離し、.XSD データバインディングを維持する方法はありますか?
    2. テーブルを削除し、各ワークシートで新しいテーブルを最初から再構築する方がよいでしょうか?
    3. ここで間違ったツリーを吠えていますか?

ここに私のコードがあります:

Sub newObject(fileName As String)
    Dim folderPath As String
    Dim myMap As XmlMap
    Dim schemaPath As String
    folderPath = "C:\...\objects - QA\"
    schemaPath = "mySchema.XSD"
    ActiveSheet.Copy After:=Sheets(Sheets.Count)
    'Name the new copied sheet
    ActiveSheet.Name = Left(fileName, Len(fileName) - 7) & ActiveWorkbook.XmlMaps.Count
    'Add a named XmlMap to the collection
    Set myMap = ActiveWorkbook.XmlMaps.Add(folderPath & schemaPath)
    Call ImportXmlFromFile(folderPath & schemaPath, folderPath, fileName)

End Sub

Sub ImportXmlFromFile(myMap As String, myFolder As String, myFile As String)
   ' buildFieldsListS (myMap)
     ThisWorkbook.XmlMaps(myMap).Import (myFolder + myFile)

    Exit Sub
MyErr:
    MsgBox "Error #" & Err.Number & ": " & Err.Description, vbOKOnly

End Sub
4

1 に答える 1

0

XmlMaps はワークブック全体のリソースです。新しいオブジェクト ファイルを開いたときに、同じワークブック内の既存の XmlMap と同じスキーマとルート名を指定すると、以前/既存のマップを更新しようとしていると考えられます。 、新しいものを作成して追加する代わりに。

最初にテンプレート シートを新しいワークブックにコピーしてから、その新しいワークブックに新しい XmlMap を作成してインポートする必要があると思います。


または、次の変更を加えて試してください。

Sub newObject(fileName As String)
    On Error Goto MyERR

    ' ... '

    'Add a named XmlMap to the collection'
    Set myMap = ActiveWorkbook.XmlMaps.Add(folderPath & schemaPath)
    Call ImportXmlFromFile(myMap, folderPath, fileName)

    Exit Sub
MyErr:
    MsgBox "Error #" & Err.Number & ": " & Err.Description, vbOKOnly

End Sub

Sub ImportXmlFromFile(myMap As XmlMap, ByVal myFolder As String, myFile As String)
     myMap.Import myFolder & myFile

End Sub
于 2012-08-23T18:53:13.630 に答える