Boa noite pessoal,
Consegui fazer a criação de novos registros de formulários através da API "/2.0/cards/create
" - link;
É possível atualizar esses registros através de chamadas RESTs? Não encontrei nenhum material sobre.
Obrigada!
Boa noite pessoal,
Consegui fazer a criação de novos registros de formulários através da API "/2.0/cards/create
" - link;
É possível atualizar esses registros através de chamadas RESTs? Não encontrei nenhum material sobre.
Obrigada!
@Levy, Segue exemplo de código:
dados =
{
"parentDocumentId": 6, // código do formulario "pai"
"version": 1000, //versão
"formData": [ // lista dos campos
{
"name": "<id_campo>",
"value": "<valor_campo>"
},
{
"name": "<id_campo>",
"value": "<valor_campo>"
}
]
};
$.ajax({
url : '/api/public/2.0/cards/create',
type : "POST",
contentType : "application/json",
Accept : "text/html",
data : dados,
success : function(data) {
console.log("sucesso");
},
error : function(data, errorThrown, status) {
console.log("erro");
}
});
Você teve que fazer o cadastro de algum serviço ou do Oauth ou apenas utilizou desse jeito? Pois estou sempre recebendo que não estou autorizado :/
— Levy. 13 de Sep de 2018Oi Levy, não tive não. Usei exatamente esse código que mandei, só alterei o código do formulário para o correto, e os nomes/valores dos campos. O Formulário pai possui permissão de leitura para "todos"?
— Renata 13 de Sep de 2018Renata já é possível sim atualizar formulários, no caso eu utilizo principalmente a chamada "editCard" para atualizar e a "saveNewCardItem" para salvar. Abaixo seguem os exemplos:
Editar Formulários (alterar o header Authorization):
var _returnAjax = {
'api': '',
'data': {'content': {columns: [], values: []} },
'mensage': '',
'status': 0,
'error': ''
};
function saveFormAjax(url, documentId, version, formData){
var ok = false;
var rrAjax = null;
var api = url + "/ecm/api/rest/ecm/cardView/editCard/" + documentId + "/" + version;
_returnAjax.api = api;
if(typeof(formData) == "object"){
formData = JSON.stringify(formData);
}
var settings = {
"async": false,
"crossDomain": false,
"url": api,
"method": "POST",
"headers": {
"Accept": "application/json, text/javascript, */*; q=0.01",
"Accept-Language": "pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7",
"Content-Type": "application/json; charset=UTF-8",
"X-Requested-With": "XMLHttpRequest",
"Authorization": readCookie("jwt.token"),
"cache-control": "no-cache",
},
"data": formData
}
$.when(
$.ajax(settings).done(function(dataAjax, textStatus, jqXHR) {
ok = true;
_returnAjax.data = dataAjax;
_returnAjax.mensage = 'return.';
_returnAjax.status = jqXHR.status;
_returnAjax.error = (!ok);
return _returnAjax;
//}).fail(function(data) {
}).fail(function(jqXHR, textStatus, errorThrown) {
var msgErro = jqXHR.responseText;
ok = false;
_returnAjax.data = {'content': {columns: [], values: []} };
_returnAjax.mensage = msgErro;
_returnAjax.status = jqXHR.status;
_returnAjax.error = (!ok);
if(ok == false){
rrAjax = _returnAjax;
}
return _returnAjax;
})
).then(function( data, textStatus, jqXHR ) {
rrAjax = _returnAjax;
if(ok == false){
console.log( 'ERRO: ' + jqXHR.status + ' - ' + jqXHR.responseText );
}
});
return rrAjax;
}
Salvar Formulários (alterar o header Authorization):
var _returnAjax = {
'api': '',
'data': {'content': {columns: [], values: []} },
'mensage': '',
'status': 0,
'error': ''
};
function createFormAjax(url, companyId, publisherId, WDParentDocumentId, attachments, cardDescription, metaListId, cardFormData, objData){
var ok = false;
var rrAjax = null;
var api = url + "/ecm/api/rest/ecm/cardPublisher/saveNewCardItem";
_returnAjax.api = api;
if(typeof(objData) === 'undefined'){
var objData = new Object();
objData = {
"companyId": companyId,
"documentId":0,
"version": 1000,
"parentDocumentId": WDParentDocumentId,
"privateDocument":false,
"manualVersion":false,
"documentDescription":"",
"additionalComments":"",
"versionDescription":null,
"cardDescription": cardDescription,
"publisherId": publisherId,
"inheritSecurity":true,
"publicDocument":false,
"inheritApprovers":false,
"uploadFolder": url + "/webdesk/Upload",
"deleteUploadFiles":true,
"documentType":"5",
"documentTypeId":null,
"infGeralVO":null,
"approved":false,
"securityPermissionVOs":null,
"securityRestrictionVOs":null,
"publisherApproverVOs":null,
"activeApproverTab":false,
"relatedDocumentVO":null,
"principalFileName":"",
"hasParentApprover":false,
"attachments": attachments,
"allocatedPK":null,
"editableDocumentData":"",
"saveDraft":false,
"userSecurityLevel":3,
"defaultPropertyVO":null,
"ckbDefaultPropertyVO":null,
"adminUser":false, // true,
"phisicalFile": url + "/webdesk/streamcontrol/" + WDParentDocumentId + "/0/0/?WDCompanyId=" + companyId + "&WDNrDocto=0&WDNrVersao=0&WDParentDocumentId=" + WDParentDocumentId,
"folderList":null,
"formData":null,
"attach":null,
"relatedFiles":null,
"rootPrivateFolder":false,
"tabActivated":false,
"metaListId": metaListId,
"cardFormData": cardFormData,
"changeAllActiveCards":false,
"permissionType":0,
"restrictionType":0,
"uploadId":null,
"oldViewer":false,
"uploadUrl":null,
"imutable":null,
"hasPendentApprovals":false,
"formDatasetVOs":null,
"message":null,
"internalFields":[]
};
}
if(typeof(objData) == 'object'){
objData = JSON.stringify(objData);
}
var settings = {
"async": false,
"crossDomain": false,
"url": api,
"method": "POST",
"headers": {
"Accept": "application/json, text/javascript, */*; q=0.01",
"Accept-Language": "pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7",
"Content-Type": "application/json; charset=UTF-8",
"X-Requested-With": "XMLHttpRequest",
"Authorization": readCookie("jwt.token"),
"cache-control": "no-cache",
},
"data": objData
}
$.when(
$.ajax(settings).done(function(dataAjax, textStatus, jqXHR) {
ok = true;
_returnAjax.data = dataAjax;
_returnAjax.mensage = 'return.';
_returnAjax.status = jqXHR.status;
_returnAjax.error = (!ok);
return _returnAjax;
//}).fail(function(data) {
}).fail(function(jqXHR, textStatus, errorThrown) {
var msgErro = jqXHR.responseText;
ok = false;
_returnAjax.data = {'content': {columns: [], values: []} };
_returnAjax.mensage = msgErro;
_returnAjax.status = jqXHR.status;
_returnAjax.error = (!ok);
if(ok == false){
rrAjax = _returnAjax;
}
return _returnAjax;
})
).then(function( data, textStatus, jqXHR ) {
rrAjax = _returnAjax;
if(ok == false){
console.log( 'ERRO: ' + jqXHR.status + ' - ' + jqXHR.responseText );
}
});
return rrAjax;
}
Também existe a maneira de usar os métodos do "ECMCardService" via requisições XML:
function updateFormECM(cardId, campo, valor) {
let url = parent.WCMAPI.serverURL + "/webdesk/ECMCardService?wsdl";
let xmlItem = "<item>";
xmlItem += " <field>" + campo + "</field>";
xmlItem += " <value>" + valor + "</value>";
xmlItem += "</item>";
let xml = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.dm.ecm.technology.totvs.com/">'
+'<soapenv:Header/>'
+'<soapenv:Body>'
+'<ws:updateCardData>'
+'<companyId>' + top.WCMAPI.organizationId + '</companyId>'
+'<username></username>'
+'<password></password>'
+'<cardId>' + cardId + '</cardId>'
+'<cardData>'
+ xmlItem
+'</cardData>'
+'</ws:updateCardData>'
+'</soapenv:Body>'
+'</soapenv:Envelope>';
requestXML(url, xml);
}
function requestXML(url, xml){
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var response = (this.responseText);
console.log(response);
}
};
xhr.open("POST", url, false);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(xml);
}
Obs: se nada disso funcionar você pode optar por fazer uma requisição ajax chamando um dataset pela API "/api/public/ecm/dataset/datasets", e internamente dentro do dataset utilizar os métodos do ECMCardService:
function createDataset(fields, constraints, sortFields) {
var cardId = "";
var cardData = new Array();
try {
var ECMCardService = ServiceManager.getService('ECMCardService');
var serviceLocator = ECMCardService.instantiate('com.totvs.technology.ecm.dm.ws.ECMCardServiceService');
var service = serviceLocator.getCardServicePort();
if (constraints != null) {
for (var i = 0; i < constraints.length; i++) {
if (constraints[i].fieldName == "CardId") {
cardId = constraints[i].initialValue;
}
if (constraints[i].fieldName == "CardData") {
var cardDataValue = constraints[i].initialValue;
cardData.push(cardDataValue.split(';'));
}
}
}
if (cardId == "") throw "Insira o Card Id!";
if (cardData == "") throw "Insira o Card Data!";
var serviceObj = ECMCardService.instantiate('com.totvs.technology.ecm.dm.ws.ObjectFactory');
var cardFieldDtoArray = serviceObj.createCardFieldDtoArray();
for (var index in cardData) {
var cardFieldDto = serviceObj.createCardFieldDto();
cardFieldDto.setField(cardData[index][0]);
cardFieldDto.setValue(cardData[index][1]);
cardFieldDtoArray.getItem().add(cardFieldDto);
}
var result = service.updateCardData(
1,
'???@seudominio.com.br',
'suasenha',
cardId,
cardFieldDtoArray
);
var dataset = DatasetBuilder.newDataset();
//Cria as colunas
dataset.addColumn("Card Id");
dataset.addColumn("Card Data");
dataset.addColumn("Result");
dataset.addRow(new Array(cardId, cardData[0], result.getItem().get(0).getWebServiceMessage()));
return dataset;
} catch (e) {
log.warn("--Debbug-- Erro: "+ e +" "+e.lineNumber);
var dataset = DatasetBuilder.newDataset();
dataset.addColumn("Erro");
dataset.addColumn("Linha");
dataset.addRow(new Array(e, e.lineNumber));
return dataset;
}
}
Maravilhoso, Uákiti! Valeu mesmo!
— Mausim 27 de Mar de 2020Oi Renata!
Ainda não está disponível na API pública uma forma de atualizar registros de formulário já existentes. Você pode registrar uma sugestão para a plataforma entrando em contato com o Suporte fluig.
Como paliativo, a cada edição necessária você pode copiar os dados do registro de formulário a ser atualizado, remove-lo e criar um novo registro de formulário com os dados copiados anteriormente (e com as informações atualizadas conforme a necessidade).
Abs,
Marcos
Obrigada Marcos :)
— Renata 11 de Sep de 2018Para atualização do formulário, estou utilizando o webservice ECMCardService e na função updateCardData passo os dados que serão atualizados. Faço essa chamada utilizando o WCMAPI.Create()
— Rodrigo Raviere 28 de Mar de 2019
Renata, como você conseguiu consumir essa API? Consumiu no próprio fluig? Se sim, poderia disponibilizar o código? Obrigado.
— Levy. 13 de Sep de 2018Levy, adicionei como resposta!
— Renata 13 de Sep de 2018