Você pode ter um fluxo de mensagens que processe uma mensagem que contém subcampos delimitados. Você pode codificar o ESQL para extrair um subcampo do conteúdo ao redor se conhecer os delimitadores do subcampo.
Se você criar uma função que execute essa tarefa ou uma tarefa semelhante, poderá chamá-la a partir dos módulos ESQL (para os nós Compute, Database e Filter) e a partir dos arquivos de mapeamento (utilizados pelos nós DataDelete, DataInsert, DataUpdate, Extract, Mapping e Warehouse).
O seguinte exemplo de função extrai um subcampo específico de uma mensagem que é delimitada por um caractere específico.
CREATE FUNCTION SelectSubField (SourceString CHAR, Delimiter CHAR, TargetStringPosition INT) RETURNS CHAR -- Essa função retorna uma subcadeia na posição do parâmetro TargetStringPosition dentro do -- parâmetro transmitido SourceString. Um exemplo de uso pode ser: -- SelectSubField(MySourceField,' ',2) que selecionará o segundo subcampo do -- campo MySourceField delimitado por um espaço em branco. Se MySourceField tiver o valor -- "First Second Third" a função retornará o valor "Second" BEGIN DECLARE DelimiterPosition INT; DECLARE CurrentFieldPosition INT 1; DECLARE StartNewString INT 1; DECLARE WorkingSource CHAR SourceString; SET DelimiterPosition = POSITION(Delimiter IN SourceString); WHILE CurrentFieldPosition < TargetStringPosition DO IF DelimiterPosition = 0 THEN -- DelimiterPosition será 0 se o delimitador não for localizado -- saia do loop SET CurrentFieldPosition = TargetStringPosition; ELSE SET StartNewString = DelimiterPosition + 1; SET WorkingSource = SUBSTRING(WorkingSource FROM StartNewString); SET DelimiterPosition = POSITION(Delimiter IN WorkingSource); SET CurrentFieldPosition = CurrentFieldPosition + 1; END IF; END WHILE; IF DelimiterPosition > 0 THEN -- Remova tudo após o delimitador da cadeia SET WorkingSource = SUBSTRING(WorkingSource FROM 1 FOR DelimiterPosition); SET WorkingSource = TRIM(TRAILING Delimiter FROM WorkingSource); END IF; RETURN WorkingSource; END;