Может ли кто-нибудь помочь мне в написании кода DW для кода ниже Java - PullRequest
0 голосов
/ 05 марта 2020

Вот версия java, может кто-нибудь помочь мне сделать это в версии mulesoft dw. Ниже работает с java, не знаю, как это можно сделать с помощью dataweave 2

public class MyUtils {
    public static String convertSfId(String idSalesforce) {
        if(idSalesforce.length() == 18){

            return idSalesforce;
        }
        else if(idSalesforce.length() != 15){

            return null;
        }
        else{
            String suffix = "";
            String idOut= "";
            String InChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ012345";
            for(Integer i = 0; i<3; i++){
                Integer flags = 0;
                for(Integer j = 0; j<5; j++){
                    String c = idSalesforce.substring(i*5+j, i*5+j+1);
                    if((c.compareTo("A")>=0) && (c.compareTo("Z")<=0)){
                        flags += 1 << j;
                    }
                }
                suffix = suffix + InChars.substring(flags, flags+1);
            }
            idOut = idSalesforce + suffix;

            return idOut;
        }
    }
}

Ответы [ 2 ]

3 голосов
/ 07 марта 2020
%dw 2.0
output application/json
import * from dw::core::Strings
var id="dddddfe001hhEEE"
var alphaNums = "ABCDEFGHIJKLMNOPQRSTUVWXYZ012345"

fun convertSfId(data)= 
    if(sizeOf(data) == 18)  data
    else if(sizeOf(data) != 15)  null
    else outerLoop()

fun outerLoop() = [0,1,2] reduce (oIndex, acc=id) -> (acc ++ alphaNums[innerLoop(oIndex)])
fun innerLoop(oIndex) = [0,1,2,3,4] reduce (iIndex, acc=0) -> innerAcc(oIndex, iIndex, acc)

fun innerAcc(oIndex, iIndex, acc) =
    if(isUpperCase(id[(oIndex*5 + iIndex)])) 
        acc + (2 pow iIndex) 
    else 
        acc
---
convertSfId(id)
0 голосов
/ 06 марта 2020

@ Дейл Спасибо за ваш комментарий. Я дал попробовать и поднялся ниже

%dw 2.0
output application/json
import * from dw::core::Strings
var id="001700000156M2c"

var test=id [0 to 5]
fun convertSfId(data)= 
if(sizeOf(data) == 18)  data
    else if(sizeOf(data) != 15)  null
    else [0 to 3] map(data,i) ->{
       ( [0 to 5]  map(data,j)  ->  using(c=data [(i*5+j) to (i*5+j+1)] ){
        // didn’t find compare strings lexicographically
    // and also in java we can create variables in between not sure how to do that in dw 
    // for example in java flags += 1 << j; here am updating flags 

        })
    } 

---
convertSfId(id)
...