4

コア サービスを使用してコンポーネント メタデータにマルチメディア リンク フィールドを設定したいと考えています。

以下のようにしようとしていますが、xml 検証エラーが発生しています。これについて助けていただけますか?

        ComponentData comp = client.Read(compid, readoption) as ComponentData;
        comp = client.TryCheckOut(compid, readoption) as ComponentData;

        string newxml = @"<Metadata xmlns=""uuid:5880d67f-13f7-4632-8c33-dcfd9c1437ed"">
                          <meta>
                          <mmlink>tcm:22-5678</mmlink>        

                          </metad>
                          </Metadata>";

        comp.Metadata = newxml;

        client.Save(comp, readoption);
        client.CheckIn(comp.Id, readoption);
4

2 に答える 2

7

次のように設定する必要がxlink:hrefあります。

<mmlink xlink:type="simple" xlink:href="tcm:2-146" 
        xmlns:xlink="http://www.w3.org/1999/xlink"></mmlink>

このような問題を解決する最も簡単な方法は、問題のフィールドと対応するコンポーネントを含むコンポーネント スキーマを作成することです。次に、コンポーネント XML を調べて答えを見つけます。

于 2012-10-08T09:39:18.833 に答える
3

マルチメディア リンクのアプローチは、コンポーネント リンクの場合と同じです。また、コンテンツ フィールドとメタデータ フィールドの両方にも適用されます。この例では、フォルダ メタデータに mm コンポーネント リンクを設定しています。ここで、md スキーマには、マルチメディア コンポーネント リンク フィールドである「component」というフィールドを含む「versioned_component」という埋め込み可能なフィールドが含まれています。 :

this.OpenSession();
try
{
    //itemUri is the MM Component uri
    var currentItem = (ComponentData)session.Read(itemUri, new ReadOptions());
    LinkToRepositoryData ltrd = currentItem.LocationInfo.ContextRepository;
    var pd = (PublicationData)session.Read(ltrd.IdRef, new ReadOptions());
    String currentPublicationWebdavURL = pd.LocationInfo.WebDavUrl;
    String schemaUri = string.Format(FOLDER_MD_SCHEMA_WEBDAVURL, 
                          HttpUtility.UrlDecode(currentPublicationWebdavURL));

    //schemaUri = HttpUtility.UrlEncode(schemaUri);
    var sd = (SchemaData)session.Read(schemaUri, new ReadOptions());
    FolderData folder = new FolderData();
    folder.Id = TcmUri.UriNull;
    folder.Title = "hidden_" + Guid.NewGuid().ToString();
    var rootFolder = (FolderData)session.Read(
                            currentItem.LocationInfo.OrganizationalItem.IdRef, 
                            new ReadOptions());
    folder.LocationInfo= new LocationInfo()
    {
        OrganizationalItem = new LinkToOrganizationalItemData(){
            IdRef = rootFolder.Id
        }
    };
    folder.MetadataSchema = new LinkToSchemaData()
    {
        IdRef = sd.Id,
    };
    string sMetadata = "<Metadata xmlns=\"{0}\" xmlns:xlink=\"{1}\"> " 
                     + "  <version_component>" 
                     + "    <component xlink:type=\"simple\" " 
                     + "          xlink:href=\"{2}\" xlink:title=\"{3}\" />" 
                     + "  </version_component> " 
                     + "</Metadata>";
    sMetadata = string.Format(sMetadata, sd.NamespaceUri, 
                              Tridion.Constants.XlinkNamespace, 
                              currentItem.Id.ToString(), currentItem.Title);
    folder.Metadata = sMetadata;
    folderUri = session.Save(folder, new ReadOptions()).Id.ToString();
    return folderUri;
}
finally {
    this.CloseSession();
}

これも役立つことを願って、

于 2012-10-09T00:37:53.133 に答える