2014-01-20 1 views
1

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

Я думал в:

  • Использование Ephesoft (http://www.ephesoft.com/) для захвата документов.
  • Соедините Ephesoft с Alfresco, используя интеграцию cmis.
  • Конфигурирование свойств документа в соответствии с моделью alfresco (документ метаданных)
  • Разработка модуля в моем веб-приложении (asp.net) для поиска всего документа с определенным свойством (метаданные); используя dotcmis (http://chemistry.apache.org/dotnet/dotcmis.html)

Я finded:

  • Как создать сеанс.
  • Как список дерево папки

кроме ... Как проверить каждый документ, если бы выставиться определенное свойство (метаданные)?

Вы знаете, как это сделать?


Thanks pablochan! В этот момент у меня есть:

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; 
    } 

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

Спасибо!

ответ

1

Вы можете отправить запрос CMIS в Alfresco. Я рекомендую reading about CMIS Query Language first. После этого read the dotCMIS guide.

Предположим, что у вас есть тип или аспект, определенные вашим полем, например. 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); 

EDIT:

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

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

SELECT * from custom:myType 

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

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

Я надеюсь, что это помогает.

+0

Позвольте мне видеть ... Спасибо !!! –

+0

Спасибо !!!!!!!!! –

1

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

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

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

Смежные вопросы