2017-05-09 38 views
0

こんにちは私はポストメソッドを使用してレスポンスを作成しようとしていますが、ハードコーディングではなく変数を動的に渡したいのですが、 postメソッド(例:array ["CN = XXX_XX、OU = XXXXX、OU = 1_XXXX XXXXityグループ、DC = XXXX、DC = local"]を使用してRest Webサービスにパラメータとして配列を送信する)それを行うためのより良い方法私のコードのサンプルを見つけてください。これは私に適切な結果を与える方法です。 第一の方法:(ワークス) `Postメソッドを使用してRest Webサービス用setRequestBodyを設定する

try { 
      var r = new sn_ws.RESTMessageV2('SailPoint_IdM', 'post'); 
      var txt = "{\r\n\t\"workflowArgs\":\r\n\t{\r\n\t\"identityName\":\"SiamR\",\r\n\t\"appName\":\"Active Directory\",\r\n\t\"listEntitlements\":[\"CN=ER_CxxxK,OU=xxxxx,OU=1_xxxxxx Security xxx,DC=xxxx,DC=local\"],\r\n\t\"operation\":\"Add\",\r\n\t\"ticketNumber\":\"RITM1234567\"\r\n\t}\r\n}"; 
    r.setRequestBody(txt); 
    var response = r.execute(); 
    var ResponseBody = response.getBody(); 
    var HTTPCode = response.getStatusCode(); 
    gs.log(ResponseBody); 
    gs.log(HTTPCode); 

} catch (ex) { 
    var message = ex.getMessage(); 
} 

出力:

Script: {"attributes":{"requestResult":{"status":"Success"}},"complete":false,"errors":null,"failure":false,"metaData":null,"requestID":"2c988d8c5bd47cf7015bebfb64cf01e6","retry":false,"retryWait":0,"status":null,"success":false,"warnings":null} 
Script: 200 

2nのメソッド(機能しない):

try { 
var r = new sn_ws.RESTMessageV2('SailPoint_IdM', 'post'); 
r.setStringParameter('"listEntitlements"', '["CN=Exxx_xxxK,OU=xxxxion,OU=1_xxxxx Security xxxx,DC=xxx,DC=xxxx"]'); 
r.setStringParameter('"identityName"', '"SiarmR"'); 
r.setStringParameter('"appName"', '"Active Directory"'); 
r.setStringParameter('"ticketNumber"', '"RITM1234567"'); 
r.setStringParameter('operation', '"Add"'); 

//override authentication profile 
//authentication type ='basic'/ 'oauth2' 
//r.setAuthentication(authentication type, profile name); 

var response = r.execute(); 
var responseBody = response.getBody(); 
var httpStatus = response.getStatusCode(); 
gs.log(responseBody); 
} 
catch(ex) { 
var message = ex.getMessage(); 
} 

出力:

Script: {"attributes":{"requestResult":{"errors":["An unexpected error occurred: sailpoint.tools.GeneralException: The application script threw an exception: java.lang.NullPointerException: Null Pointer in Method Invocation BSF info: script at line: 0 column: columnNo"],"status":"FAIL","GroupStatus":null,"AppStatus":null}},"complete":false,"errors":["Status : failed\nAn unexpected error occurred: sailpoint.tools.GeneralException: The application script threw an exception: java.lang.NullPointerException: Null Pointer in Method Invocation BSF info: script at line: 0 column: columnNo\n"],"failure":false,"metaData":null,"requestID":null,"retry":false,"retryWait":0,"status":null,"success":false,"warnings":null} 

Script: 200 

イムファインARAYのparamenter「["CN=Exxx_xxxK,OU=xxxxion,OU=1_xxxxx Security xxxx,DC=xxx,DC=xxxx"]

として、これを渡そうとイムとして、このパラメータを持つグラムの問題がこれを実装すると以下

答えて

0

が私の機能の一つである第一の方法を示唆して動的場合は、すべての変数を渡す方法を提案してください、要求エンドポイント(url)、ヘッダーまたは本文に表示される動的パラメータを処理する。例えばのために

:パラメータp

var p = {abc: 'def'}; 

とoutbuond残りの設定:

rest url = https://xxxx.sss.com/api/showme?name=${abc} 
rest headers name = custom-header; value = ${abc} 
rest body = {name: "${abc}"} 

ので、それは 'DEF'

_.isNullOrEmpty - check is obj, string or array is null or empty; 
_.loop - loop an obj or array, pass in function(nm/i, val) {} 
_.isArray - to check if is array 
_.str - convert anything to string 
_.rpl - replace all string A to B 

restParameters: function (restRequest, obj, endpoint) { 
    var _ = this; 
    if ((_.isNullOrEmpty(restRequest)) || (_.isNullOrEmpty(obj))) return; 
    if (_.isNullOrEmpty(endpoint)) endpoint = restRequest.getEndpoint(); 
    var body = restRequest.getRequestBody(); 
    var headers = restRequest.getRequestHeaders(); 
    _.loop(obj, function(nm, val) { 
     if (_.isArray(val)) { 
      val = (_.isNullOrEmpty(val)) ? '[]' : JSON.stringify(val); 
     } else val = _.str(val); 
     //for my case my array pass in as string become: "[\"1\", \"2\"]" 
     //comment below if pass in as object 
     if (val.contains('"')) val = _.rpl(val, '"', '\\"'); 

     restRequest.setStringParameterNoEscape(nm, val); 
     var sch = '${' + nm + '}'; 
     endpoint = _.rpl(endpoint, sch, val); 
     body = _.rpl(body, sch, val); 
     _.loop(headers, function (hn, hv) { 
      headers[hn] = _.rpl(hv, sch, val); 
     }); 
    }, true); 
    restRequest.setEndpoint(endpoint); 
    restRequest.setRequestBody(body); 
    _.loop(headers, function (hn, hv) { restRequest.setRequestHeader(hn, hv); }); 
} 
に、すべての$ {ABC}を置き換えます
関連する問題