1

今日、私は dotcmis を使用して、屋外で特定の属性を含むすべてのドキュメントを取得するための良い方法を探していました。

私は考えていました:

  • Ephesoft ( http://www.ephesoft.com/ ) を使用してドキュメントをキャプチャします。
  • cmis 統合を使用して Ephesoft と Alfresco を接続します。
  • 屋外モデル (メタデータ ドキュメント) と一致するようにドキュメント プロパティを構成する
  • 特定のプロパティ (メタデータ) を持つすべてのドキュメントを検索するために、webApplication (asp.net) でモジュールを開発します。dotcmis の使用 ( http://chemistry.apache.org/dotnet/dotcmis.html )

私が見つけた:

  • セッションの作成方法。
  • ツリー フォルダの一覧表示方法

ただし... 特定のプロパティ (メタデータ) が設定されている場合、すべてのドキュメントをどのように検証しますか?

どうやってそれを行うか知っていますか?


ありがとうパブロちゃん!この瞬間、私は:

public ISession Connect(string user, string password, string servicesUrl, string repositoryId)
    {
        IDictionary<string, string> parameter = new Dictionary<string, string>();

        parameter.Add(DotCMIS.SessionParameter.User, user);
        parameter.Add(DotCMIS.SessionParameter.Password, password);
        parameter.Add(DotCMIS.SessionParameter.BindingType, DotCMIS.BindingType.WebServices);
        parameter.Add(DotCMIS.SessionParameter.WebServicesAclService, (servicesUrl + "ACLService?wsdl").ToString());
        parameter.Add(DotCMIS.SessionParameter.WebServicesDiscoveryService, (servicesUrl + "DiscoveryService?wsdl").ToString());
        parameter.Add(DotCMIS.SessionParameter.WebServicesMultifilingService, (servicesUrl + "MultiFilingService?wsdl").ToString());
        parameter.Add(DotCMIS.SessionParameter.WebServicesNavigationService, (servicesUrl + "NavigationService?wsdl").ToString());
        parameter.Add(DotCMIS.SessionParameter.WebServicesObjectService, (servicesUrl + "ObjectService?wsdl").ToString());
        parameter.Add(DotCMIS.SessionParameter.WebServicesPolicyService, (servicesUrl + "PolicyService?wsdl").ToString());
        parameter.Add(DotCMIS.SessionParameter.WebServicesRelationshipService, (servicesUrl + "RelationshipService?wsdl").ToString());
        parameter.Add(DotCMIS.SessionParameter.WebServicesRepositoryService, (servicesUrl + "RepositoryService?wsdl").ToString());
        parameter.Add(DotCMIS.SessionParameter.WebServicesVersioningService, (servicesUrl + "VersioningService?wsdl").ToString());
        parameter.Add(DotCMIS.SessionParameter.RepositoryId, (repositoryId));

        ISessionFactory factory = DotCMIS.Client.Impl.SessionFactory.NewInstance();
        return factory.CreateSession(parameter);
    }

    public List<CMISIntegrationResponse> GetFiles(CMISIntegrationRequest request)
    {
        List<CMISIntegrationResponse> cmisIntegrationResponseList = new List<CMISIntegrationResponse>();

        ISession session = Connect(request.UserName, request.Password, request.ServicesUrl, request.RepositoryId);

        IItemEnumerable<IQueryResult> result = session.Query(@"SELECT
                                                               cmis:name, cmis:objectId, cmis:baseTypeId, cmis:objectTypeId, cmis:createdBy,
                                                               cmis:lastModifiedBy, cmis:lastModificationDate,cmis:contentStreamMimeType,
                                                               cmis:contentStreamFileName,cmis:contentStreamId,cmis:contentStreamLength
                                                               FROM cmis:document
                                                               ORDER BY
                                                               cmis:name, cmis:createdBy", false);

        foreach(QueryResult item in result) 
        {
            if (item.AllowableActions.Actions.Contains(DotCMIS.Actions.CanGetContentStream))
            {
                foreach (DotCMIS.Data.IPropertyData property in item.Properties)
                {

                    /*AccountNumber will be a property/metadata of any document
                      In this point i can not see any property/metadata called  "AccountNumber"
                     */

                    if (property.DisplayName.Equals("AccountNumber"))
                    {
                        CMISIntegrationResponse response = new CMISIntegrationResponse();
                        response.Name = item.GetPropertyValueByQueryName("cmis:name").ToString();
                        response.ObjectId = item.GetPropertyValueByQueryName("cmis:objectId").ToString();
                        response.BaseTypeId = item.GetPropertyValueByQueryName("cmis:baseTypeId").ToString();
                        response.ObjectTypeId = item.GetPropertyValueByQueryName("cmis:objectTypeId").ToString();
                        response.CreatedBy = item.GetPropertyValueByQueryName("cmis:createdBy").ToString();
                        response.LastModifiedBy = item.GetPropertyValueByQueryName("cmis:lastModifiedBy").ToString();
                        response.LastModificationDate = item.GetPropertyValueByQueryName("cmis:lastModificationDate").ToString();
                        response.ContentStreamMimeType = item.GetPropertyValueByQueryName("cmis:contentStreamMimeType").ToString();
                        response.ContentStreamFileName = item.GetPropertyValueByQueryName("cmis:contentStreamFileName").ToString();
                        response.ContentStreamId = item.GetPropertyValueByQueryName("cmis:contentStreamId").ToString();
                        response.ContentStreamLength = item.GetPropertyValueByQueryName("cmis:contentStreamLength").ToString();

                        cmisIntegrationResponseList.Add(response);
                    }
                }
            }
        }

        session.Clear();
        return cmisIntegrationResponseList;
    }

CMIS Alfresco の仮想テーブルとその列のリストはどこで確認できますか?

ありがとう!

4

2 に答える 2

1

CMIS クエリを Alfresco に送信できます。最初に CMIS Query Language について読むことをお勧めします。その後、dotCMIS ガイドをお読みください

my:aspect や my:field など、フィールドで定義されたタイプまたはアスペクトがあるとします。

クエリは次のようになります。

SELECT * FROM my:aspect WHERE my:field = "some value"

コードは次のようになります。

session.Query("SELECT * FROM my:aspect WHERE my:field = 'some value'", false);

編集:

わかりました、あなたのコードを読みましたが、言及しなかったことがもう 1 つあります。フィールド (アカウント番号) が表示されない理由は、クエリ結果に、クエリされたタイプ/アスペクト (この場合は cmis:object) に対して定義されたフィールドのみが含まれているためです。「AccountNumber」に対してクエリを実行する場合は、定義されているタイプ/アスペクトを知る必要があります。

タイプ「custom:myType」で「AccountNumber」が定義されているとします。クエリは次のようになります。

SELECT * from custom:myType

結果には「AccountNumber」が含まれます。

フィールドがアスペクトで定義されている場合、JOIN でクエリを実行できます: http://wiki.alfresco.com/wiki/CMIS#Aspect_Query

これが役立つことを願っています。

于 2014-01-20T23:05:11.107 に答える
1

CMIS Alfresco の仮想テーブルとその列のリストはどこで確認できますか?

これを行う最善の方法は、Apache Chemistry から OpenCMIS Workbench をダウンロードすることです。それを起動し、Alfresco に接続して、[タイプ] をクリックします。ワークベンチは、リポジトリが認識しているタイプの階層リストを表示します。

次に、関心のある特定のタイプをクリックすると、ワークベンチにそのタイプのプロパティが表示されます。スクロールすると、「クエリ可能な」列が表示されます。その列が true の場合、そのプロパティの値をテストするクエリを作成できます。クエリでプロパティの「クエリ名」を使用します。

于 2014-01-23T17:52:50.360 に答える