0

シン クライアント URI は、優れた Web ユーザー インターフェイスでファイルまたはフォルダーの詳細を表示するために入力できる Web アドレスです。

たとえば、私の Android アプリは Alfresco の CMIS API を使用していますが、複雑な操作 (このファイルでワークフローを開始するなど) の場合は、リンクをクリックすると、本格的な Web インターフェイス (Alfresco が提供) に移動できます。サーバ)。

任意の Alfresco フォルダ/ドキュメントについて、このシン クライアント URI を計算する方法は?

まず、CMIS プロトコルの thinClientURI 機能を使用することをお勧めします。残念ながら、リポジトリのルートに対してのみ機能します。

完璧なアルゴリズムは、Alfresco Share の一般的なリポジトリ ブラウザではなく、Alfresco Share サイトに Alfresco Share ノードを表示することです。

4

2 に答える 2

2

Alfresco には、必要なことだけを行うあまり知られていない機能があります。Enterprise 4.0.3ish で実装され、4.1 の準備ができていると思います。これまでの主な用途は Cloud Sync です。

あなたが探しているウェブスクリプトは でorg.alfresco.repository.site.site-share-view-url.getあり、 として公開されてい/api/sites/shareUrl?nodeRef=nodeRefます。次のような単純な JSON を返します。

{
   "site": "alfresco-test",
   "url": "https:\/\/my.alfresco.com\/share\/test.com\/page\/site\/alfresco-test\/document-details?nodeRef=workspace:\/\/SpacesStore\/aae3b33fd-23d4-4091-ae64-44a8e332091341"
}

(上記の例は Alfresco クラウド バージョンから取得したものですが、4.0 エンタープライズ リリースの後半、エンタープライズ 4.1、およびコミュニティ + エンタープライズ 4.2 以降に存在する必要があります)

サポートされているコンテンツの種類を確認したい場合は、それを強化する Java クラスを確認することをお勧めします。org.alfresco.repo.web.scripts.site.SiteShareViewUrlGet

ただし、サイト内にあるノードのみをサポートするというわずかな制限があります。サイト以外のノードがある場合は、リポジトリ ブラウザの URL を自分で計算する必要があります...

于 2013-12-22T12:06:44.303 に答える
0

以下は私の現在の実装です。
フォルダーに対してのみ機能し、Alfresco Share でのみ機能するため、(非常に) 完璧とは言えません。

        string suffix1 = "alfresco/cmisatom";
        string suffix2 = "alfresco/service/cmis";
        if (repo.Address.AbsoluteUri.EndsWith(suffix1) || repo.Address.AbsoluteUri.EndsWith(suffix2))
        {
            // Detect suffix length.
            int suffixLength = 0;
            if (repo.Address.AbsoluteUri.EndsWith(suffix1))
                suffixLength = suffix1.Length;
            if (repo.Address.AbsoluteUri.EndsWith(suffix2))
                suffixLength = suffix2.Length;

            string root = repo.Address.AbsoluteUri.Substring(0, repo.Address.AbsoluteUri.Length - suffixLength);
            if (repo.RemotePath.StartsWith("/Sites"))
            {
                // Case of Alfresco Share.

                // Example RemotePath: /Sites/thesite
                // Result: http://server/share/page/site/thesite/documentlibrary
                // Example RemotePath: /Sites/thesite/documentLibrary/somefolder/anotherfolder
                // Result: http://server/share/page/site/thesite/documentlibrary#filter=path|%2Fsomefolder%2Fanotherfolder
                // Example RemotePath: /Sites/s1/documentLibrary/éß和ệ
                // Result: http://server/share/page/site/s1/documentlibrary#filter=path|%2F%25E9%25DF%25u548C%25u1EC7
                // Example RemotePath: /Sites/s1/documentLibrary/a#bc/éß和ệ
                // Result: http://server/share/page/site/thesite/documentlibrary#filter=path%7C%2Fa%2523bc%2F%25E9%25DF%25u548C%25u1EC7%7C

                string path = repo.RemotePath.Substring("/Sites/".Length);
                if (path.Contains("documentLibrary"))
                {
                    int firstSlashPosition = path.IndexOf('/');
                    string siteName = path.Substring(0, firstSlashPosition);
                    string pathWithinSite = path.Substring(firstSlashPosition + "/documentLibrary".Length);
                    string escapedPathWithinSite = HttpUtility.UrlEncode(pathWithinSite);
                    string reescapedPathWithinSite = HttpUtility.UrlEncode(escapedPathWithinSite);
                    string sharePath = reescapedPathWithinSite.Replace("%252f", "%2F");
                    return root + "share/page/site/" + siteName + "/documentlibrary#filter=path|" + sharePath;
                }
                else
                {
                    // Site name only.
                    return root + "share/page/site/" + path + "/documentlibrary";
                }
            }
            else
            {
                // Case of Alfresco Web Client. Difficult to build a direct URL, so return root.
                return root;
            }
        }
于 2013-12-20T10:33:57.333 に答える