Получить все документы, содержащие определенный атрибут в Alfresco, используя dotcmis

Сегодня я искал хороший способ получить все документы, содержащие определенный атрибут, на открытом воздухе, используя dotcmis.

Я думал в:

  • Используйте Ephesoft (http://www.ephesoft.com/) для захвата документов.
  • Подключите Ephesoft к Alfresco с помощью интеграции cmis.
  • Настройка свойств документа в соответствии с моделью alfresco (документ метаданных)
  • Разработайте модуль в моем веб-приложении (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?

Спасибо!


person julio.aescobar    schedule 20.01.2014    source источник


Ответы (2)


Вы можете отправить запрос CMIS в Alfresco. Я рекомендую сначала прочитать о языке запросов CMIS. После этого прочитайте руководство по dotCMIS.

Допустим, у вас есть тип или аспект, определенный с вашим полем, например. мой: аспект и мое: поле.

Запрос может выглядеть так:

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

Код будет:

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

РЕДАКТИРОВАТЬ:

Хорошо, я прочитал ваш код и есть еще одна вещь, которую я не упомянул. Причина, по которой вы не видите свое поле (номер счета), заключается в том, что результат запроса содержит только поля, определенные для запрашиваемого типа/аспекта (в данном случае cmis:object). Если вы хотите запросить «AccountNumber», вам нужно знать тип/аспект, в котором он определен.

Предположим, что «AccountNumber» определен в типе «custom:myType». Запрос будет выглядеть так:

SELECT * from custom:myType

Результат будет содержать «AccountNumber».

Если поле определено в аспекте, вы можете выполнить запрос с помощью JOIN: http://wiki.alfresco.com/wiki/CMIS#Aspect_Query

Надеюсь, это поможет.

person pablochan    schedule 20.01.2014

Где я могу увидеть список виртуальных таблиц и их столбцов CMIS Alfresco?

Лучший способ сделать это — загрузить OpenCMIS Workbench из Apache Chemistry. Запустите его, подключитесь к Alfresco, затем нажмите «Типы». Затем Workbench отобразит иерархический список типов, о которых известно репозиторию.

Если затем щелкнуть определенный тип, который вас интересует, в Workbench отобразятся свойства этого типа. Если вы прокрутите страницу, вы увидите столбец «запрашиваемый». Если этот столбец верен, вы можете написать запросы, которые проверяют значение этого свойства. Используйте свойство «Имя запроса» в своем запросе.

person Jeff Potts    schedule 23.01.2014