Rational DOORS 的 OSLC DXL 服務

IBM® Rational® DOORS® 中, OSLC Requirements Management (RM) 規格第 2 版的實作亦包含一項服務, 可讓您藉由使用 HTTP 通訊協定來執行 Rational DOORS DXL Script。
Rational 使用以 Open Services for Lifecycle Collaboration (OSLC) 為基礎的技術, 來提供與 Rational 和非 Rational 工具的整合。Rational DOORS 透過 OSLC DXL 服務, 補強了標準 OSLC 功能,您可以利用這項服務,經由 HTTP 來執行 Rational DOORS DXL Script。這項服務以 DXL Script 程式庫的概念為基礎。這項服務的使用程序如下:
  1. 使用者查閱必要的 OSLC DXL Script。
  2. 使用者呼叫 Script,將必要的參數包裝在 OSLC 呼叫中。如果您提交對於 DXL 服務 URI 的 GET 要求,回應會包含作者所提供的 Script 說明資訊。 如果您以選用參數提交對於 DXL 服務 URI 的 PUT 要求,會呼叫服務。
  3. Script 會在交互作業伺服器上執行。
  4. 公佈結果。

Script 由 Rational DOORS 管理者控制和自訂, 管理者可以決定要透過服務介面公開哪些 DXL Script。管理者可以鎖定呼叫特定函數的功能, 而這項功能可能會被視為潛在的安全風險,如 "runDXL"。

某些 DXL(例如:使用者介面小組件)將永不支援。

由於服務探索受 OAuth 保護, 如果您使用 OSLC DXL 服務,您必須輸入使用者名稱與密碼以進行鑑別。

OSLC DXL 服務的一般使用步驟如下:
  1. 建立 DXL Script。
  2. 將 DXL Script 安裝成服務。
  3. 透過服務探索找出服務。
  4. 呼叫這項服務。
  5. 從回應中擷取回覆值。

範例

  1. 建立名稱是 helloWorld.inc 的 DXL 檔,且其中包含下列程式碼:
    void getHelloString(string language)
    {
    		string hello = null
    
    		if ("French" == language)
    	{
    				hello = "Bonjour le monde"
    	} 
    		else if ("Finnish" == language)
    	{
    				hello = "Hei maailma"
    	} 
    		else if ("Latin" == language)
    	{
    				hello = "Ave mundi"
    	}
    	else
    	{
    				hello = "Hello world"
    	}
    
    	setDxlServiceResult hello
        
    		print hello "\n"
    }
  2. helloWorld.inc 檔複製到 /addins/services 目錄中。 這個目錄的預設位置是 C:\Program Files (x86)\IBM\Rational\DOORS\9.version\lib\dxl\addins\services
  3. 開啟 Rational DOORS 用戶端,並以管理者身分登入。
  4. 如果要安裝 DXL,請開啟一個 DXL 視窗,輸入下列 DXL 程式碼。 會建立名稱是 helloWorld 的服務。
    OSLCDXLService os = null
    string err = null
    
    string dxlCode = "#include <addins/services/helloWorld.inc>\n"
    err = addOrUpdateOSLCDXLService("helloWorld", "Hello world in several languages", dxlCode, "getHelloString")
    if (!null err)
    { 
    	print err 
    }  
    else
    { 
    		print "Installed Service\n"
    }
  5. 呼叫這項服務。URI 類似下列範例:http://servername:portnumber/dwa/rm/dxl/helloWorld
  6. 接受內容類型標頭設為下列項目:application/rdf+xml
  7. 確定要求內容類似下列程式碼:
    <?xml version="1.0" encoding="UTF-8"?>
    <rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:doors="http://jazz.net/doors/xmlns/prod/jazz/doors/2.0/">
      <doors:Arguments>
      <doors:arguments>English</doors:arguments>
      </doors:Arguments>
    </rdf:RDF>
  8. 如果要傳遞引數給服務,請使用 <doors:arguments> 元素。在元素文字中輸入代表必要引數的字串。DXL 服務會將該字串轉換成服務 DXL 函數所需要的引數。先前的範例顯示單一參數 English, 它會傳遞給 getHelloString 函數。如果 DXL 函數預期有兩個參數, 則要求應類似下列範例:
    <doors:Arguments>
    <doors:arguments>English,French</doors:arguments>
    </doors:Arguments>
    接收端 DXL 服務會將逗點區隔清單分割成個別的 EnglishFrench 字串。
  9. 如果您的引數不是字串類型,必須使用 DXL 將它們轉換成適當的類型。舉例來說, 如果引數是整數,您可以使用 intOf 運算, 將擷取自逗點區隔清單的字串轉換成整數類型值。然後您就可以將值傳遞給方法。
    回應內容類似下列程式碼:
    <?xml version="1.0" encoding="UTF-8"?>
    <rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:doors="http://jazz.net/doors/xmlns/prod/jazz/doors/2.0/">
      <doors:DxlServiceResult rdf:about="http://my-desktop:8080/dwa/rm/dxl/helloWorld>
      <doors:result>Hello world</doors:result>
      </doors:DxlServiceResult>
    </rdf:RDF>

服務不會執行任何配置。引數是以字串格式來指定,DXL Script 會從其中擷取值,再將它們轉換成預期的個別參數。


意見