【问题标题】:Querying Jazz RTC Work Items via OSLC通过 OSLC 查询 Jazz RTC 工作项
【发布时间】:2015-06-02 04:50:11
【问题描述】:

如果我使用以下请求知道票证 ID,我可以获取工作项 https://example.com:8081/ccm/oslc/workitems/37702.json。我想查询 RTC 以获取 gievn 用户拥有或基于标签的所有 wrorkitems。

我正在使用以下查询来获取数据,但无法获取详细信息。

根据工作项的所有者进行搜索 https://example.com:8081/ccm/oslc?oslc_cm.query=dc:owner="abc@gmail.com"

根据标签搜索 https://example.com:8081/ccm/oslc?oslc_cm.query=dc:subject="mc"

【问题讨论】:

    标签: rtc jazz ibm-jazz jazzylistview


    【解决方案1】:

    从爵士乐中获取数据的另一种方法是使用 SPARQL。您可以通过查找 jp06:query 从 rootservices (GET h_ttps://jazzserver:9443/ccm/rootservices) 找到 SPARQL 端点。

    虽然我确信手动构建 SPARQL 是可能的,但使用 LQE 作为数据源的 6.0 新版报告生成器更容易。转到格式-> 高级区域以查看生成的 SPARQL,如果您感到有编辑的冲动,尽管这样做时会丢失图形查询构建。只需单击几下即可创建一个 SPARQL 查询,该查询将返回 Fred(使用他的用户 ID fred)创建的所有 WI,例如:

    PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
    PREFIX oslc_config: <http://open-services.net/ns/config#>
    PREFIX dcterms: <http://purl.org/dc/terms/>
    PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
    PREFIX oslc: <http://open-services.net/ns/core#>
    PREFIX foaf: <http://xmlns.com/foaf/0.1/>
    PREFIX oslc_cm: <http://open-services.net/ns/cm#>
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    PREFIX process: <http://jazz.net/ns/process#>
    
    SELECT DISTINCT 
        ?rtc_cm_WorkItem1_projectArea
        ?rtc_cm_WorkItem1_shortId
        ?rtc_cm_WorkItem1_title
        ?rtc_cm_WorkItem1
        ?rtc_cm_WorkItem1_creator
    WHERE {
      VALUES ( ?rtc_cm_WorkItem1_creator_enumValue )
      {
        ( <https://jazzserver:9443/jts/users/fred> )
      }
      ?rtc_cm_WorkItem1_uri rdf:type oslc_cm:ChangeRequest.
      ?rtc_cm_WorkItem1_uri dcterms:creator ?rtc_cm_WorkItem1_creator_enumValue.
      OPTIONAL {?rtc_cm_WorkItem1_creator_enumValue foaf:name ?rtc_cm_WorkItem1_creator_enumName.}
      ?rtc_cm_WorkItem1_uri dcterms:title ?rtc_cm_WorkItem1_title.
      OPTIONAL {
        ?rtc_cm_WorkItem1_uri process:projectArea ?rtc_cm_WorkItem1_projectArea_enumValue.
        OPTIONAL {?rtc_cm_WorkItem1_projectArea_enumValue rdfs:label|dcterms:title ?rtc_cm_WorkItem1_projectArea_enumName.}
      }
      OPTIONAL {?rtc_cm_WorkItem1_uri oslc:shortId ?rtc_cm_WorkItem1_shortId.}
      OPTIONAL {?rtc_cm_WorkItem1_ver dcterms:isVersionOf ?rtc_cm_WorkItem1_uri; rdf:type oslc_config:VersionResource.}
      OPTIONAL {?rtc_cm_WorkItem1_uri process:projectArea ?rtc_cm_WorkItem1_paUri.}
      FILTER( !bound(?rtc_cm_WorkItem1_paUri) || NOT EXISTS{ ?rtc_cm_WorkItem1_paUri oslc:archived true. })
      BIND( IF (bound(?rtc_cm_WorkItem1_ver), concat(str(?rtc_cm_WorkItem1_uri), "?oslc_config.context="), ?rtc_cm_WorkItem1_uri) as ?rtc_cm_WorkItem1)
      BIND( COALESCE(?rtc_cm_WorkItem1_creator_enumName, ?rtc_cm_WorkItem1_creator_enumValue) as ?rtc_cm_WorkItem1_creator)
      BIND( COALESCE(?rtc_cm_WorkItem1_projectArea_enumName, ?rtc_cm_WorkItem1_projectArea_enumValue) as ?rtc_cm_WorkItem1_projectArea)
    }
    

    然后,要将结果作为 Atom 提要获取,请使用参数 query=YourSPARQL 从 h_ttps:/jazzserver:9443/ccm/query 执行 GET,当然必须对其进行编码。

    我确信手动构建这个简单的查询并不难,但报表生成器使它变得微不足道,而且它还理解元模型,因此有助于选择关系和属性名称 - 更少的错误,因为您不必(错误)输入这些。您还可以发布/共享查询,并使用它们来填充仪表板:-)

    希望这三种方法中的一种能满足您的需求。

    【讨论】:

      【解决方案2】:

      补充:这里有更多关于 CCM 上 OSLC 查询的详细信息https://jazz.net/wiki/bin/view/Main/ResourceOrientedWorkItemAPIv2#Querying_Work_Items

      不确定您的示例,但我在下面显示的内容适用于 Jazz 6.0。可能还有其他方法可以做到这一点。您可能会在 jazz.net 上获得更多回复。

      顺便说一句,我不得不混淆/破坏这篇文章中的网址,因为我没有足够的代表点。无论如何,它们都不是真正的 URL。通过从 h_ttps 中删除 _ 来修复。

      有一个用于 CM 查询的 OSLC 规范:http://open-services.net/bin/view/Main/OSLCCoreSpecQuery

      要将查询应用于项目区域,首先您必须获取项目区域标识符,从项目列表中获取该标识符,然后通过查询根服务获取用于获取项目列表的 URL。

      在本例中,我的服务器位于 jazzserver:9443。所有 GET 都需要一个标头 Accept 值 application/xml。大概可以得到 JSON 格式的结果。

      原来是这样的:

      1. 您可能必须先向服务器验证您的客户端,然后才能继续

      2. 获取https://jazzserver:9443/ccm/rootservices

      XML 结果,提取标签 jp06:projectAreas 属性 rdf:resource 中项目区域列表的 url,例如&lt;jp06:projectAreas rdf:resource="h_ttps://jazzserver:9443/ccm/process/project-areas"/&gt;

      1. GET h_ttps://jazzserver:9443/ccm/process/project-areas

      XML结果,从jp06:url的文本内容中提取项目URL嵌套如下:

      jp06:项目区域... jp06:项目区域... jp06:网址

      在我的情况下,这是 h_ttps://jazzserver:9443/ccm/process/project-areas/_pXsVsRmqEeWdnsGEjrjqng

      _pXsVsRmqEeWdnsGEjrjqng 是项目标识符。

      1. 通过 GET 从工作项的项目区域列表中执行查询,例如 h_ttps://jazzserver:9443/ccm/oslc/contexts/_pXsVsRmqEeWdnsGEjrjqng/workitems?oslc.query=dc.owner="fred"

      但是请注意,步骤 4 的 URL 已简化 - 具体而言,必须对参数值 dc.owner="fred" 进行编码,以便您的浏览器不会误解 " 和 = 就像您只是粘贴该 URL 时那样进入您的浏览器地址栏中 - 我在 POSTER 中通过将参数名称/值放入参数中进行了此查询。

      HTH

      【讨论】:

        【解决方案3】:

        可报告的 REST API 可能会提供另一种获取所需信息的方式:https://jazz.net/wiki/bin/view/Main/ReportsRESTAPI

        例如,此查询返回 Fred 创建的工作项 ID 的 XML 列表: h_ttps://jazzserver:9443/ccm/rpt/repository/workitem?fields=workitem/workItem[creator/name=%27Fred%27]/id

        注意 Fred 是用户名,而不是用户 ID(用户 ID 用于登录)。在我发布的 oslc 示例中,使用了用户 ID。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多