2017-05-09 2 views
0

Hallo Ich versuche, eine Ruhe-Antwort mit Post-Methode zu erstellen, möchte ich die Variablen statt der harten Codierung dynamisch weitergeben, aber wo ich scheitere ist, wenn ich versuche um ein Array als Parameter an den Rest-Web-Service zu senden, indem die post-Methode verwendet wird (Beispiel Array ["CN = XXX_XX, OU = XXXXX, OU = 1_XXXX XXXXity Gruppen, DC = XXXX, DC = local"]) und ich weiß, dass es gibt ein besserer Weg, das zu tun. Bitte finden Sie mein Code-Beispiel. Dies ist die Methode, die mir ein passendes Ergebnis gibt. Erste Methode: (Works) `Einstellung setRequestBody für Rest Web-Dienste mit Post-Methode

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

Ausgang:

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-Methode (funktioniert nicht):

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

Ausgang:

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 

Im Facin g Problem mit diesem Parameter wie im Versuch, diese als aray Paramenter ‚["CN=Exxx_xxxK,OU=xxxxion,OU=1_xxxxx Security xxxx,DC=xxx,DC=xxxx"]‘ dies zu implementieren

Bitte deuten auf eine Art und Weise zu übergeben und die Variablen alle dynamisch zu übergeben, wenn erste Methode darauf hindeutet,

Antwort

0

Unterhalb einem meiner Funktion ist, dynamische Parameter entweder in Anforderungsendpunkt (URL), Kopfzeilen oder Textkörper zu behandeln;

Für zB: Parameter p

var p = {abc: 'def'}; 

und outbuond Rest Einstellungen:

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

so wird es alle $ {abc} zu 'def' ersetzen

_.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); }); 
}