Olá!
Tenho um Dataset customizado que consulta o código e o nome da empresa no Datasul via EXECBO. Agora eu preciso implementar a função DisplayFields para preencher o campo nome da empresa conforme o retorno deste dataset.
O problema é que não sei exatamente como fazer a passagem de parâmetros para o fields que vai popular a temp-table.
Os parâmetros da temp-table estão conforme a imagem em anexo.
Quero passar como parâmetro do fields, o código da empresa getValue("WKCompany") e retornar o nome da empresa do Dataset customizado. Isto é possível?
Isto também será importante outras pesquisas. Retornar apenas os itens de um determinado grupo de estoque, por exemplo.
Obrigada.
Ronara,
No seu displayFields você precisa ter um chamada a um dataset passando um ARRAY, por exemplo:
Ao chamar seu dataset customizado:
var dsQuestoes = DatasetFactory.getDataset("seu_dataset_customizado", ["valor_1", "valor_2"], null, null);
E no dataset customizado, você vai receber os valores através do parametro "fields":
function createDataset(fields, constraints, sortFields)
Na sequencia pode obter a informação desta forma:
if (fields[0] == 'create') {
codigo = "criado"
}
Olá Peter, eu fiz a implementação da seguinte forma:
var cod_empresa = new String(getValue("WKCompany"));
var dataset = DatasetFactory.getDataset("ems_consulta_empresa", new Array(cod_empresa), null, null);
O log mostra que o campo fields[0] carregou o código da empresa corretamente,porém ao executar a integração da EXECBO ocorre o erro :
2017-10-24 10:18:34,970 ERROR [com.datasul.technology.webdesk.customization.ScriptingLog] (default task-49) Java class "[Ljava.lang.reflect.Constructor;" has no public instance field or method named "toJSON". (#53)
Isto não acontece quando eu implemento o campo cod_empresa dentro do próprio dataset ems_consulta_empresa.
O problema só ocorre quando é feito via fields.
A EXECBO está preparada para receber parâmetros via fields?
Obrigada
Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.
Não conheço bem a EXECBO, isto pode acontecer por conta da tipagem da variável, recomendo que teste passando uma String, Número ou Decimal.
Olá Ronara, eu tenho integração FluigxDatasul via webservice ExecBO e o webservice do Datasul aceita passagem de parâmetros, não sei como você faz os desenvolvimentos ai, mais a principio seu programa .P deverá está esperando um parâmetro de entrada, tipo DEFINE INPUT PARAMETER c-codigoEmpresa AS CHARACTER NO-UNDO.
No seu JSON que você passa pra ser executado, tem que ter montado toda a estrutura da Temp-TABLE, como os campos LABEL, quais são os campos de saída output, que no seu caso deve ser a descrição da empresa...
Olá Marcos, consegui fazer aqui. Obrigada mas não será necessário. Precisando pode contar!
Boa noite Ronara, tudo bem?
Como você resolveu o problema? Estou passando pelo mesmo erro.
Obrigado.
Achei um post na web sobre o erro has no public instance field or method named "toJSON". Vi que o problema são tipos de variáveis java. O JSON.stringify() é uma função javascript e só aceita tipos javascript. Veja o post: https://www.qvera.com/kb/index.php/1156/json-stringify-throws-an-exception.
No meu dataset, os parâmetros inteiros eu multipliquei por 1 e os string eu concatenei com "". Aí o erro parou de ocorrer:
if (constraints != null) {
for (var i = 0; i < constraints.length; i++) {
if (constraints[i].fieldName == "registro") {
registro = 1 * parseInt(constraints[i].initialValue);
}
else if (constraints[i].fieldName == "estabelecimento") {
estabelecimento = "" + constraints[i].initialValue;
}
}
}